データベース スキーマを比較および同期する

Visual Studio Team System Database Edition を使用して、ターゲット スキーマをソース スキーマと比較できます。 相違点ごとに、ソースに一致するようにターゲットを更新するかどうかを指定できます。 それらの更新内容をターゲットに直接書き込むことも、更新スクリプトを Transact-SQL (T-SQL) エディタまたはファイルにエクスポートすることもできます。 比較をデータベース プロジェクトの一部として、またはスタンドアロンのファイルとして保存することもできます。 比較を保存することにより、比較の再実行や同じソースとターゲットの再同期が容易になります。

スキーマ比較の種類

比較できるスキーマの種類を次の表に示します。 1 番目の列はソース スキーマを、1 番目の行はターゲット スキーマを示しています。

ソース (列)、ターゲット (列)

データベースまたはサーバー

プロジェクト (.dbproj)

プロジェクト ファイル (.dbschema)

データベースまたはサーバー

比較および更新

比較および更新

この種類の比較は推奨できません。 この表の下の説明を参照してください。

比較のみ

プロジェクト (.dbproj)

比較および更新

比較および更新

比較のみ

プロファイル ファイル (.dbschema)

比較および更新

比較および更新

比較のみ

サーバー スキーマをデータベース スキーマと比較、または、データベース スキーマをサーバー スキーマと比較することはできません。

Dd193250.alert_caution(ja-jp,VS.90).gif注意 :

ソース データベースをターゲット データベース プロジェクト (.dbproj) と比較することもできますが、そうするよりは、データベース プロジェクトを変更して、その変更をデータベースに配置することをお勧めします。 変更したプロジェクト (.dbproj) を配置すると、プロジェクトがバージョン管理されるため、自分の変更が他のチーム メンバによる変更と競合するリスクを軽減できます。

データベース スキーマを更新するときのデータ損失の回避

スキーマ比較を使用してデータベース スキーマを更新するときに、データが失われる可能性があります。 データ損失を防ぐには、ソースとターゲットのオブジェクトの名前に注意してください。特に、ターゲットのスキーマを更新する直前に注意が必要です。

たとえば、ソース データベースで Order_Details というテーブルの名前を OrderDetails に変更し、ターゲット データベースでは変更せずに、2 つのデータベースを比較したとします。 これらを同期する前は、両方のテーブルのデータは同じです。 しかし、ターゲットを更新すると、Order_Details テーブルが削除され、OrderDetails テーブルが作成されます。Order_Details テーブルのすべてのデータが損失する可能性があります。

データの損失を防ぐには、[ツール] メニューの [オプション] をクリックし、[データ損失が発生する場合にスキーマの更新をブロック] チェック ボックスをオンにします。 また、データベースに更新を書き込む前に、常にデータベースをバックアップしてください。

Dd193250.alert_caution(ja-jp,VS.90).gif重要 :

リファクタリングを使用してデータベース プロジェクト内のオブジェクトの名前を変更する場合は、リファクタリング ログを参照することで、データベースをビルドおよび配置する際のデータ損失を防ぐことができます。 このログには、変更の意図が保持されます。 たとえば、テーブルの名前をその場で変更できます。

一般的なタスク

次の表に、このシナリオをサポートする一般的なタスクの説明と、それらのタスクを正常に完了する方法の詳細へのリンクを示します。

一般的なタスク

関連する参照先

実習を行う : 入門チュートリアルに従って作業すると、2 つのデータベースを比較する方法や、データベースとプロジェクト (.dbproj) を比較する方法を習得できます。

チュートリアル : 2 つのデータベースのスキーマを比較する

チュートリアル: データベースとデータベース プロジェクトのスキーマの比較

スキーマの比較方法を制御するオプションを設定する : スキーマの比較方法の制御の詳細を設定できます。 空白文字、ファイル グループ、コメントなど、特定の種類の相違点を無視できます。 ユーザーやログインなど、特定のカテゴリのオブジェクトを無視することもできます。 生成される更新スクリプトを制御するオプションを指定できます。

方法 : データベース スキーマの比較に関するオプションを設定する

データベース オブジェクトまたはサーバー オブジェクトを比較する : 比較するソース スキーマとターゲット スキーマを指定します。結果は [スキーマ比較] ウィンドウに表示されます。 相違点の詳細と、データベースの同期に使用する更新スクリプトを表示できます。 各スキーマ比較は、プロジェクトまたはスタンドアロンの .scmp ファイルに保存できます。

方法 : データベース スキーマを比較する

スキーマ比較の結果について

方法 : 
スキーマの相違点を表示する

