レプリケートされたデータの検証

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL データベース

このトピックでは、 SQL Server で SQL Server Management Studio、 Transact-SQL、またはレプリケーション管理オブジェクト (RMO) を使用して、サブスクライバーでデータを検証する方法について説明します。

トランザクション レプリケーションとマージ レプリケーションを使用すると、サブスクライバーのデータがパブリッシャーのデータと一致するかどうかを検証できます。 検証は、1 つのパブリケーションの特定のサブスクリプション、またはすべてのサブスクリプションに対して行うことができます。 次のいずれかの種類の検証を指定すると、ディストリビューション エージェントまたはマージ エージェントは次回の実行時にデータを検証します。

  • 行数のみ。 サブスクライバーのテーブルにパブリッシャーのテーブルと同じ数の行があるかどうかを検証しますが、行の内容が一致するかどうかについては検証しません。 行数の確認は、データに問題があるかどうかを調べる手軽な検証方法です。
  • 行数とバイナリ チェックサム。 パブリッシャーとサブスクライバーの行数に加え、チェックサム アルゴリズムを使用して、すべてのデータのチェックサムが計算されます。 行数の検証で失敗となった場合、チェックサムは実行されません。

サブスクライバーとパブリッシャーのデータが一致するかどうかの検証に加え、マージ レプリケーションでは、各サブスクライバーに対してデータが正しくパーティション分割されているかどうかを検証する機能も用意されています。 詳細については、「Validate Partition Information for a Merge Subscriber」 (マージ サブスクライバーのパーティション情報の検証) を参照してください。

注意

Azure SQL Managed Instance は、スナップショットおよびトランザクション レプリケーションのパブリッシャー、ディストリビューター、およびサブスクライバーの可能性があります。 Azure SQL Database のデータベースは、スナップショットとトランザクション レプリケーションのプッシュ サブスクライバーの可能性しかありません。 詳細については、Azure SQL Database および Azure SQL Managed Instance を使用したトランザクションのレプリケーションに関するページを参照してください。

データ検証の動作

SQL Server では、パブリッシャー側の行数やチェックサムを計算し、それらの値をサブスクライバー側で計算された行数やチェックサムと比較することで、データの検証を行います。 一方の値はパブリケーション テーブル全体に対して計算され、もう一方の値はサブスクリプション テーブル全体に対して計算されます。ただし、 text 列、 ntext 列、または image 列にあるデータはその計算には含まれません。

計算が行われている間は、行数またはチェックサムの計算が行われているテーブルに共有ロックが一時的にかかりますが、計算はすぐに終了し、通常、数秒で共有ロックは解除されます。

バイナリ チェックサムを使用する場合は、32 ビット CRC (冗長性検査) がデータ ページの物理的な行ではなく、列ごとに実行されます。 これにより、テーブルの列がデータ ページで物理的にどのような順序であっても、行については同じ CRC 値が計算されます。 バイナリ チェックサムを使用した検証は、パブリケーション上に行フィルターまたは列フィルターがある場合に使用できます。

データの検証は、3 つの部分で構成されるプロセスです。

  1. パブリケーションの単一のサブスクリプションまたはすべてのサブスクリプションが検証対象として マーク されます。 MicrosoftSQL Server Management Studio の [ローカル パブリケーション] フォルダーと [ローカル サブスクリプション] フォルダーから使用できる、[サブスクリプションの検証][サブスクリプションの検証] および [すべてのサブスクリプションの検証] の各ダイアログ ボックスで検証対象のサブスクリプションにマークを付けます。 また、 [すべてのサブスクリプション] タブ、 [サブスクリプション ウォッチ リスト] タブ、およびレプリケーション モニターのパブリケーション ノードでもサブスクリプションにマークを付けることができます。 レプリケーション モニターの起動の詳細については、「Start the Replication Monitor」 (レプリケーション モニターの開始) を参照してください。

  2. サブスクリプションは、ディストリビューション エージェント (トランザクション レプリケーションの場合) またはマージ エージェント (マージ レプリケーションの場合) による次回の同期時に検証されます。 ディストリビューション エージェントは、通常は連続して実行されるので、検証はすぐに実行されます。マージ エージェントは、通常は要求時に実行されるので、エージェントを実行した後で検証が実行されます。

  3. 検証結果は次の場所で表示できます。

    • レプリケーション モニターの詳細ウィンドウ : トランザクション レプリケーションの場合は [ディストリビューターからサブスクライバーまでの履歴] タブ、およびマージ レプリケーションの場合は [同期の履歴] タブ
    • [同期の状態の表示] Management Studioダイアログ ボックス

