大家都知道進階版本的資料庫檔案無法還原或者附加到低版本,因為高版本和低版本檔案格式會有不同。如果嘗試將低版本的資料庫附加或者還原到低版本的資料庫會看到類似下面的錯誤:
已備份資料庫的磁碟結構版本為611,伺服器支援版本為539,無法還原或升級資料庫。RESTORE FILELIST 操作異常結束。MicrosoftSQL Server,錯誤:3169)
大家可以看到這裡有兩個版本號碼,不是我們平時看到的伺服器版本號碼(select @@version),而是SQLServer內部資料庫版本號碼。這些版本號碼是沒有官方文檔的。不過我們可以使用DATABASEPROPERTYEX ‘Version’選項獲得這個版本號碼。
select DATABASEPROPERTYEX('master','version')
這裡我從網上找到了所有SQLServer版本對應的內部資料庫版本號碼的配置表(ternal SQL Server Database Version Numbers):
Target SQL Server Version |
Source SQL Server Version |
Internal Database Version |
SQL Server 2008 R2 |
SQL Server 2008 R2 |
665 |
SQL Server 2008 |
661 |
SQL Server 2005 with vardecimal enabled |
612 |
SQL Server 2005 |
611 |
SQL Server 2000 |
539 |
SQL Server 2008 |
SQL Server 2008 |
661 |
SQL Server 2005 with vardecimal enabled |
612 |
SQL Server 2005 |
611 |
SQL Server 2000 |
539 |
SQL Server 2005 SP2+ |
SQL Server 2005 with vardecimal enabled |
612 |
SQL Server 2005 |
611 |
SQL Server 2000 |
539 |
SQL Server 7 |
515 |
SQL Server 2005 |
SQL Server 2005 |
611 |
SQL Server 2000 |
539 |
SQL Server 7 |
515 |
SQL Server 2000 |
SQL Server 2000 |
539 |
SQL Server 7 |
515 |
SQL Server 7 |
SQL Server 7 |
515 |
通過這張配置表可以看到出錯原因是嘗試將2005的備份檔案還原到2000。如果沒有2005版本的話,只能將2005的資料庫指令碼匯出在2000上重建然後將資料匯入。
MSDN上DATABASEPROPERTYEX‘Version’選項的解釋:
用於建立資料庫的 SQL Server 代碼的組建號。僅供 SQLServer工具在內部用於升級處理。
本文出自 “關注SQL Server技術” 部落格,請務必保留此出處http://lzf328.blog.51cto.com/1196996/1096020