在這裡,我所指的版本是指的2000,2005,2008這樣的版本區別,而不是企業版,開發版這樣的版本區別.從官方的說法來看,SQL Server是允許資料庫從低版本向高版本恢複,但不支援高版本向低版本的恢複,如果我們用高版本的資料庫在低版本的資料庫引擎下恢複,會出現什麼錯誤描述呢?
資料庫恢複一般是指兩個層面的意思:一種方法是利用備份檔案進行還原;一種方法是利用資料檔案進行附加還原.
我們先來看備份還原的方式:
如果是用2005的資料庫在2000下還原,會出現錯誤:
Msg 3205, Level 16, State 2, Line 1
Too many backup devices specified for backup or restore; only 64 are allowed.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
如果是用2008的資料庫在2005下還原,會出現錯誤:
Msg 3241, Level 16, State 7, Line 1
The media family on device 'c:/xxx.bak' is incorrectly formed.
SQL Server cannot process this media family.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
接著我們來看附加還原的方式:
如果是用2005的資料庫在2000下附加還原,會出現錯誤:
Msg 1813, Level 16, State 2, Line 1
Could not open new database 'xxx'. CREATE DATABASE is aborted.
Msg 602, Level 21, State 50, Line 1
Could not find row in sysindexes for database ID 7, object ID 1, index ID 1.
Run DBCC CHECKTABLE on sysindexes.
如果是用2008的資料庫在2005下附加還原,會出現錯誤:
Msg 1813, Level 16, State 2, Line 1
Could not open new database 'Test'. CREATE DATABASE is aborted.
Msg 948, Level 20, State 1, Line 1
The database 'Test' cannot be opened because it is version 655.
This server supports version 612 and earlier. A downgrade path is not supported.
實踐也證明了官方的說法,其實一般很少有高版本的資料庫匯入到低版本的情況,如果確實需要這樣做,建議採取以下步驟:
1:通過管理器的指令碼產生嚮導,把資料庫,表,預存程序等對象的指令碼產生,然後在低版本的SQL Server下執行建立這些對象.
2:通過DTS/SSIS,將表中的資料導過去.