注意点と制約

データの検証に際しては、次の点に注意してください。

  • データを検証する前にサブスクライバー側のすべての更新操作を停止する必要があります (検証実行時にパブリッシャー側の操作を停止する必要はありません)。
  • チェックサムおよびバイナリ チェックサムを使用した検証を大規模なデータセットに対して行う場合には、大量のプロセッサ リソースが必要になるので、レプリケーションで使用するサーバーの利用状況が最小のときに検証を行うようにスケジュールする必要があります。
  • レプリケーションはテーブルのみを検証します。スキーマのみのアーティクル (ストアド プロシージャなど) がパブリッシャーとサブスクライバーで同じであるかどうかは検証しません。
  • バイナリ チェックサムは、パブリッシュされたどのテーブルでも使用できます。 チェックサムは、列フィルターの設定されたテーブル、または列オフセットが異なる論理テーブル構造 (列を削除または追加する ALTER TABLE ステートメントの結果) は検証できません。
  • レプリケーション検証には、 checksum 関数および binary_checksum 関数を使用します。 各関数の動作については、「CHECKSUM (Transact-SQL)」と「BINARY_CHECKSUM (Transact-SQL)」を参照してください。
  • バイナリ チェックサムまたはチェックサムを使用した検証では、データ型がサブスクライバー側とパブリッシャー側とで異なる場合には、誤ってエラーを報告することがあります。 これは、次のいずれかの場合に発生する可能性があります。
    • SQL Serverの以前のバージョンのデータ型をマップするスキーマ オプションを明示的に設定している場合。
    • マージ パブリケーションのパブリケーションの互換性レベルを SQL Serverの以前のバージョンに設定し、パブリッシュされたテーブルに、このバージョンに対してマップする必要がある 1 つ以上のデータ型が含まれている場合。
    • サブスクリプションを手動で初期化し、サブスクライバーで異なるデータ型を使用している場合。
  • バイナリ チェックサムおよびチェックサムによる検証は、トランザクション レプリケーションの変換可能なサブスクリプションではサポートされていません。
  • 検証は、SQL Server 以外のサブスクライバーにレプリケートされたデータに対してはサポートされていません。
  • レプリケーション モニターの手順は、プッシュ サブスクリプションにのみ適用されます。プル サブスクリプションはレプリケーション モニターでは同期できないからです。 ただし、レプリケーション モニターで、サブスクリプションに検証対象のマークを付けたり、プル サブスクリプションの検証結果を表示することはできます。
  • 検証結果には、検証が成功したかどうかが示されますが、失敗した場合、検証に失敗した行は示されません。 パブリッシャーとサブスクライバーのデータを比較するには、 tablediff Utilityを使用します。 レプリケートされたデータでのこのユーティリティの使用の詳細については、「Compare Replicated Tables for Differences (Replication Programming)」 (レプリケートされたテーブルを比較して相違があるかどうかを確認する (レプリケーション プログラミング)) を参照してください。

データ検証の結果

検証が完了すると、ディストリビューション エージェントまたはマージ エージェントは成功または失敗に関するメッセージをログに記録します (レプリケーションでは失敗した行については報告されません)。 これらのメッセージは SQL Server Management Studio、レプリケーション モニター、およびレプリケーション システム テーブルで参照できます。 操作方法に関する上記のトピックは、検証の実行方法と結果を表示する方法を示しています。

データ検証の問題に対処するために、次の点を検討してください。

  • 失敗が通知されるように、 [レプリケーション: サブスクライバーでデータ検証で問題が見つかりました] というレプリケーション警告を設定します。 詳細については、「Configure Predefined Replication Alerts (SQL Server Management Studio)」 (定義済みのレプリケーションの警告の構成 (SQL Server Management Studio)) を参照してください。

  • 検証の失敗はアプリケーションにとって問題となりますか? 検証の失敗が問題となる場合、データを手動で更新して同期するか、サブスクリプションを再初期化してください。

トランザクション レプリケーションのアーティクル

