DBCC CLONEDATABASE を使用して、SQL Server でユーザー データベースのスキーマと統計情報のみのコピーを生成する方法

適用対象: SQL Server 2014 Business IntelligenceSQL Server 2014 DeveloperSQL Server 2014 Enterprise

概要


この更新プログラムは、Windows 上の SQL Server 2017 で新しい管理コマンドDBCC CLONEDATABASE (Transact-SQL) が導入されています, SQL Server 2012 のサービス パック 4,マイクロソフト SQL Server 2014 サービス パック 2と SQL Server 2016 SP1.このコマンドは、指定されたソース データベースのすべてのオブジェクトと統計のスキーマを含む新しいデータベースを作成します。
メモSQL Server 2014 環境では、ファイル ストリーム、ファイル テーブル、および共通言語ランタイム (CLR) オブジェクトを複製し、DBCC を使用して NO_STATISTICS オプションを使用して複製する機能を取得するには、SQL Server 2014 SP2 用の累積的な更新プログラム 3をインストールする必要があります。
 
SQL Server のサービス パックについて

DBCC クローン データベースについて


マイクロソフト カスタマー サポート サービスでは、クエリ オプティマイザに関連するパフォーマンスの問題を調査するために、DBCC CLONEDATABASEを使用してデータベースのクローンを生成するように求める場合があります。メモDBCC CLONEDATABASEから生成された新しく生成されたデータベースは、運用データベースとして使用することはサポートされておらず、主にトラブルシューティングと診断の目的を目的としています。データベースの作成後に、複製されたデータベースをデタッチすることをお勧めします。ソース データベースの複製は、次の操作によって実行されます。
  • ソースと同じファイル レイアウトを使用し、モデル データベースと既定のファイル サイズを持つ新しい変換先データベースを作成します。
  • ソース データベースの内部スナップショットを作成します。
  • システム メタデータをソース データベースからコピー先データベースにコピーします。
  • すべてのオブジェクトのすべてのスキーマをソース データベースからコピー先データベースにコピーします。
  • すべてのインデックスの統計情報をソース データベースからコピー先データベースにコピーします。

構文


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

引数


  • ソース データベース名この引数は、スキーマと統計をコピーする必要があるデータベースの名前です。
  • ターゲット データベース名この引数は、ソース データベースのスキーマと統計情報のコピー先となるデータベースの名前です。このデータベースはDBCC CLONEDATABASEによって作成され、まだ存在してはいてはなりません。
  • 統計なしこの引数は、クローン内のテーブル/インデックス統計を除外する必要があるかどうかを指定します。このオプションを指定しない場合は、テーブル/インデックス統計が自動的に含まれます。このオプションは、SQL Server 2014 SP2 CU3 および SQL Server 2016 サービス パック 1 以降で使用できます。
  • クエリストアがありませんこの引数は、クエリ ストアを複製で除外する必要があるかどうかを指定します。このオプションを指定しない場合、クエリ ストア データがソース データベースで有効になっている場合は、そのデータが複製にコピーされます。このオプションは、SQL Server 2016 サービス パック 1 以降で使用できます。

DBCCクローンデータベースを使用する場合


DBCC CLONEDATABASE を使用して、クエリのパフォーマンスの問題を調査するために、運用データベースのスキーマと統計のみを作成する必要があります。次の制限事項とサポートされるオブジェクトに注意してください。
  • 制限事項次の検証はDBCC CLONEDATABASEによって実行されます。いずれかの検証が失敗した場合、コマンドは失敗します。
    • ソース データベースはユーザー データベースである必要があります。システム データベース (マスター、モデル、msdb、tempdb、ディストリビューション データベースなど) の複製は許可されていません。
    • ソース データベースはオンラインまたは読み取り可能である必要があります。
    • クローン・データベースと同じ名前を使用するデータベースは、まだ存在していてはなりません。
    • コマンドがユーザー トランザクションにありません。
    すべての検証が成功すると、DBCC CLONEDATABASEは次の操作を実行します。
    • プライマリ データ ファイルとログ ファイルの作成
    • セカンダリ データスペースの追加
    • セカンダリ ファイルの追加
    メモターゲット データベース内のすべてのファイルは、model データベースからサイズと拡張の設定を継承します。ファイル名の規則: コピー先データベースのファイル名は、ソース ファイル名 _アンダースコア番号の規則に従います。生成されたファイル名がコピー先のフォルダに既に存在する場合、DBCC CLONEDATABASEは失敗します。
  • 内部データベース スナップショットDBCC CLONEDATABASE は、コピーの実行に必要なトランザクションの一貫性のために、ソース データベースの内部データベース スナップショットを使用します。これにより、これらのコマンドの実行時にブロッキングや同時実行の問題が発生するのを防ぐことができます。スナップショットを作成できない場合、DBCC CLONEDATABASEは失敗します。データベース・レベルのロックは、コピー・プロセスの以下のステップで保持されます。
    • ソース データベースの検証
    • ソース データベースの S ロックを取得する
    • ソース データベースのスナップショットを作成する
    • クローン データベースを作成する (これはモデルから継承する空のデータベースです)
    • クローン データベースの X ロックを取得する
    • メタデータをクローン・データベースにコピーする
    • すべての DB ロックを解放する
    コマンドの実行が終了するとすぐに、内部スナップショットが削除されます。複製されたデータベースでは、TRUSTWORTHYオプションとDB_CHAININGオプションがオフになります。