ソースに一致するようにターゲットを更新する : ソース スキーマとターゲット スキーマのそれぞれの相違点に対するアクションを指定した後で、ターゲットに更新内容を書き込むことができます。 更新スクリプトを、ターゲットに変更を適用する前に確認できるように、T-SQL エディタまたはファイルにエクスポートすることもできます。

方法 : データベース オブジェクトまたはサーバー オブジェクトを同期する

問題をトラブルシューティングする : データベース スキーマを比較して同期するときに発生する可能性がある一般的な問題をトラブルシューティングする方法についてさらに詳しく学習できます。

スキーマ比較に関する問題のトラブルシューティング

スキーマ比較の結果について

[スキーマ比較] ウィンドウでは、比較された各オブジェクトについて 4 つの列が表示されます。 各列の内容を次の表に示します。

[状態]

  • [等しい] - オブジェクトの定義は同じで、ソース スキーマとターゲット スキーマに同じオブジェクトが含まれています。

  • [新規] - オブジェクトはソース スキーマに存在しますが、ターゲット スキーマには存在しません。

  • [見つかりません] - オブジェクトはターゲット スキーマに存在しますが、ソース スキーマには存在しません。

  • [異なる定義] - オブジェクトの定義が、ソース スキーマとターゲット スキーマで異なっています。

  • [別の依存関係] - オブジェクトの定義は同じですが、ソース スキーマとターゲット スキーマに異なるオブジェクトが含まれています。

たとえば、あるテーブルをソース スキーマに追加し、ターゲット スキーマには追加せずに、両者を比較したとします。 テーブルは [異なる定義] とマークされ、テーブルを含むスキーマは [異なるオブジェクト] とマークされます。

SourceName (ソース {プロジェクト, データベース, またはプロジェクト ファイル (.dbschema)})

比較するソースのプロジェクト、データベース、またはプロジェクト ファイルの名前。

[更新アクション]

  • [スキップ] - オブジェクトはターゲット スキーマで更新されません。 オブジェクトの依存関係が変更されている場合、この行を展開して異なる参照先オブジェクトを確認する必要があることを示すアイコンが表示されます。

  • [参照のスキップ] - オブジェクトは参照先データベースに存在しているため、削除または作成する必要はありません。

  • [作成] - オブジェクトは、更新を書き込むか更新スクリプトを実行したときに作成されます。

  • [更新] - オブジェクトの定義は、更新を書き込むか更新スクリプトを実行したときに、ソース スキーマと一致するように更新されます。

  • [削除] - オブジェクトは、更新を書き込むか更新スクリプトを実行したときに、ターゲット スキーマから削除されます。

Dd193250.alert_note(ja-jp,VS.90).gifメモ :
既定のアクションは状態によって決定されます。 [等しい] のオブジェクトの場合、既定のアクションは [スキップ] で、これを変更することはできません。 [新規] のオブジェクトの場合、既定のアクションは [作成] ですが、[スキップ] も指定できます。 [見つかりません] のオブジェクトの場合、既定のアクションは [削除] ですが、[スキップ] も指定できます。 [異なる定義] の場合、既定のアクションは [更新] ですが、[スキップ] も指定できます。 [異なるオブジェクト] の場合、既定のアクションは [スキップ] で、これを変更することはできません (この場合、オブジェクトは同じですが、新しい、見つからない、または変更されたオブジェクトが含まれています)。

TargetName (ターゲット {プロジェクト, データベース, またはプロジェクト ファイル (.dbschema)})

比較するターゲットのプロジェクト、データベース、またはプロジェクト ファイルの名前。

関連するシナリオ

  • 1 つ以上のテーブル内のデータと参照データベース内のデータを比較および同期する
    データ比較を使用して、ソース データベースとターゲット データベースのテーブル間でデータを同期できます。

  • データベース オブジェクトへのすべての参照の名前を変更する
    リファクタリングを使用して、データベース オブジェクトへのすべての参照の名前を変更できます。 ビルドおよび配置の際は、変更の意図を保持しデータ損失のリスクを軽減するために、リファクタリング ログが使用されます。

  • データベースのビルドおよび分離開発環境への配置
    スキーマ比較を使用してターゲット データベースを更新できますが、チームでは、データベース プロジェクトを変更した後に変更をターゲット データベースにビルドおよび配置することをお勧めします。 この方法により、データベース プロジェクトで実行するすべてのリファクタリング操作の意図が保持されます。 また、スキーマ比較を使用してデータベースを更新する、他のチーム メンバによって自分の変更が上書きされるリスクを軽減できます。

参照

概念

Database Edition の用語の概要