SQL Server Management Studio を使用する

  1. SQL Server Management Studioでパブリッシャーに接続し、サーバー ノードを展開します。
  2. [レプリケーション] フォルダーを展開し、 [ローカル パブリケーション] フォルダーを展開します。
  3. サブスクリプションを検証するパブリケーションを右クリックし、 [サブスクリプションの検証] をクリックします。
  4. [サブスクリプションの検証] ダイアログ ボックスで、次のように検証するサブスクリプションを選択します。
    • [すべての SQL Server サブスクリプションを検証する] を選択する。
    • [以下のサブスクリプションを検証する] を選択し、1 つ以上のサブスクリプションを選択する。
  5. 実行する検証の種類 (行数、または行数とチェックサム) を指定するには、 [検証オプション] をクリックし、 [サブスクリプションの検証オプション] ダイアログ ボックスでオプションを指定します。
  6. [OK] をクリックします。
  7. レプリケーション モニターまたは [同期の状態の表示] ダイアログ ボックスで検証結果を表示します。 サブスクリプションごとに、次の手順を実行します。
    1. パブリケーションを展開し、サブスクリプションを右クリックして、 [同期の状態の表示] をクリックします。
    2. エージェントが実行されていない場合は、 [同期の状態の表示] ダイアログ ボックスの [開始] をクリックします。 ダイアログ ボックスには、検証に関する情報メッセージが表示されます。
      検証に関するメッセージが表示されない場合、エージェントは既にその後のメッセージを記録しています。 この場合は、検証結果をレプリケーション モニターに表示します。 詳細については、このトピックのレプリケーション モニターの実行手順を参照してください。

Transact-SQL の使用

すべてのアーティクル

  1. パブリッシャー側のパブリケーション データベースに対して sp_publication_validation (Transact-SQL) を実行します。 @publication を指定し、@rowcount_only には次のいずれかの値を指定します。

    • 1 - 行数チェックのみ (既定値)
    • 2 - 行数とバイナリ チェックサム

    注意

    sp_publication_validation (Transact-SQL) を実行する場合、sp_article_validation (Transact-SQL) がパブリケーション内の各アーティクルに対して実行されます。 sp_publication_validation (Transact-SQL) を正常に実行するためには、パブリッシュされたベース テーブルのすべての列に対して SELECT 権限が必要です。

  2. (省略可) ディストリビューション エージェントがまだ実行されていない場合は、各サブスクリプションについてディストリビューション エージェントを開始します。 詳細については、「 Synchronize a Pull Subscription 」および「 Synchronize a Push Subscription」を参照してください。

  3. エージェントの出力で検証結果を確認します。

単一のアーティクル

  1. パブリッシャー側のパブリケーション データベースに対して sp_article_validation (Transact-SQL) を実行します。 @publication を指定し、@article にはアーティクルの名前、@rowcount_only には次のいずれかの値を指定します。

    • 1 - 行数チェックのみ (既定値)
    • 2 - 行数とバイナリ チェックサム

    注意

    sp_article_validation (Transact-SQL) を正常に実行するためには、パブリッシュされたベース テーブルのすべての列に対して SELECT 権限が必要です。

  2. (省略可) ディストリビューション エージェントがまだ実行されていない場合は、各サブスクリプションについてディストリビューション エージェントを開始します。 詳細については、「 Synchronize a Pull Subscription 」および「 Synchronize a Push Subscription」を参照してください。

  3. エージェントの出力で検証結果を確認します。

単一のサブスクライバー

  1. パブリッシャーのパブリケーション データベースで、BEGIN TRANSACTION (Transact-SQL) を使用して明示的なトランザクションを開始します。

  2. パブリッシャー側のパブリケーション データベースに対して、sp_marksubscriptionvalidation (Transact-SQL) を実行します。 @publication にはパブリケーション、@subscriber にはサブスクライバーの名前、@destination_db にはサブスクリプション データベースの名前を指定します。

  3. (省略可) 検証の対象となる各サブスクリプションについて、手順 2. を繰り返します。

  4. パブリッシャー側のパブリケーション データベースに対して sp_article_validation (Transact-SQL) を実行します。 @publication を指定し、@article にはアーティクルの名前、@rowcount_only には次のいずれかの値を指定します。

    • 1 - 行数チェックのみ (既定値)
    • 2 - 行数とバイナリ チェックサム

    注意

    sp_article_validation (Transact-SQL) を正常に実行するためには、パブリッシュされたベース テーブルのすべての列に対して SELECT 権限が必要です。

  5. パブリッシャー側のパブリケーション データベースに対して、COMMIT TRANSACTION (Transact-SQL) を使用してトランザクションをコミットします。

  6. (省略可) 検証の対象となる各アーティクルについて、手順 1. から手順 5. を繰り返します。

  7. (省略可) ディストリビューション エージェントがまだ実行されていない場合は、開始します。 詳細については、「 Synchronize a Pull Subscription 」および「 Synchronize a Push Subscription」を参照してください。

  8. エージェントの出力で検証結果を確認します。 詳しくは、「 Validate Data at the Subscriber」をご覧ください。

