如何使用卸離/附加方式來移轉或複製資料庫

本文將介紹如何透過資料庫的卸離與附加來移轉或複製資料庫至其他執行個體。

當我們需要將資料庫移轉或複製至不同執行個體時,可以用資料庫複製精靈、備份/還原等方式,此外也可以將資料庫先卸離之後複製到目的的執行個體所在的電腦再附加至執行個體,使用卸離/附加方式來移轉資料庫的做法有兩種,分別說明如下:

  • 卸離資料庫:sp_detach_db

以下為sp_detach_db的語法:

   1:  sp_detach_db [ @dbname= ] 'database_name' 
   2:      [ , [ @skipchecks= ] 'skipchecks' ] 
   3:      [ , [ @keepfulltextindexfile = ] 'KeepFulltextIndexFile' ] 

其中@dbname為要卸離的資料庫名稱;@skipchecks用來設定是否略過更新統計資料,若設定為true表示要略過更新作業,設為false表示要求Database Engine更新統計資料;@keepfulltextindexfile用來設定卸離過程中是否要保留@dbname的全文檢索的索引檔案。上述三個參數均省略時,則SQL Server會提示 sp_detach_db的使用方式。

image

以下程式碼範例示範利用sp_detach_db來卸除Northwind資料庫。


exec sp_detach_db Northwind
  • 附加資料庫:使用sp_attach_db

以下為sp_attach_db的語法:

   1:  sp_attach_db [ @dbname= ] 'dbname'
   2:          , [ @filename1= ] 'filename_n' [ ,...16 ] 

其中@dbname為要附加的資料庫名稱,不可省略;@filename1至@filename16資料庫檔案名稱,最多只支援16個檔案。

以下程式碼範例示範利用sp_attach_db來附加Northwind資料庫:

   1:  exec sp_attach_db 'Northwind'
   2:  ,'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\northwind.mdf'
   3:  ,'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\northwind.ldf'

根據MSDN記載,未來版本的SQL Server將不再支援sp_attach_db,建議改用CREATE DATABASE…FOR ATTACH來附加資料庫。但截至本文完成前SQL Server Denali CTP3仍可以使用sp_attach_db,不過還是建議不要使用。另外,來源資料庫的相容性層級至少80以上才能附加到SQL Server 2008以上的執行個體。

  • 附加資料庫:使用CREATE DATABASE…FOR ATTACH

以下為CREATE DATABASE的語法,本文只針對FOR ATTACH來做說明,其他參數請參閱參考資料中的連結。

   1:  CREATE DATABASE database_name 
   2:      ON <filespec> [ ,...n ] 
   3:      FOR { ATTACH [ WITH <service_broker_option> ]
   4:          | ATTACH_REBUILD_LOG }
   5:  [;]
   6:   
   7:  <filespec> ::= 
   8:  {
   9:  (
  10:      NAME =logical_file_name,
  11:      FILENAME = { 'os_file_name' | 'filestream_path' } 
  12:          [ , SIZE =size [ KB | MB | GB | TB ] ] 
  13:          [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ] 
  14:          [ , FILEGROWTH =growth_increment [ KB | MB | GB | TB | % ] ]
  15:  ) [ ,...n ]
  16:  }

以下程式碼示範利用CREATE DATABASE…FOR ATTACH來附加資料庫:

   1:  CREATE DATABASE Northwind
   2:  ON (FILENAME ='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\northwind.mdf')
   3:  ,(FILENAME ='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\northwind.ldf')
   4:  FOR ATTACH

【補充】

若要查看資料檔的相關資訊,可以在資料庫卸離的狀態下以DBCC CheckPrimraryFile來查看,範例程式碼如下:

   1:  DBCC CheckPrimaryFile(N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\northwind.mdf',0)
   2:  DBCC CheckPrimaryFile(N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\northwind.mdf',1)
   3:  DBCC CheckPrimaryFile(N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\northwind.mdf',2)
   4:  DBCC CheckPrimaryFile(N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\northwind.mdf',3)

執行結果:

image

【參考資料】