共用方式為


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

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

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

在 SQL Server 2008 中,您可以使用卸離和附加作業,將使用者資料庫從 SQL Server 2000 或 SQL Server 2005 升級。在您將 SQL Server 2005 或 SQL Server 2000 資料庫附加至 SQL Server 2008 之後,資料庫就會變成立即可用,然後自動進行升級。

不過,會有下列限制:

  • 使用 SQL Server 2000 或 SQL Server 2005 所建立之 mastermodelmsdb 等資料庫的副本,則無法附加。

  • 當附加複製的而非卸離的複寫資料庫時:

    • 如果您附加資料庫到相同伺服器執行個體的升級版本,則必須在附加作業完成後執行 sp_vupgrade_replication 以升級複寫。如需詳細資訊,請參閱<sp_vupgrade_replication (Transact-SQL)>。

    • 如果您附加資料庫到不同的伺服器執行個體 (不論版本為何),則必須在附加作業完成後執行 sp_removedbreplication 以移除複寫。如需詳細資訊,請參閱<sp_removedbreplication (Transact-SQL)>。

  • 針對從 SQL Server 2000 升級至 SQL Server 2008 的資料庫使用 APPLY、PIVOT、TABLESAMPLE 或 UNPIVOT 關鍵字時,資料庫的相容性層級必須設為 100。若要設定資料庫相容性層級,請參閱<sp_dbcmptlevel (Transact-SQL)>。

    重要注意事項重要事項

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

全文檢索索引升級選項

[!附註]

在您將 SQL Server 2005 或 SQL Server 2000 資料庫附加至 SQL Server 2008 之後,資料庫就會變成立即可用,然後自動進行升級。如果資料庫具有全文檢索索引,升級程序就會根據 upgrade_option 伺服器屬性的設定,匯入、重設或重建這些索引。如果升級選項設定為匯入 (upgrade_option = 2) 或重建 (upgrade_option = 0),則全文檢索索引在升級期間將無法使用。根據進行索引的資料數量而定,匯入可能需要數個小時,而重建可能需要十倍以上的時間。此外,請注意,當升級選項設定為 [匯入] 時,如果全文檢索目錄無法使用,系統就會重建相關聯的全文檢索索引。若要變更 upgrade_option 伺服器屬性的設定,請使用 sp_fulltext_service

程序

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

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

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

    [!附註]

    在 SQL Server 2005 中,此預存程序有新的選項。如需詳細資訊,請參閱<sp_detach_db (Transact-SQL)>。

  2. 另外,也可以移動卸離的資料庫檔案與記錄檔。

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

    [!附註]

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

  3. 使用 CREATE DATABASE 陳述式與 FOR ATTACH 或 FOR ATTACH_REBUILD_LOG 選項,將複製的檔案附加到 SQL Server 2005 伺服器執行個體上。

    [!附註]

    如需有關如何使用 [物件總管] 來附加 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 線上叢書》。

升級後的資料庫相容性層級

tempdbmodelmsdbResource 資料庫的相容性層級在升級之後會設定為 100。master 系統資料庫會保有升級前的相容性層級,除非該層級小於 80。如果 master 的相容性層級在升級前小於 80,則會在升級後設定為 80。

如果使用者資料庫的相容性層級在升級前為 80 或 90,則在升級後仍會保持相同。如果升級前的相容性層級為 70 或更小,則在升級後的資料庫中,相容性層級會設定為 80 (這是 SQL Server 2008 所支援的最低相容性層級)。

[!附註]

新的使用者資料庫會繼承 model 資料庫的相容性層級。

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

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

範例

下列範例會使用 Transact-SQL 陳述式來卸離與附加資料庫,以將 SQL Server 2000pubs 資料庫升級為 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\MSSQL10.MSSQLSERVER\MSSQL\Data\ (這是 SQL Server 2005 資料目錄)。

    重要注意事項重要事項

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

    [!附註]

    使用遠端位置的通用命名慣例 (UNC) 名稱,透過網路將檔案複製到遠端電腦的磁碟上。UNC 名稱的格式為 \\Servername\Sharename\Path\Filename。同時,就如同將檔案寫入本機硬碟一樣,SQL Server 所用的使用者帳戶,對於遠端磁碟上的檔案必須擁有必要的讀取或寫入權限。

  3. 將複製的 pubs 資料庫以及記錄檔 (選擇性的) 附加到 SQL Server 2005 執行個體 (此範例使用相同的資料庫名稱)。在 SQL Server Management Studio 中,開啟新的 [查詢編輯器] 查詢,並連接到要附加資料庫的伺服器執行個體。

    [!附註]

    如需詳細資訊,請參閱<SQL Server Management Studio Database Engine 查詢編輯器視窗>。

    執行下列 CREATE DATABASE 陳述式。

    USE master;
    GO
    CREATE DATABASE pubs ON PRIMARY 
       (FILENAME = 
          'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\pubs.mdf')
       LOG ON (FILENAME = 
          'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\pubs_log.ldf')
       FOR ATTACH;
    GO
    

    [!附註]

    在 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