トランザクション パブリケーションのすべてのプッシュ サブスクリプション

レプリケーション モニターの使用

  1. レプリケーション モニターの左ペインでパブリッシャー グループを展開し、パブリッシャーを展開します。

  2. サブスクリプションを検証するパブリケーションを右クリックし、 [サブスクリプションの検証] をクリックします。

  3. [サブスクリプションの検証] ダイアログ ボックスで、次のように検証するサブスクリプションを選択します。

    • [すべての SQL Server サブスクリプションを検証する] を選択する。
    • [以下のサブスクリプションを検証する] を選択し、1 つ以上のサブスクリプションを選択する。
  4. 実行する検証の種類 (行数、または行数とチェックサム) を指定するには、 [検証オプション] をクリックし、 [サブスクリプションの検証オプション] ダイアログ ボックスでオプションを指定します。

  5. [OK] をクリックします。

  6. [すべてのサブスクリプション] タブをクリックします。

  7. 検証結果を表示します。 プッシュ サブスクリプションごとに、次の手順を実行します。

    1. エージェントが実行されていない場合、サブスクリプションを右クリックし、 [同期の開始] をクリックします。
    2. サブスクリプションを右クリックし、 [詳細表示] をクリックします。
    3. [ディストリビューターからサブスクライバーまでの履歴] タブの [選択されたセッションのアクション] テキスト領域に情報が表示されます。

マージ パブリケーションの単一のサブスクリプション

SQL Server Management Studio を使用する

  1. SQL Server Management Studioでパブリッシャーに接続し、サーバー ノードを展開します。

  2. [レプリケーション] フォルダーを展開し、 [ローカル パブリケーション] フォルダーを展開します。

  3. サブスクリプションを検証するパブリケーションを展開し、サブスクリプションを右クリックして、 [サブスクリプションの検証] をクリックします。

  4. [サブスクリプションの検証] ダイアログ ボックスで、 [このサブスクリプションを検証する] を選択します。

  5. 実行する検証の種類 (行数、または行数とチェックサム) を指定するには、 [オプション] をクリックし、 [サブスクリプションの検証オプション] ダイアログ ボックスでオプションを指定します。

  6. [OK] をクリックします。

  7. レプリケーション モニターまたは [同期の状態の表示] ダイアログ ボックスで検証結果を表示します。

    1. パブリケーションを展開し、サブスクリプションを右クリックして、 [同期の状態の表示] をクリックします。
    2. エージェントが実行されていない場合は、 [同期の状態の表示] ダイアログ ボックスの [開始] をクリックします。 ダイアログ ボックスには、検証に関する情報メッセージが表示されます。

    検証に関するメッセージが表示されない場合、エージェントは既にその後のメッセージを記録しています。 この場合は、検証結果をレプリケーション モニターに表示します。 詳細については、このトピックのレプリケーション モニターの実行手順を参照してください。

マージ パブリケーションのすべてのサブスクリプション

