NOT FOR REPLICATION を使用した制約、ID、およびトリガの制御

レプリケーション トポロジ内でのユーザーの実行内容が、エージェントによる実行内容とは異なることが望ましい場合があります。たとえば、パブリッシャでユーザーが行を挿入し、その挿入がテーブルの CHECK 制約を満たす場合は、サブスクライバでレプリケーション エージェントによって行が挿入される際に、同じ制約を適用する必要がない場合があります。NOT FOR REPLICATION オプションを使用すると、レプリケーション エージェントが操作を実行したときに、以下のデータベース オブジェクトでは異なる処理をするように指定できます。

  • 外部キー制約

    外部キー制約は、レプリケーション エージェントが挿入、更新、または削除操作を実行する際に適用されません。

  • CHECK 制約

    CHECK 制約は、レプリケーション エージェントが挿入、更新、または削除操作を実行する際に適用されません。

  • ID 列

    ID 列の値は、レプリケーション エージェントが挿入操作を実行する際に増分されません。

  • トリガ

    トリガは、レプリケーション エージェントが挿入、更新、または削除操作を実行する際に実行されません。

テーブルのパブリッシュ時には、サブスクリプション データベース内にオブジェクトをどのように作成するかがスキーマ オプションによって制御されます。既定のスキーマ オプションは、パブリケーションによって異なります。サブスクリプション データベース内に外部キー制約と CHECK 制約が作成されるように指定するオプションを設定すると、NOT FOR REPLICATION オプションが設定されます。NOT FOR REPLICATION オプションは、更新可能なサブスクリプションをサポートするマージ パブリケーションとトランザクション パブリケーションで ID 列をレプリケートするときにも設定されます。ID 列のレプリケートの詳細については、「ID 列のレプリケート」を参照してください。

ほとんどの場合、既定の設定は適切ですが、アプリケーションが別の動作を必要としている場合は設定を変更できます。主に検討が必要になるのは、トリガです。たとえば、NOT FOR REPLICATION オプションが設定された挿入トリガを定義した場合は、ユーザーからのすべての挿入はトリガを起動しますが、レプリケーション エージェントからの挿入はトリガを起動しません。データを追跡テーブルに挿入するトリガについて考えてみましょう。ユーザーが最初に行を挿入した場合、トリガが起動され追跡テーブルに行が入力されるのは、適切な動作です。ただし、データがサブスクライバにレプリケートされた場合は、不要な行が追跡テーブルに挿入されるのを防ぐために、トリガが起動されないようにする必要があります。

NOT FOR REPLICATION オプションを指定するには

NOT FOR REPLICATION オプションは、以下の方法で指定できます。