[INF] ディストリビューション エージェントで "-SkipErrors" パラメータを使用する際の注意点

概要

Microsoft SQL Server 2000 以降には、ディストリビューション エージェントに新しく -SkipErrors パラメータが含まれています。このパラメータにより、ディストリビューション エージェントはトランザクション レプリケーションで示されたエラーをスキップし、ディストリビューション プロセスを続行できます。


以下は、『SQL Server Books Online』の 「エージェント エラーの処理」 トピックからの抜粋です。

通常のレプリケーションの処理では、スキップする必要のあるエラーはありません。トランザクション レプリケーション中にエラーをスキップする機能は、エラーが予想され、そのエラーによる影響をレプリケーションに与えないようにする必要がある、などの特異な状況で使用できます。たとえば、ログ配布中にセカンダリ パブリッシャに切り替わる場合などです。
マイクロソフトは、以下のことを十分理解した上で、慎重にこのパラメータを使用することをお勧めします。

  • エラーが示す内容

  • エラーが発生した原因

  • エラーを解決せずにスキップする必要のある理由

これらの項目の答えがわからない場合に、不適切に -SkipErrors パラメータを使用すると、パブリッシャとサブスクライバ間でデータの一貫性が損なわれる原因となることがあります。この資料では、誤って -SkipErrors パラメータを使用した場合に起こり得る問題点について説明します。

詳細

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


1 つのトランザクションに複数のコマンドが含まれる場合があります。デフォルトでは、コマンドの 1 つが失敗すると、サブスクライバでレプリケーション トランザクション全体がロール バックされます。-SkipErrors パラメータを追加して、ディストリビューション エージェントが特定のエラーをスキップすることを許可している場合は、この特定のエラーの原因となった個別のコマンドはサブスクライバに適用されませんが、同じトランザクション内の他のすべてのコマンドは適用されます。この状況では、レプリケーション トランザクションの一部分だけがサブスクライバに適用されるので、パブリッシャとサブスクライバ間でデータの一貫性が損なわれる原因になる可能性があります。





T1 という名前のサブスクライバのテーブルにレプリケートされるのを待機しているトランザクションがあるとします。このトランザクションには 100 個の挿入ステートメントが含まれています。トランザクションがサブスクライバに適用されるときに、最初の 90 個の挿入は正しく処理されますが、91 個目の挿入ステートメントが失敗し、主キー違反エラー 2627 が発生します。たとえば、T1 に挿入ユーザー トリガが存在するときにこのエラーが発生する可能性があります。その結果、T2 という名前の別のレプリケートされないテーブルのデータが変更され、そのトリガは T2 で主キー違反エラーの原因になります。


"-SkipErrors" パラメータを使用しないとき (デフォルトの動作)

デフォルトでは、トランザクション全体がロール バックされ、100 個の新しいレコードはサブスクライブしているテーブルにまったく挿入されません。この場合は、トランザクションをサブスクライバに再適用できるように、レプリケーション エラーを解決する必要があります。


"-SkipErrors" を使用するとき

ディストリビューション エージェントは、ディストリビューション エージェント ヒストリにエラーを記録し、このエラーをスキップして、ディストリビューション プロセスを続行します。そのため、エラーの原因となった 91 番目の新規レコードを除く、他の 99 個の新規レコードがサブスクライブしているテーブルに挿入されます。このトランザクションは、サブスクライバでエラーを手作業で解決した後でも、ディストリビューション エージェントによって再適用されることはありません。したがって、この場合はサブスクライバに 91 番目の新規レコードが不足し、データの一貫性の問題が発生します。


また、通常ディストリビューション エージェントが複数のパブリケーションにより共有されることを認識しておく必要があります (デフォルトでは、パブリケーション データベースとサブスクリプション データベースの組ごとに 1 つのディストリビューション エージェントが存在します)。そのため、ディストリビューション エージェント ジョブに -SkipErrors パラメータを追加すると、このエージェントがサービスを提供しているすべてのパブリケーションに影響します。


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

  1. SQL Server Enterprise Manager で、パブリケーションを右クリックし、[プロパティ] をクリックします。[サブスクリプション オプション] タブで [このデータベースからほかのパブリケーションとは無関係のディストリビューション エージェントを使用] チェック ボックスをオンにします。


    注 : このパブリケーションにサブスクリプションを 1 つでも追加した後は、このオプションをオンにできません。

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

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 327817 (最終更新日 2002-09-24) をもとに作成したものです。


ヘルプを表示

スキルを磨く
トレーニングの探索
新機能を最初に入手
Microsoft Insider に参加する

この情報は役に立ちましたか?

フィードバックをお送りいただきありがとうございます!

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×