SQL Server Management Studio を使用する

  1. SQL Server Management Studioでパブリッシャーに接続し、サーバー ノードを展開します。

  2. [レプリケーション] フォルダーを展開し、 [ローカル パブリケーション] フォルダーを展開します。

  3. サブスクリプションを検証するパブリケーションを右クリックし、 [すべてのサブスクリプションの検証] をクリックします。

  4. [すべてのサブスクリプションの検証] ダイアログ ボックスで、実行する検証の種類 (行数、または行数とチェックサム) を指定します。

  5. [OK] をクリックします。

  6. レプリケーション モニターまたは [同期の状態の表示] ダイアログ ボックスで検証結果を表示します。 サブスクリプションごとに、次の手順を実行します。

    1. パブリケーションを展開し、サブスクリプションを右クリックして、 [同期の状態の表示] をクリックします。
    2. エージェントが実行されていない場合は、 [同期の状態の表示] ダイアログ ボックスの [開始] をクリックします。 ダイアログ ボックスには、検証に関する情報メッセージが表示されます。

    検証に関するメッセージが表示されない場合、エージェントは既にその後のメッセージを記録しています。 この場合は、検証結果をレプリケーション モニターに表示します。 詳細については、このトピックのレプリケーション モニターの実行手順を参照してください。

マージ パブリケーションの単一のプッシュ サブスクリプション

レプリケーション モニターの使用

  1. レプリケーション モニターで、左ペインのパブリッシャー グループを展開し、パブリッシャーを展開してパブリケーションをクリックします。
  2. [すべてのサブスクリプション] タブをクリックします。
  3. 検証するサブスクリプションを右クリックし、 [サブスクリプションの検証] をクリックします。
  4. [サブスクリプションの検証] ダイアログ ボックスで、 [このサブスクリプションを検証する] を選択します。
  5. 実行する検証の種類 (行数、または行数とチェックサム) を指定するには、 [オプション] をクリックし、 [サブスクリプションの検証オプション] ダイアログ ボックスでオプションを指定します。
  6. [OK] をクリックします。
  7. [すべてのサブスクリプション] タブをクリックします。
  8. 検証結果を表示します。
    1. エージェントが実行されていない場合、サブスクリプションを右クリックし、 [同期の開始] をクリックします。
    2. サブスクリプションを右クリックし、 [詳細表示] をクリックします。
    3. [同期の履歴] タブの [選択されたセッションの最終メッセージ] テキスト領域に情報が表示されます。

Transact-SQL の使用

  1. パブリッシャー側のパブリケーション データベースに対して、sp_validatemergesubscription (Transact-SQL) を実行します。 @publication を指定し、@subscriber にはサブスクライバーの名前、@subscriber_db にはサブスクリプション データベースの名前、@level には次のいずれかの値を指定します。

    • 1 - 行数の検証のみ
    • 3 - 行数とバイナリ チェックサムの検証

    これにより、選択されたサブスクリプションが検証対象としてマークされます。

  2. 各サブスクリプションのマージ エージェントを開始します。 詳細については、「 Synchronize a Pull Subscription 」および「 Synchronize a Push Subscription」を参照してください。

  3. エージェントの出力で検証結果を確認します。

  4. 検証の対象となる各サブスクリプションについて、手順 1. から手順 3. を繰り返します。

注意

Replication Merge Agent を実行するときに、 -Validateパラメーターを指定することによって、マージ パブリケーションのサブスクリプションについても同期処理の最後に検証を実行できます。

マージ パブリケーションのすべてのプッシュ サブスクリプション

レプリケーション モニターの使用

  1. レプリケーション モニターの左ペインでパブリッシャー グループを展開し、パブリッシャーを展開します。
  2. サブスクリプションを検証するパブリケーションを右クリックし、 [すべてのサブスクリプションの検証] をクリックします。
  3. [すべてのサブスクリプションの検証] ダイアログ ボックスで、実行する検証の種類 (行数、または行数とチェックサム) を指定します。
  4. [OK] をクリックします。
  5. [すべてのサブスクリプション] タブをクリックします。
  6. 検証結果を表示します。 プッシュ サブスクリプションごとに、次の手順を実行します。
    1. エージェントが実行されていない場合、サブスクリプションを右クリックし、 [同期の開始] をクリックします。
    2. サブスクリプションを右クリックし、 [詳細表示] をクリックします。
    3. [同期の履歴] タブの [選択されたセッションの最終メッセージ] テキスト領域に情報が表示されます。

Transact-SQL の使用

  1. パブリッシャー側のパブリケーション データベースに対して、sp_validatemergepublication (Transact-SQL) を実行します。 @publication を指定し、@level には次のいずれかの値を指定します。

    • 1 - 行数の検証のみ
    • 3 - 行数とバイナリ チェックサムの検証

    これにより、すべてのサブスクリプションが検証対象としてマークされます。

  2. 各サブスクリプションのマージ エージェントを開始します。 詳細については、「 Synchronize a Pull Subscription 」および「 Synchronize a Push Subscription」を参照してください。

  3. エージェントの出力で検証結果を確認します。 詳しくは、「 Validate Data at the Subscriber」をご覧ください。

