sql >> データベース >  >> RDS >> Sqlserver

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

    DBCC CLONEDATABASEは、SQL Server 2014 SP 2で導入された新しいDBCCコマンドであり、クエリオプティマイザーに関連するパフォーマンスの問題のトラブルシューティングに役立つ、指定されたユーザーデータベースのクローンを作成するために使用されます。

    データベースのはDBCCCLONEDATABASEを使用して作成され、指定されたデータベースのコピーのみのスキーマと統計を作成し、データのコピーは含まれません。

    クローンの作成は、ソースを渡すのと同じくらい簡単です。データベース名とデータベース名をDBCCコマンドにクローンします。
    DBCC CLONEDATABASE ('SansSQL', 'SansSQL_Clone') 

    DBCCコマンドの出力

    クローン作成が完了すると、クローン作成されたデータベースは読み取り専用モードになります。

    SELECT name, database_id, is_read_only  
    FROM sys.databases 
    WHERE name in ('SansSQL', 'SansSQL_Clone') 

    では、データベースでDBCC CLONEDATABASEコマンドを発行すると、実際にはどうなりますか?
    クローンが作成される前のいくつかの検証。次の検証は、DBCCCLONEDATABASEによって実行されます。検証のいずれかが失敗すると、コマンドは失敗します。
    • ソースデータベースはユーザーデータベースである必要があります。システムデータベース(マスター、モデル、msdb、tempdb、ディストリビューションデータベースなど)のクローン作成は許可されていません。
    • ソースデータベースはオンラインまたは読み取り可能である必要があります。
    • クローンデータベースと同じ名前を使用するデータベースは、まだ存在していてはなりません。
    • コマンドはユーザートランザクションに含まれていません。
    すべての検証が成功すると、DBCCCLONEDATABASEは次の操作を実行します。
    • プライマリデータファイルとログファイルの作成
    • セカンダリデータスペースの追加
    • セカンダリファイルの追加
    宛先データベースファイルはモデルデータベースからサイズと拡張設定を継承し、宛先データベースのファイル名はsource_file_name_underscore_random_number規則に従います。
    SELECT database_id, file_id, type_desc, name, physical_name 
    FROM sys.master_files 
    WHERE DB_NAME(database_id) in ('SansSQL', 'SansSQL_Clone') 


    次に、DBCCCLONEDATABASEは次の手順で内部データベーススナップショットを実行します
    • ソースデータベースを検証する
    • ソースデータベースのSロックを取得する
    • ソースデータベースのスナップショットを作成する
    • クローンデータベースを作成します(これはモデルから継承する空のデータベースです)
    • クローンデータベースのXロックを取得する
    • メタデータをクローンデータベースにコピーします
    • すべてのDBロックを解除する
    以下のコマンドを使用して、データベースがクローンであるか通常のデータベースであるかを確認できます。
    SELECT DATABASEPROPERTYEX('SansSQL','isClone') AS SansSQL_DB_CloneStatus 
          ,DATABASEPROPERTYEX('SansSQL_Clone','isClone') AS SansSQL_CloneDB_CloneStatus
    


    参照:https://support.microsoft.com/en-in/kb/3177838
    1. DAYOFWEEK()がMariaDBでどのように機能するか

    2. テーブルの作成中にエラーが発生しました:1行目の'order(order_id INT UNSIGNED NOT NULL AUTO_INCREMENT、user_id'の近くのSQL構文にエラーがあります

    3. PL / SQL開発に最適なツールボックスは何ですか?

    4. SQLServerのタイムスタンプ列を日時形式に変換する方法