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

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

  • 行数のみ。サブスクライバーのテーブルにパブリッシャーのテーブルと同じ数の行があるかどうかを検証しますが、行の内容が一致するかどうかについては検証しません。行数の検証は、データに関する問題に注意を促す手軽な手段として利用できます。

  • 行数とバイナリ チェックサム。パブリッシャーとサブスクライバーの行数に加え、チェックサム アルゴリズムを使用して、すべてのデータのチェックサムが計算されます。行数の検証で失敗となった場合、チェックサムは実行されません。

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

データを検証するには

サブスクリプションのすべてのアーティクルを検証するには、SQL Server Management Studio、ストアド プロシージャ、またはレプリケーション管理オブジェクト (RMO) を使用します。スナップショット パブリケーションおよびトランザクション パブリケーションの個々のアーティクルを検証するには、ストアド プロシージャを使用する必要があります。

データ検証の結果

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

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

データ検証に関する注意点

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

  • データを検証する前にサブスクライバー側のすべての更新操作を停止する必要があります (検証実行時にパブリッシャー側の操作を停止する必要はありません)。

  • チェックサムおよびバイナリ チェックサムを使用した検証を大規模なデータセットに対して行う場合には、大量のプロセッサ リソースが必要になるので、レプリケーションで使用するサーバーの利用状況が最小のときに検証を行うようにスケジュールする必要があります。

  • レプリケーションはテーブルのみを検証します。スキーマのみのアーティクル (ストアド プロシージャなど) がパブリッシャーとサブスクライバーで同じであるかどうかは検証しません。

  • バイナリ チェックサムは、パブリッシュされたどのテーブルでも使用できます。チェックサムは、列フィルターの設定されたテーブル、または列オフセットが異なる論理テーブル構造 (列を削除または追加する ALTER TABLE ステートメントの結果) は検証できません。

  • レプリケーション検証には、checksum 関数および binary_checksum 関数を使用します。動作の詳細については、「CHECKSUM (Transact-SQL)」および「BINARY_CHECKSUM (Transact-SQL)」を参照してください。

  • バイナリ チェックサムまたはチェックサムを使用した検証では、データ型がサブスクライバー側とパブリッシャー側とで異なる場合には、誤ってエラーが報告されることがあります。これは、次のいずれかの場合に発生する可能性があります。

    • SQL Server の以前のバージョンのデータ型をマップするスキーマ オプションを明示的に設定している場合。データ型のマッピングの詳細については、「レプリケーション トポロジにおける複数バージョンの SQL Server の使用」を参照してください。

    • マージ パブリケーションのパブリケーションの互換性レベルを SQL Server の以前のバージョンに設定し、パブリッシュされたテーブルに、このバージョンに対してマップする必要がある 1 つ以上のデータ型が含まれている場合。データ型マッピングおよびパブリケーションの互換性レベルの詳細については、「レプリケーション トポロジにおける複数バージョンの SQL Server の使用」を参照してください。

    • サブスクリプションを手動で初期化し、サブスクライバーで異なるデータ型を使用している場合。

  • バイナリ チェックサムおよびチェックサムによる検証は、トランザクション レプリケーションの変換可能なサブスクリプションではサポートされていません。

  • 検証は、SQL Server 以外のサブスクライバーにレプリケートされたデータに対してはサポートされていません。

データ検証の動作

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

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

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