如何:使用卸離與附加來升級資料庫 (Transact-SQL)

更新: 2005 年 12 月 5 日

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

在 SQL Server 2005 中,您可以使用卸離和附加,將使用者資料庫從 SQL Server 7.0 版或 SQL Server 2000 升級。不過,會有下列限制:

  • 使用 SQL Server 7.0 或 SQL Server 2000 所建立的 mastermodelmsdb 資料庫,無法附加在 SQL Server 2005 中。
  • 包含建立索引作業的 SQL Server 7.0 記錄檔無法附加於 SQL Server 2000 或 SQL Server 2005。
ms189625.note(zh-tw,SQL.90).gif重要事項:
使用 SQL Server 6.5 或舊版建立的資料庫備份,其格式不相容,因此無法附加在 SQL Server 2005 中。
  • 當附加複製的而非卸離的複寫資料庫時:
    • 如果您附加資料庫到相同伺服器執行個體的升級版本,則必須在附加作業完成後執行 sp_vupgrade_replication 以升級複寫。如需詳細資訊,請參閱<sp_vupgrade_replication (Transact-SQL)>。
    • 如果您附加資料庫到不同的伺服器執行個體 (不論版本為何),則必須在附加作業完成後執行 sp_removedbreplication 以移除複寫。如需詳細資訊,請參閱<sp_removedbreplication (Transact-SQL)>。

對升級至 SQL Server 2005 的資料庫使用 APPLYPIVOTTABLESAMPLEUNPIVOT 關鍵字時,資料庫的相容性層級必須設為 90。若要設定資料庫的相容性層級,請參閱<sp_dbcmptlevel (Transact-SQL)>。

ms189625.note(zh-tw,SQL.90).gif重要事項:
在 SQL Server 2000 Service Pack 3 (SP3) 以及 SQL Server 的更新版本中,卸離和附加會將其 cross db ownership chaining 選項設定為 0,以停用資料庫的跨資料庫擁有權鏈結。如需有關啟用鏈結的詳細資訊,請參閱<cross db ownership chaining 選項>。

程序

使用卸離和附加來升級資料庫

  1. 使用 sp_detach_db 預存程序,從 SQL Server 7.0 或 SQL Server 2000 執行個體卸離資料庫。

    如需詳細資訊,請參閱該版 SQL Server 的《SQL Server 線上叢書》。

    ms189625.note(zh-tw,SQL.90).gif附註:
    在 SQL Server 2005 中,此預存程序有新的選項。如需詳細資訊,請參閱<sp_detach_db (Transact-SQL)>。
  2. 另外,也可以移動卸離的資料庫檔案與記錄檔。

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

    ms189625.note(zh-tw,SQL.90).gif附註:
    如果您嘗試在不指定記錄檔的情形下附加資料庫,附加作業會在其原始位置中尋找記錄檔。如果記錄的原始副本仍在原處,則會附加該副本。若要避免使用原始記錄檔,請指定新記錄檔的路徑,或者移除記錄檔的原始副本 (在將記錄檔複製到新位置後)。
  3. 使用 CREATE DATABASE 陳述式與 FOR ATTACH 或 FOR ATTACH_REBUILD_LOG 選項,將複製的檔案附加到 SQL Server 2005 伺服器執行個體上。

    ms189625.note(zh-tw,SQL.90).gif附註:
    如需有關如何使用 [物件總管] 來附加 SQL Server 2005 資料庫的詳細資訊,請參閱<如何:附加資料庫 (SQL Server Management Studio)>。
  4. 建議您在升級的資料庫中執行 DBCC UPDATEUSAGE。

    在舊版 SQL Server 中,資料表和索引資料列計數值與頁數計數值可能會變得不正確。因此,在 SQL Server 2005 之前的版本中建立的資料庫可能包含不正確的計數。將資料庫升級到 SQL Server 2005 之後,建議您執行 DBCC UPDATEUSAGE 來更正任何無效的計數。此 DBCC 陳述式會更正資料表或索引中每個資料分割之資料列、使用的頁面、保留的頁面、分葉頁與資料頁計數。如需詳細資訊,請參閱<DBCC UPDATEUSAGE (Transact-SQL)>。

  5. 另外,如果您要複製資料庫 (而不要移動),也可以使用 sp_attach_dbsp_attach_single_file_db 預存程序,將原始資料庫重新附加到 SQL Server 7.0 或 SQL Server 2000 的執行個體上。

    如需詳細資訊,請參閱該版 SQL Server 的《SQL Server 線上叢書》。