マージ エージェントのパラメーターを使用したデータの検証

  1. サブスクライバー (プル サブスクリプションの場合) またはディストリビューター (プッシュ サブスクリプションの場合) で、次のいずれかの方法でコマンド プロンプトからマージ エージェントを開始します。

    • -Validate パラメーターの値に、 1 (行数) または 3 (行数とバイナリ チェックサム) を指定します。
    • -ProfileName パラメーターに、 rowcount validation または rowcount and checksum validation を指定します。

    詳細については、「 Synchronize a Pull Subscription 」または「 Synchronize a Push Subscription」を参照してください。

レプリケーション管理オブジェクト (RMO) の使用

レプリケーションでは、サブスクライバーのデータがパブリッシャーのデータと一致するかどうかを、レプリケーション管理オブジェクト (RMO) を使用してプログラムから検証できます。 使用するオブジェクトは、レプリケーション トポロジの種類によって異なります。 トランザクション レプリケーションでは、パブリケーションのサブスクリプションをすべて検証する必要があります。

注意

例については、このセクションの後半の「 例 (RMO)」を参照してください。

トランザクション パブリケーションのすべてのアーティクルについてデータを検証するには

  1. ServerConnection クラスを使用して、パブリッシャーへの接続を作成します。

  2. TransPublication クラスのインスタンスを作成します。 パブリケーションの Name プロパティおよび DatabaseName プロパティを設定します。 ConnectionContext プロパティに、手順 1. の接続を設定します。

  3. LoadProperties メソッドを呼び出して、オブジェクトの残りのプロパティを取得します。 このメソッドが false を返す場合、手順 2. でパブリケーション プロパティを不適切に設定したか、パブリケーションが存在していません。

  4. ValidatePublication メソッドを呼び出します。 次のパラメーターを指定します。

    • ValidationOption

    • ValidationMethod

    • 検証が終了した後、ディストリビューション エージェントを停止するかどうかを示すブール値

    これにより、アーティクルが検証対象としてマークされます。

  5. まだディストリビューション エージェントを実行していない場合は、ディストリビューション エージェントを起動して、各サブスクリプションを同期します。 詳細については、「 Synchronize a Push Subscription 」または「 Synchronize a Pull Subscription」を参照してください。 検証操作の結果は、エージェントの履歴に出力されます。 詳しくは、「 Monitoring Replication」をご覧ください。

マージ パブリケーションのすべてのサブスクリプションについてデータを検証するには

  1. ServerConnection クラスを使用して、パブリッシャーへの接続を作成します。

  2. MergePublication クラスのインスタンスを作成します。 パブリケーションの Name プロパティおよび DatabaseName プロパティを設定します。 ConnectionContext プロパティに、手順 1. の接続を設定します。

  3. LoadProperties メソッドを呼び出して、オブジェクトの残りのプロパティを取得します。 このメソッドが false を返す場合、手順 2. でパブリケーション プロパティを不適切に設定したか、パブリケーションが存在していません。

  4. ValidatePublication メソッドを呼び出します。 必要な ValidationOptionを指定します。

  5. 各サブスクリプションについてマージ エージェントを実行して検証を開始するか、次回予定されているエージェントの実行を待ちます。 詳細については、「 Synchronize a Pull Subscription 」および「 Synchronize a Push Subscription」を参照してください。 検証操作の結果は、エージェントの履歴に出力されます。この履歴は、レプリケーション モニターを使って表示できます。 詳しくは、「 Monitoring Replication」をご覧ください。

