KB3177838-如何使用 DBCC CLONEDATABASE 在 SQL Server 中只產生使用者資料庫的架構與統計資料複本

摘要

此更新會在 Windows 上的 SQL Server 2017、 Service pack 4 FOR Sql server 2012、Microsoft SQL Server 2014 Service Pack 2SQL server 2016 SP1中引入新的管理命令DBCC CLONEDATABASE (transact-sql)。 這個命令會建立一個新資料庫,其中包含指定來源資料庫中所有物件與統計資料的架構。 

注意: 在 SQL Server 2014 環境中,您必須安裝 Sql server 2014 SP2 的累積更新 3 ,才能利用 DBCC 來仿製 Filestream、FileTable 及公用語言執行時間(CLR)物件,以及使用 NO_STATISTICS 選項克隆。

關於 SQL Server 的 service pack

 

Service pack 是累加的。 每個新的 service pack 都包含舊版 service pack 中的所有修正程式,以及任何新的修正程式。 我們建議您將最新的 service pack 和該 service pack 的最新累計更新套用。 在安裝最新的 service pack 之前,您不需要安裝舊版 service pack。 使用下列文章中的表格1,尋找最新 service pack 和最新累計更新的詳細資訊。

如何判斷 SQL Server 及其元件的版本、版本及更新層級

關於 DBCC CLONEDATABASE

Microsoft 客戶支援服務可能會要求您使用 DBCC CLONEDATABASE 來產生資料庫克隆,以便調查與查詢優化程式相關的效能問題。注意: 從 DBCC CLONEDATABASE 產生的新產生的資料庫不支援做為生產資料庫,主要是出於疑難排解和診斷目的而設計。 我們建議您在建立資料庫之後,分離克隆的資料庫。來源資料庫的克隆是由下列作業執行:

  • 建立一個新的目的地資料庫,該資料庫使用與來源相同的檔案配置,但將預設檔案大小視為模型資料庫。

  • 建立源資料庫的內部快照。

  • 從來源將系統中繼資料複製到目的資料庫。

  • 將所有物件的所有架構從來源複製到目的資料庫。

  • 將來源的所有索引的統計資料複製到目的資料庫。

句法

DBCC CLONEDATABASE (source_database_name, target_database_name)[WITH [NO_STATISTICS][,NO_QUERYSTORE]] 

引數

  • source_database_name此引數是架構與統計需要複製之資料庫的名稱。

  • target_database_name此引數是要將來源資料庫的架構與統計資料複製到其中的資料庫的名稱。 此資料庫將由 DBCC CLONEDATABASE 建立,且不應該已經存在。

  • NO_STATISTICS此引數指定是否需要在克隆中排除資料表/索引統計資料。 如果未指定此選項,則會自動包含表格/索引統計資料。 此選項是從 SQL Server 2014 SP2 CU3 和 SQL Server 2016 Service Pack 1 開始提供。

  • NO_QUERYSTORE此引數指定是否需要在克隆中排除查詢存放區。 如果未指定此選項,則在源資料庫中啟用 [查詢儲存區] 資料時,會將它複製到複本。 此選項是從 SQL Server 2016 Service Pack 1 開始提供。

何時使用 DBCC CLONEDATABASE?

DBCC CLONEDATABASE 應該只用來建立生產資料庫的架構與統計資料,以便調查查詢效能問題。 請注意下列限制和支援的物件:

  • 局限性下列驗證是由 DBCC CLONEDATABASE所執行。 如果任何驗證失敗,命令就會失敗。

    • 來源資料庫必須是使用者資料庫。 不允許克隆系統資料庫(master、model、msdb、tempdb、發佈資料庫等)。

    • 來源資料庫必須是線上或可讀的。

    • 與克隆資料庫使用相同名稱的資料庫不能已存在。

    • 命令不在使用者交易中。

    如果所有驗證都成功, DBCC CLONEDATABASE 會執行下列作業:

    • 建立主要資料檔案與記錄檔

    • 新增次要 dataspaces

    • 新增次要檔案

    注意: 目標資料庫中的所有檔案將繼承模型資料庫中的 [大小] 和 [增長] 設定。 檔案名慣例:目的地資料庫的檔案名將遵循 source_file_name _underscore_random 數位 慣例。 如果所產生的檔案名已存在於目的地資料夾中, DBCC CLONEDATABASE 將會失敗。

  • 內部資料庫快照DBCC CLONEDATABASE 使用源資料庫的內部資料庫快照,以取得執行複本所需的事務一致性。 這可防止執行這些命令時的封鎖與併發問題。 如果無法建立快照, DBCC CLONEDATABASE 將會失敗。 在下列複製程式步驟中,會保留資料庫層級鎖:

    • 驗證源資料庫

    • 為源資料庫取得 S 鎖

    • 建立源資料庫的快照

    • 建立克隆資料庫(這是一個從 model 繼承的空白資料庫)

    • 取得克隆資料庫的 X 鎖

    • 將中繼資料複製到克隆資料庫

    • 釋放所有資料庫鎖

    執行完命令之後,就會刪除內部快照。 已在克隆的資料庫上關閉 [可信] 和DB_CHAINING [選項]。