在升級的伺服器執行個體上管理中繼資料

將資料庫附加至另一個伺服器執行個體時,為了提供一致的經驗給使用者和應用程式,您可能需要在其他伺服器執行個體上為資料庫重新建立部分或所有的中繼資料,例如登入、作業和權限。如需詳細資訊,請參閱<在另一個伺服器執行個體上提供可用的資料庫時,管理中繼資料>。

範例

下列範例會使用 Transact-SQL 陳述式來卸離與附加資料庫,以將 SQL Server 2000 pubs 資料庫升級為 SQL Server 2005 資料庫。

  1. 將 SQL Server 2000 Query Analyzer 連接到附加 pubs 的伺服器執行個體,然後使用 sp_detach_db 預存程序來卸離資料庫。

    USE master;
    GO
    EXEC sp_detach_db @dbname = N'pubs';
    GO
    
  2. 為了執行此範例,請用您選擇的方式,將 pubs 檔案 (pubs.mdf 和 pubs_log.ldf) 從 C:\Program Files\Microsoft SQL Server\MSSQL\Data\ (這是 pubs 在 SQL Server 2000 中的預設位置) 複製到 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\ (這是 SQL Server 2005 資料目錄)。

    ms189625.note(zh-tw,SQL.90).gif重要事項:
    針對實際執行的資料庫,將資料庫與交易記錄放在不同的磁碟上。
    ms189625.note(zh-tw,SQL.90).gif附註:
    使用遠端位置的通用命名慣例 (UNC) 名稱,透過網路將檔案複製到遠端電腦的磁碟上。UNC 名稱的格式為 \\Servername\Sharename\Path\Filename。同時,就如同將檔案寫入本機硬碟一樣,SQL Server 所用的使用者帳戶,對於遠端磁碟上的檔案必須擁有必要的讀取或寫入權限。
  3. 將複製的 pubs 資料庫以及記錄檔 (選擇性的) 附加到 SQL Server 2005 執行個體 (此範例使用相同的資料庫名稱)。在 SQL Server Management Studio 中,開啟新的 [查詢編輯器] 查詢,並連接到要附加資料庫的伺服器執行個體。

    ms189625.note(zh-tw,SQL.90).gif附註:
    如需詳細資訊,請參閱<SQL Server Management Studio Transact SQL 查詢>。

    執行下列 CREATE DATABASE 陳述式。

    USE master;
    GO
    CREATE DATABASE pubs ON PRIMARY 
       (FILENAME = 
          'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\pubs.mdf')
       LOG ON (FILENAME = 
          'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\pubs_log.ldf')
       FOR ATTACH;
    GO
    
    ms189625.note(zh-tw,SQL.90).gif附註:
    在 SQL Server Management Studio 中,新附加的資料庫無法立即在 [物件總管] 中可見。若要檢視資料庫,請按一下 [物件總管] 視窗,然後選取 [檢視] > [重新整理]。當 [資料庫] 節點展開時,新附加的資料庫此時會出現在資料庫清單中。
  4. 另外,也可以使用 sp_attach_db 預存程序,將原始的 pubs 資料庫重新附加到 SQL Server 2000 執行個體上。在 Query Analyzer 中輸入下列陳述式:

    USE master;
    Go
    EXEC sp_attach_db @dbname = N'pubs', 
       @filename1 = 
          N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', 
       @filename2 = 
          N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf';
    GO
    

請參閱

工作

如何:附加資料庫 (SQL Server Management Studio)
如何:利用複製資料庫精靈升級至 SQL Server 2005

概念

卸離和附加資料庫
保護資料和記錄檔

其他資源

CREATE DATABASE (Transact-SQL)
使用 Upgrade Advisor 來準備升級

說明及資訊

取得 SQL Server 2005 協助