在SQL Server 中可以使用拆分(Detach)和附加(Attach)的方法來移動數據庫。拆分數據庫是從服務器中移去邏輯數據庫,但不會將操作系統中的數據庫文件刪除。附加數據庫將會創建一個新的數據庫,並復制存儲在已有的數據庫文件和事務日志文件中的數據。使用系統存儲過程Sp_detach_db 來拆分數據庫,用系統存儲過程Sp_attach_db 來附加數據庫。
Sp_detach_db 系統存儲過程的語法如下:
sp_detach_db [@dbname =] 'database_name'
[, [@skipchecks =] 'skipchecks']
其中[@skipchecks =] 'skipchecks'子句中Skipchecks 的值為True 或False。 當Skipchecks的值為True 時,指定在執行此過程之前不需要對數據庫中的所有表執行UPDATE STATISTICS命令;為False 時,則需要執行UPDATE STATISTICS 命令。
Sp_attach_db 系統存儲過程的語法如下:
sp_attach_db [@dbname =] 'dbname',
[@filename1 =] 'filename_n' [,...16]
其中“filename_n”包括文件的路徑和物理名稱。最多可指定16 個文件。文件中必須包含主數據庫文件。如果需要附加的文件超過了16 個,就必須使用帶FOR ATTACH 子句的CREATE DATABASE 命令來代替。
注意:Sp_attach_db系統存儲過程中只能作用於那些已經用Sp_detach_db系統存儲過程從服務器中拆分出來的數據庫。
例6-16:移動數據庫mytest 到E:\SQL Data 目錄下。
(1) 在SQL Server Query Analyzer 中運行系統存儲過程Sp_helpdb, 得到mytest數據庫所包含的文件名稱、數量、類型、存放位置等信息。命令語句如下:
exec sp_helpdb mytest
(2) 在SQL Server Query Analyzer 中運行Sp_detach_db 系統存儲過程,拆分mytest數據庫。命令語句如下:
exec sp_detach_db mytest, true
運行結果如下:
Successfully detached database 'mytest1'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
(3) 在操作系統的文件夾窗口中用剪切或粘貼的方式直接將與數據庫相關的操作系統文件移動到E:\ SQL Data 2000 Server 目錄下。即將D:\SQL Data\mytest_Data.MDF 文件和D:\SQLData\mytest_Log.LDF 文件移到E:\ SQL Data 2000
(4) 在SQL Server Query Analyzer 中運行Sp_attach_db 系統存儲過程,附加文件到mytest 數據庫。命令語句如下:
exec sp_attach_db @dbname = 'mytest',
@filename1 = 'e:\sql data\mytest_data.mdf',
@filename2 = 'e:\sql data\mytest_log.ldf'
運行結果如下:
Successfully attached database 'mytest'.
至此已完成了數據庫的移動工作,可在Enterprise Manager 中查看mytest 數據庫的信息,也可以在SQL Server Query Analyzer 中運行系統存儲過程Sp_helpdb 來查看移動是否成功。