支援的物件

只有下列物件架構會在目的地資料庫中克隆。 加密物件會受到克隆,但在此版本的 SQL Server 中不支援 clone。 克隆不支援以下區段中未列出的任何物件:

  • 應用程式角色

  • 可用性群組

  • 列存儲索引

  • CDB

  • CDC

  • 變更追蹤(SQL SERVER 2016 SP2 CU10、SQL server 2017 CU17、SQL server 2019 CU1 及更新版本)

  • CLR (開始 SQL Server 2014 SP2 CU3,SQL Server 2016 Service Pack 1 及更新版本)

  • 資料庫屬性

  • 設置

  • 檔案與檔組

  • 完整的文字(開始 SQL Server 2016 SP1 CU2)

  • 函數

  • INDEX

  • ID

  • PARTITION 函數

  • 分區配置

  • 過程 記事 SQL Server 2014 SP2 所有版本都支援 t-sql 程式。 支援啟動 SQL Server 2014 SP2 CU3 的 CLR 程式。 支援以本機編譯的程式開始 SQL Server 2016 SP1。

  • 查詢存放區(僅限 SQL Server 2016 Service Pack 1 及更新版本) 記事 只有在源資料庫上啟用查詢儲存區時,才會複製。 若要複製最新的執行時間統計資料做為查詢存放區的一部分,請執行 sp_query_store_flush_db ,在執行 DBCC CLONEDATABASE 之前,將執行時間統計資料刷新至查詢儲存區。

  • 角色

  • 基準

  • 構架

  • 順序

  • 空間索引

  • STATISTICS

  • 同義字

  • 記憶體優化資料表(僅適用于 SQL Server 2016 SP1 及更新版本)。

  • FILESTREAM 和 FILETABLE 物件(開始 SQL Server 2014 SP2 CU3、SQL Server 2016 SP1 及更新版本)。

  • 誤報

  • 輸入

  • 已升級的資料庫

  • 使用者名

  • 視圖

  • XML 索引

  • XML 架構集合

 

許可權

您必須擁有 sysadmin 固定伺服器角色的成員資格。

限制及考慮

如果您在模型資料庫中建立了任何使用者物件(資料表、索引、架構、角色等),DBCC CLONEDATABASE 就不支援建立複本。 如果使用者物件出現在模型資料庫中,資料庫克隆失敗並出現下列錯誤訊息:

Msg 2601、Level 14、State 1、Line 1無法在物件<系統表>中,以唯一索引 "index name" 插入重複的鍵列。重複的金鑰值是<金鑰值>   

如需有關克隆資料庫的資料安全性的相關資訊,請參閱下列博客:瞭解克隆資料庫中的資料安全性

如果您有欄存儲索引,請參閱下列博客:在您執行DBCC CLONEDATABASE命令前,請在針對克隆資料庫上的資料列索引調整查詢時,考慮更新列索引統計資料。

錯誤記錄訊息

在克隆處理常式期間,會在錯誤記錄中記錄下列訊息:

<時間戳記> spid53 [sourcedb] 的資料庫克隆已開始將目標做為「sourcedb_clone」。 <時間戳記> spid53 啟動資料庫 ' Sourcedb_clone」。 <時間戳> spid53 設定資料庫選項可供資料庫 ' sourcedb_clone」關閉 <。> timestamp DB_CHAINING spid53啟動資料庫 ' Sourcedb_clone」 。 <時間戳記> spid53 資料庫 ' sourcedb_clone」是已克隆的資料庫。 克隆的資料庫只能用於診斷目的,且不支援在生產環境中使用。 <時間戳記> [ sourcedb] 的 spid53 資料庫克隆已完成。 克隆的資料庫是「sourcedb_clone」。

Database 屬性

新的資料庫屬性 IsClone 是新增的。 如果資料庫是使用DBCC CLONEDATABASE產生,DATABASEPROPERTYEX ("dbname","IsClone")會傳回1 。

範例

  1. 建立包含架構、統計與查詢存放區的 AdventureWorks 資料庫克隆(SQL Server 2016 SP1 及更新版本)

    Transact-SQL -- Generate the clone of AdventureWorks database.    DBCC CLONEDATABASE (AdventureWorks, AdventureWorks_Clone);    GO 
  2. 在不含統計資料的 SQL Server 2014 中建立 AdventureWorks 資料庫的純模式克隆(SQL Server 2014 SP2 CU3 及更新版本)

    DBCC CLONEDATABASE (AdventureWorks, AdventureWorks_Clone) WITH NO_STATISTICS
  3. 建立不含統計與查詢存放區之 AdventureWorks 資料庫的純模式克隆(SQL Server 2016 SP1 及更新版本)

    DBCC CLONEDATABASE (AdventureWorks, AdventureWorks_Clone) WITH NO_STATISTICS,NO_QUERYSTORE

參考

瞭解 Microsoft 用於描述軟體更新的 詞彙

需要更多協助?

擴展您的技能
探索訓練
優先取得新功能
加入 Microsoft 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與我們的其中一個 Office 支援專員連絡以深入了解您的意見。

×