方法: 2 つのデータベースのデータを比較して同期させる
このトピックの内容は、次の製品に該当します。
Visual Studio Ultimate |
Visual Studio Premium |
Visual Studio Professional |
Visual Studio Express |
---|---|---|---|
Visual Studio を使用すると、2 つのデータベースに格納されているデータを比較できます。 比較するデータベースは、ソースおよびターゲットと呼ばれます。
注意
データベース プロジェクトとデータ層アプリケーション プロジェクトには、データが含まれません。 このため、どちらの種類のプロジェクトも、データ比較のソースまたはターゲットに指定できません。 同様に、.dbschema ファイルと .dacpac にもデータが含まれないため、データ比較のソースまたはターゲットに指定できません。
データを比較すると、データ操作言語 (DML: Data Manipulation Language) スクリプトが生成されます。ターゲット データベースの一部またはすべてのデータを更新し、生成されたスクリプトを使用して内容が異なるデータベースを同期することができます。 データの比較が終了すると、Visual Studio の [データ比較] ウィンドウに結果が表示されます。
比較が終了すると、次のように他の手順を実行できます。
2 つのデータベース間の相違点を確認できます。 詳細については、「データの相違点の表示」を参照してください。
ターゲットの一部またはすべてを、ソースと一致するように更新することができます。 詳細については、「データベース データの同期」を参照してください。
詳細については、「1 つ以上のテーブルのデータを参照データベースのデータと比較して同期する」を参照してください。
注意
2 つのデータベース、または同じデータベースの 2 つのバージョンのスキーマを比較することもできます。 詳細については、「方法: データベース スキーマを比較する」を参照してください。
データベース データの比較
新しいデータの比較ウィザードを使用してデータを比較するには
[データ] メニューの [データ比較] をポイントし、[新しいデータの比較] をクリックします。
新しいデータの比較ウィザードが表示されます。 また、[データ比較] ウィンドウが開き、"DataCompare1" などの名前が Visual Studio によって自動的に割り当てられます。
ソース データベースとターゲット データベースを識別します。
[ソース データベース] ボックスの一覧または [ターゲット データベース] ボックスの一覧が空の場合、[新しい接続] をクリックします。 [接続のプロパティ] ダイアログ ボックスで、データベースが常駐するサーバーの名前、およびデータベースに接続するときに使用する認証の種類を指定します。 [OK] をクリックして [接続のプロパティ] ダイアログ ボックスを閉じ、データ比較ウィザードに戻ります。
データ比較ウィザードの 1 ページ目で、各データベースの情報が正しいことを確認し、結果に含めるレコードを指定して、[次へ] をクリックします。 データ比較ウィザードの 2 ページ目が表示され、データベースのテーブルおよびビューが階層表示されます。
比較するテーブルおよびビューのチェック ボックスをオンにします。 オプションで、データベース オブジェクトのノードを展開し、そのオブジェクト内の比較する列のチェック ボックスをオンにします。
注意
テーブルとビューが一覧に表示されるには、2 つの基準を満たす必要があります。 まず、ソース データベースとターゲット データベース間でオブジェクトのスキーマが一致することが必要です。 次に、主キー、一意キー、またはインデックスを持つテーブルとビューだけが一覧に表示されます。 これらの 2 つの基準を満たすテーブルとビューが存在しない場合、一覧は空になります。
複数のキーが存在する場合、[比較キー] 列にデータ比較の基になるキーを指定することができます。 たとえば、主キー列と一意で特定可能な別のキー列のいずれを比較の基にするかを指定することができます。
[完了] をクリックします。
比較が開始されます。
注意
進行中のデータ比較操作を停止するには、[データ] メニューの [データ比較] をポイントし、[データ比較の停止] をクリックします。
比較が終わると、2 つのデータベース間のデータの相違点が表示できます。 ターゲット データベースのデータの一部またはすべてを、ソース データベースのデータと一致するように更新することもできます。
Visual Studio オートメーション モデルを使用してデータを比較するには
[表示] メニューを開き、[その他のウィンドウ] をポイントし、[コマンド ウィンドウ] をクリックします。
コマンド ウィンドウで、次のコマンドを入力します。
Data.NewDataComparison /SrcServerName sServerName /SrcDatabaseName sDatabaseName /SrcUserName sUserName /SrcPassword sPassword /SrcDisplayName sDisplayName /TargetServerName tServerName /TargetDatabaseName tDatabaseName /TargeUserName tUserName /TargetPassword tPassword /TargetDisplayName tDisplayName
プレースホルダー (sServerName、sDatabaseName、sUserName、sPassword、sDisplayName、tServerName、tDatabaseName、tUserName、tPassword、および tDisplayName) を、使用するソース データベースとターゲット データベースの値に置き換えます。
ソースとターゲットを指定しない場合は、[新しいデータの比較] ダイアログ ボックスが表示されます。 Data.NewDataComparison コマンドのパラメーターの詳細については、「Visual Studio のデータベース機能のオートメーション コマンド リファレンス」を参照してください。
指定したソース データベースとターゲット データベースのデータが比較されます。 結果は、[データ比較] セッションに表示されます。 結果の表示方法またはデータの同期方法の詳細については、「データの相違点の表示」および「データベース データの同期」を参照してください。
データの相違点の表示
2 つのデータベースのデータを比較した後、[データ比較] には、比較した各データベース オブジェクトおよびその状態が一覧表示されます。 各オブジェクト内のレコードに対する結果を、状態別にグループ化して表示することもできます。 状態の指定の詳細については、「1 つ以上のテーブルのデータを参照データベースのデータと比較して同期する」を参照してください。
相違点を表示した後、不一致の、なくなった、あるいは新規作成されたオブジェクトまたはレコードの一部またはすべてについて、ソースと一致するようにターゲットを更新できます。 詳細については、「データベース データの同期」を参照してください。
データの相違点を表示するには
ソース データベースとターゲット データベースのデータを比較します。 詳細については、「データベース データの比較」を参照してください。
(省略可能) 次の一方または両方を実行します。
既定では、状態に関係なく、すべてのオブジェクトの結果が表示されます。 特定の状態のオブジェクトのみを表示するには、[フィルター] ボックスの一覧のオプションをクリックします。
特定のオブジェクト内のレコードの結果を表示するには、メインの結果ペインのオブジェクトをクリックし、レコード ビュー ペインのタブをクリックします。 各タブには、該当オブジェクト内で特定の状態 (不一致、ソースにのみ存在、ターゲットにのみ存在、または一致) にあるすべてのレコードが表示されます。 データは、レコードおよび列ごとに表示されます。
データベース データの同期
2 つのデータベースのデータを比較した後で、ソースに一致するようにターゲットの全体または一部を更新して、2 つのデータベースを同期できます。 データを比較できるデータベース オブジェクトは、テーブルとビューの 2 種類です。
[更新の書き込み] コマンドを使ってターゲットのデータを更新するには
ソース データベースとターゲット データベースのデータを比較します。 詳細については、「データベース データの比較」を参照してください。
比較が終了すると、比較したオブジェクトについての結果が [データ比較] ウィンドウに表示されます。 4 つの列 ([異なるレコード]、[ソースのみ]、[ターゲットのみ]、[同一のレコード]) に、同一ではなかったオブジェクトについての情報が表示されます。 これらの列には、該当する各オブジェクトについて、異なると認識されたレコードの件数、および更新操作を実行した場合に変更されるレコードの件数が表示されます。 この 2 つの数値は最初は一致しますが、更新するオブジェクトを手順 4. で変更できます。
詳細については、「1 つ以上のテーブルのデータを参照データベースのデータと比較して同期する」を参照してください。
[データ比較] ウィンドウの表で任意の行をクリックします。
詳細ペインに、クリックしたデータベース オブジェクトのレコードに関する結果が表示されます。 レコードは状態別にタブでグループ化されており、このタブを使ってソースからターゲットに反映させるデータを指定できます。
詳細ペインで、名前にゼロ (0) 以外の数が含まれているタブをクリックします。
"ターゲットのみ" テーブルの [更新] 列のチェック ボックスを使って、更新する行を選択できます。 既定では、各チェック ボックスはオンになっています。
ターゲットのレコードのうち、ソースのデータで更新しないものについては、対応するチェック ボックスをオフにします。
チェック ボックスをオフにすると、更新するレコードの数が減り、これを反映して表示が変更されます。 この数は、詳細ペインのステータス ライン、および手順 1. に記載したようにメインの結果ペインの対応する列に表示されます。
(省略可能) [エディターにエクスポート] をクリックします。
Transact-SQL エディター ウィンドウが開き、ターゲットの更新に使用するデータ操作言語 (DML: Data Manipulation Language) スクリプトが表示されます。
異なるレコード、不足しているレコード、または新しいレコードを同期するために、[更新の書き込み] をクリックします。
注意
ターゲット データベースを更新している途中で [ターゲットへの書き込みの停止] をクリックすると、操作をキャンセルできます。
選択されたレコードのターゲットのデータが、対応するソースのレコードのデータで更新されます。
注意
インデックス付きビューを更新する場合、1 つのテーブルに重複するキーが挿入されるような更新の書き込み操作は失敗します。
Transact-SQL スクリプトを使ってターゲットのデータを更新するには
ソース データベースとターゲット データベースのデータを比較します。 詳細については、「データベース データの比較」を参照してください。
比較が終了すると、比較したオブジェクトが [データ比較] ウィンドウに表示されます。 詳細については、「1 つ以上のテーブルのデータを参照データベースのデータと比較して同期する」を参照してください。
(省略可能) 前の手順の説明に従い、詳細ペインで、更新対象に含めないターゲットのレコードのチェック ボックスをオフにします。
[エディターにエクスポート] をクリックします。
新しいウィンドウが開き、ソースのデータに一致するようにターゲットのデータを変更するための Transact-SQL スクリプトが表示されます。 この新しいウィンドウには、Server.Database - DataUpdate_Database _1.sql というような名前が付いています。
このスクリプトは、詳細ペインで行った変更を反映しています。 たとえば、ある行のチェック ボックスを [dbo].[Shippers] テーブルの [ターゲットのみ] ページでオフにしたとします。 その場合、その行は更新されません。
(省略可能) このスクリプトを [Server.Database - DataUpdate_Database _1.sql] ウィンドウで編集します。
(省略可能、ただし推奨) ターゲット データベースをバックアップします。
[SQL の実行] をクリックするか、または F5 キーを押して、ターゲット データベースを更新します。
更新対象のターゲット データベースへの接続を指定します。
重要
既定では、更新は 1 つのトランザクションのスコープ内で行われます。 エラーが発生した場合は、更新全体をロールバックできます。 この動作は変更できます。 詳細については、「方法 : データベースのデータを比較するオプションを設定する」を参照してください。
選択されたレコードのターゲットのデータが、対応するソースのレコードのデータで更新されます。