Share via


如何:使用卸離和附加來移動資料庫 (Transact-SQL)

重要事項重要事項

建議您使用 ALTER DATABASE 計畫的重新配置程序來移動資料庫,而不要使用卸離和附加。如需詳細資訊,請參閱<ALTER DATABASE (Transact-SQL)>。

您可以將卸離的資料庫移動到另一個位置,再重新附加到相同或不同的伺服器執行個體。

安全性注意事項安全性注意事項

建議您不要附加或還原來源不明或來源不受信任的資料庫。這種資料庫可能包含惡意程式碼,因此可能執行非預期的 Transact-SQL 程式碼,或是修改結構描述或實體資料庫結構而造成錯誤。使用來源不明或來源不受信任的資料庫之前,請先在非實際伺服器的資料庫上執行 DBCC CHECKDB,同時檢查資料庫中的程式碼,例如預存程序或其他使用者自訂程式碼。

當您將包含全文檢索目錄檔案的 SQL Server 2005 資料庫附加至 SQL Server 2008 伺服器執行個體時,系統就會從先前的位置附加這些目錄檔案以及其他資料庫檔案,此行為與 SQL Server 2005 的行為相同。如需詳細資訊,請參閱<全文檢索搜尋升級>。當您從 SQL Server 2008 伺服器執行個體中卸離包含全文檢索目錄檔案的已升級 SQL Server 2005 資料庫時,系統會保留這些目錄檔案和其他資料庫檔案,此行為與 SQL Server 2005 的行為相同。

[!附註]

您也可以使用卸離和附加,將 SQL Server 2000 或 SQL Server 2005 資料庫升級為 SQL Server 2008。如需詳細資訊,請參閱<如何:使用卸離與附加來升級資料庫 (Transact-SQL)>。

程序

使用卸離和附加來複製資料庫

  1. 使用 sp_detach_db 預存程序來卸離資料庫。

  2. 在 Windows 檔案總管 或 Windows 的 [命令提示字元] 視窗中,將卸離的資料庫檔案和記錄檔移動到新位置。

    [!附註]

    若要移動單一檔案的資料庫,且檔案小到可以容納在電子郵件中,您可以利用電子郵件來移動。

    即使您想要建立新的記錄檔,也應該一併移動記錄檔。在某些情況下,重新附加資料庫需要其現有的記錄檔。因此,一律保留所有卸離的記錄檔,直到資料庫在沒有這些檔案的情形下成功附加為止。

    [!附註]

    如果您嘗試在不指定記錄檔的情形下附加資料庫,附加作業會在其原始位置中尋找記錄檔。如果原始位置中仍有記錄的副本存在,則會附加該副本。若要避免使用原始記錄檔,請指定新記錄檔的路徑,或者移除記錄檔的原始副本 (在將記錄檔複製到新位置後)。

  3. 使用 CREATE DATABASE Transact-SQL 陳述式來附加已複製的檔案,並指定 FOR ATTACH [ WITH <service_broker_option> ] 子句或 FOR ATTACH_REBUILD_LOG 子句 (如需詳細資訊,請參閱<CREATE DATABASE (Transact-SQL)>)。每個資料庫都包含唯一識別碼,用以將 Service Broker 訊息路由到該資料庫。如果資料庫使用 Service Broker,請參閱<管理 Service Broker 識別>。

    [!附註]

    如需使用 [物件總管] 來附加資料庫的詳細資訊,請參閱<如何:附加資料庫 (SQL Server Management Studio)>。

範例

下列範例可為 AdventureWorks2008R2 資料庫建立名為 MyAdventureWorks 的副本。Transact-SQL 陳述式會在 [查詢編輯器] 視窗中執行,此視窗連接到附加 AdventureWorks2008R2 的伺服器執行個體。

  1. 執行下列 Transact-SQL 陳述式卸離 AdventureWorks2008R2 資料庫:

    USE master;
    GO
    EXEC sp_detach_db @dbname = N'AdventureWorks2008R2';
    GO
    
  2. 使用您選擇的方法,將資料庫檔案 (AdventureWorks2008R2_Data.mdf 和 AdventureWorks2008R2_log) 分別複製到:C:\MySQLServer\AdventureWorks2008R2_Data.mdf 和 C:\MySQLServer\AdventureWorks2008R2_Log.ldf。

    重要事項重要事項

    針對實際執行的資料庫,將資料庫與交易記錄放在不同的磁碟上。

    若要經由網路將檔案複製到遠端電腦的磁碟,請使用遠端位置的通用命名慣例 (UNC) 名稱。UNC 名稱的格式為 **\\Servername\Sharename\Path\**Filename。如同將檔案寫入本機硬碟一樣,您必須將在遠端磁碟讀取或寫入檔案所需的適當權限,授與 SQL Server 執行個體所用的使用者帳戶。

  3. 若要附加已移動的資料庫和記錄檔 (選擇性),請執行下列 Transact-SQL 陳述式:

    USE master;
    GO
    CREATE DATABASE MyAdventureWorks 
        ON (FILENAME = 'C:\MySQLServer\AdventureWorks2008R2_Data.mdf'),
        (FILENAME = 'C:\MySQLServer\AdventureWorks2008R2_Log.ldf')
        FOR ATTACH;
    GO
    

    [!附註]

    在 SQL Server Management Studio 中,新附加的資料庫無法立即在 [物件總管] 中可見。若要檢視資料庫,請在 [物件總管] 中按一下 [檢視],然後按一下 [重新整理]。在 [物件總管] 中展開 [資料庫] 節點時,剛才附加的資料庫就會出現在資料庫清單中。