マージ パブリケーションの単一のサブスクリプションについてデータを検証するには

  1. ServerConnection クラスを使用して、パブリッシャーへの接続を作成します。

  2. MergePublication クラスのインスタンスを作成します。 パブリケーションの Name プロパティおよび DatabaseName プロパティを設定します。 ConnectionContext プロパティに、手順 1. の接続を設定します。

  3. LoadProperties メソッドを呼び出して、オブジェクトの残りのプロパティを取得します。 このメソッドが false を返す場合、手順 2. でパブリケーション プロパティを不適切に設定したか、パブリケーションが存在していません。

  4. ValidateSubscription メソッドを呼び出します。 サブスクライバーの名前、検証対象のサブスクリプション データベース、および、必要な ValidationOptionを指定します。

  5. 目的のサブスクリプションについてマージ エージェントを実行して検証を開始するか、次回予定されているエージェントの実行を待ちます。 詳細については、「 Synchronize a Pull Subscription 」および「 Synchronize a Push Subscription」を参照してください。 検証操作の結果は、エージェントの履歴に出力されます。この履歴は、レプリケーション モニターを使って表示できます。 詳しくは、「 Monitoring Replication」をご覧ください。

例 (RMO)

次の例では、トランザクション パブリケーションのすべてのサブスクリプションを、行数検証の対象としてマークします。

// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2012";

TransPublication publication;

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Set the required properties for the publication.
    publication = new TransPublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;

    // If we can't get the properties for this publication, 
    // throw an application exception.
    if (publication.LoadProperties())
    {
        // Initiate validataion for all subscriptions to this publication.
        publication.ValidatePublication(ValidationOption.RowCountOnly,
            ValidationMethod.ConditionalFast, false);

        // If not already running, start the Distribution Agent at each 
        // Subscriber to synchronize and validate the subscriptions.
    }
    else
    {
        throw new ApplicationException(String.Format(
            "Settings could not be retrieved for the publication. " +
            "Ensure that the publication {0} exists on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Do error handling here.
    throw new ApplicationException(
        "Subscription validation could not be initiated.", ex);
}
finally
{
    conn.Disconnect();
}
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2012"

Dim publication As TransPublication

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Set the required properties for the publication.
    publication = New TransPublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' If we can't get the properties for this publication, 
    ' throw an application exception.
    If publication.LoadProperties() Then

        ' Initiate validataion for all subscriptions to this publication.
        publication.ValidatePublication(ValidationOption.RowCountOnly, _
         ValidationMethod.ConditionalFast, False)

        ' If not already running, start the Distribution Agent at each 
        ' Subscriber to synchronize and validate the subscriptions.
    Else
        Throw New ApplicationException(String.Format( _
         "Settings could not be retrieved for the publication. " + _
         "Ensure that the publication {0} exists on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Do error handling here.
    Throw New ApplicationException( _
     "Subscription validation could not be initiated.", ex)
Finally
    conn.Disconnect()
End Try

次の例では、マージ パブリケーションの特定のサブスクリプションを、行数検証の対象としてマークします。

// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2012";
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";

MergePublication publication;

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Set the required properties for the publication.
    publication = new MergePublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;


    // If we can't get the properties for this merge publication, then throw an application exception.
    if (publication.LoadProperties())
    {
        // Initiate validation of the specified subscription.
        publication.ValidateSubscription(subscriberName,
            subscriptionDbName, ValidationOption.RowCountOnly);
        
        // Start the Merge Agent to synchronize and validate the subscription.
    }
    else
    {
        throw new ApplicationException(String.Format(
            "Settings could not be retrieved for the publication. " +
            "Ensure that the publication {0} exists on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Do error handling here.
    throw new ApplicationException(String.Format(
        "The subscription at {0} to the {1} publication could not " +
        "be validated.", subscriberName, publicationName), ex);
}
finally
{
    conn.Disconnect();
}
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2012"
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"

Dim publication As MergePublication

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Set the required properties for the publication.
    publication = New MergePublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' If we can't get the properties for this merge publication, then throw an application exception.
    If publication.LoadProperties() Then
        ' Initiate validation of the specified subscription.
        publication.ValidateSubscription(subscriberName, _
         subscriptionDbName, ValidationOption.RowCountOnly)

        ' Start the Merge Agent to synchronize and validate the subscription.
    Else
        Throw New ApplicationException(String.Format( _
         "Settings could not be retrieved for the publication. " + _
         "Ensure that the publication {0} exists on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Do error handling here.
    Throw New ApplicationException(String.Format( _
     "The subscription at {0} to the {1} publication could not " + _
     "be validated.", subscriberName, publicationName), ex)
Finally
    conn.Disconnect()
End Try

参照

Best Practices for Replication Administration