ディストリビューション エージェントで -SkipErrors パラメーターを使用する

この記事では、ディストリビューション エージェントでのパラメーターの-SkipErrors使用方法について説明します。

元の製品バージョン: SQL Server
元の KB 番号: 327817

概要

Microsoft SQL Server には、トランザクション レプリケーションで示されたエラーをスキップし、配布プロセスを続行するためにディストリビューション エージェントを許可する新しいパラメーター-SkipErrorsがディストリビューション エージェントに含まれています。

次の抜粋は、オンライン ブックのエージェント エラーの処理に関するトピックSQL Server抜粋です。

一般的なレプリケーション処理では、スキップする必要があるエラーは発生しません。 トランザクション レプリケーション中にエラーをスキップする機能は、エラーが予想され、レプリケーションに影響を与えたくない一意の状況で使用できます (たとえば、ログ配布中にセカンダリ パブリッシャーにフェールオーバーする場合)。

Microsoft では、次のことを十分に理解している場合にのみ、このパラメーターを慎重に使用することをお勧めします。

  • エラーが示す内容。
  • エラーが発生する理由。
  • エラーを解決する代わりに、エラーをスキップする方が良い理由。

これらの項目に対する回答がわからない場合、パラメーターを -SkipErrors 不適切に使用すると、パブリッシャーとサブスクライバーの間でデータの不整合が発生する可能性があります。 この記事では、 パラメーターを誤って使用 -SkipErrors したときに発生する可能性があるいくつかの問題について説明します。

詳細

トランザクション レプリケーションでは、パブリッシャーでのデータの変更がトランザクションの単位でサブスクライバーに伝達されます。

1 つのトランザクションで、複数のコマンドが存在する可能性があります。 既定では、1 つのコマンドが失敗した場合、レプリケーション トランザクション全体がサブスクライバーでロールバックされます。 パラメーターを-SkipErrors追加して、ディストリビューション エージェントが特定のエラーをスキップできるようにする場合、このエラーを引き起こす個々のコマンドはサブスクライバーには適用されませんが、同じトランザクション内の他のすべてのコマンドが適用されます。 この状況では、レプリケーション トランザクションはサブスクライバーに部分的にのみ適用されるため、パブリッシャーとサブスクライバーの間でデータの不整合が発生する可能性があります。

例:

T1 という名前のサブスクライバー テーブルへのレプリケートを待機しているトランザクションがあります。 このトランザクションには、100 個の insert ステートメントが含まれています。 サブスクライバーに適用されると、最初の 90 がプロセスを正しく挿入します。ただし、90 番目の insert ステートメントは失敗し、主キー違反エラー 2627 が発生します。

パラメーターを使用しない場合 (既定の -SkipErrors 動作):

既定では、トランザクション全体がロールバックされ、サブスクライブ テーブルに 100 個の新しいレコードは挿入されません。 この状況では、トランザクションをサブスクライバーに再適用できるように、レプリケーション エラーを修正する必要があります。

パラメーターを使用する場合:-SkipErrors

ディストリビューション エージェントは、ディストリビューション エージェント履歴にエラーを記録し、このエラーをスキップしてから、配布プロセスを続行します。 そのため、エラーの原因となった 90 番目の新しいレコードを除き、他の 99 個の新しいレコードがサブスクライブ テーブルに挿入されます。 サブスクライバーでエラーを手動で修正した後でも、このトランザクションはディストリビューション エージェントによって再適用されません。 そのため、この状況では、サブスクライバーに 90 番目の新しいレコードが見つからないため、データ不整合の問題が発生します。

また、SQL Server 2000 では、通常、ディストリビューション エージェントは複数のパブリケーションによって共有されるため (既定では、パブリケーション データベースとサブスクリプション データベース のペアごとに 1 つのディストリビューション エージェントがあります)、パラメーターを ディストリビューション エージェントに追加-SkipErrorsする場合も注意する必要があります。は、このエージェントがサービスを行っているすべてのパブリケーションに影響します。 SQL 2005 および SQL 2008 バージョンでは、トランザクション レプリケーションでは、パブリケーションの新規作成ウィザードで作成されたパブリケーションに対して、既定で独立したエージェントが使用されます。 ストアド プロシージャを使用して sp_addpublication 作成されたパブリケーションの場合、既定の動作は共有エージェントを使用することです。

特定のパブリケーションにパラメーターを -SkipErrors 使用するには、1 つのサブスクリプションのみをサービスする独立したエージェントを使用します。 独立したエージェントを使用するには、バージョンの手順に従います。

SQL Server 2000

  1. SQL Server Enterprise マネージャーで、パブリケーションを右クリックしProperties、[サブスクリプション オプション] タブで、[このデータベースから他のパブリケーションから独立したディストリビューション エージェントを使用する] オプションをクリックします。

    注:

    このパブリケーションにサブスクリプションを追加した後、このオプションをオンにすることはできません。

  2. パラメーターを特定の-SkipErrorsサブスクリプションのディストリビューション エージェントに追加します。

SQL Server 2005 および SQL Server 2008

  1. SQL Server管理スタジオで、[レプリケーション] に移動し、[ローカル パブリケーション] セクションでパブリケーションを右クリックし、[プロパティ] をクリックし、[サブスクリプション オプション] ページで [独立したディストリビューション エージェント] の値を False から True に変更します。

    注:

    このパブリケーションにサブスクリプションを追加した後、このオプションをオンにすることはできません。

  2. パラメーターを特定の-SkipErrorsサブスクリプションのディストリビューション エージェントに追加します。

詳細については、次のトピックを参照してください。