サポートされるオブジェクト


コピー先のデータベースには、次のオブジェクト スキーマのみが複製されます。暗号化されたオブジェクトは複製されますが、このリリースの SQL Server ではクローンではサポートされていません。次のセクションに記載されていないオブジェクトは、複製ではサポートされません。

  • アプリケーション ロール
  • 可用性グループ
  • 列ストア インデックス
  • Cdb
  • Cdc
  • 変更の追跡 (SQL Server 2016 SP2 CU10、SQL Server 2017 CU17、SQL Server 2019 CU1および以降のバージョン)
  • CLR (SQL Server 2014 SP2 CU3、SQL Server 2016 サービス パック 1 および以降のバージョンを開始)
  • データベースのプロパティ
  • 既定
  • ファイルとファイル グループ
  • フルテキスト (SQL Server 2016 SP1 CU2 の開始)
  • 関数
  • インデックス
  • ログイン
  • パーティション関数
  • パーティション構成
  • 手順 メモT-SQL プロシージャは、SQL Server 2014 SP2 以降のすべてのリリースでサポートされています。CLR プロシージャは、SQL Server 2014 SP2 CU3 の開始にサポートされています。ネイティブ コンパイル プロシージャは、SQL Server 2016 SP1 の起動時にサポートされています。
  • クエリ ストア (SQL Server 2016 サービス パック 1 以降のバージョンのみ) メモクエリ ストアは、ソース データベースで有効になっている場合にのみコピーされます。クエリ ストアの一部として最新のランタイム統計をコピーするには、DBCC CLONEDATABASE を実行する前に、sp_query_store_flush_dbを実行してランタイム統計をクエリ ストアにフラッシュします。
  • 役割
  • ルール
  • スキーマ
  • シーケンス
  • 空間インデックス
  • 統計
  • シノニム
  • テーブル
  • メモリ最適化テーブル (SQL Server 2016 SP1 および以降のバージョンでのみ)。
  • ファイル ストリームおよびファイル テーブル オブジェクト (開始 SQL Server 2014 SP2 CU3、SQL Server 2016 SP1 および以降のバージョン)。
  • トリガー
  • アップグレードされた DB
  • ユーザー
  • ビュー
  • XML インデックス
  • XML スキーマ コレクション

 

アクセス 許可


sysadmin固定サーバー ロールのメンバーシップが必要です。

制限事項と考慮事項


DBCC CLONEDATABASE は、モデル データベースに作成されたユーザー オブジェクト (テーブル、インデックス、スキーマ、ロールなど) がある場合、クローンの作成をサポートしません。model データベースにユーザー オブジェクトが存在する場合、データベースの複製は失敗し、次のエラー メッセージが表示されます。

Msg 2601、レベル 14、状態 1、行 1 は、一意のインデックス 'インデックス名' を持つオブジェクト<システム テーブル>に重複するキー行を挿入できません。重複するキー値は<キー値>

複製されたデータベースのデータ セキュリティに関連する情報については、次のブログ「複製されたデータベースのデータ セキュリティについて」を参照してください。

列ストア インデックスがある場合は、次のブログを参照してください。.

エラー ログ メッセージ


複製プロセス中に、次のメッセージがエラー ログに記録されます。
<タイムスタンプ> spid53 'sourcedb' のデータベースクローン作成がターゲット 'sourcedb_clone' として開始されました。データベース 'sourcedb_clone' に対して [信頼できる] ~ [タイムスタンプ& gt; spid53 データベース オプション DB_CHAINING] をデータベース'sourcedb_clone' に設定します。> spid53 データベース 'sourcedb_clone' は複製されたデータベースです。複製されたデータベースは診断目的でのみ使用する必要があり、運用環境での使用はサポートされていません。複製されたデータベースは 'sourcedb_clone' です。

データベース プロパティ


新しいデータベース プロパティIsCloneが追加されます。データベースがDBCC クローン データベースを使用して生成された場合、データベースプロパティEX('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

参照情報


マイクロソフトがソフトウェア更新プログラムの説明に使用する用語について説明します。