1

2つのテーブル(親レコードと子レコード)に対して継続的に実行するようにSQLServerトランザクションレプリケーションを設定しました。サブスクライバー側では、レプリケートされた両方のテーブルに挿入トリガーと更新トリガーがあります。これらのトリガーはすべて、レプリケートされたテーブルのレコードをクエリし、サブスクライバデータベースの他のテーブルのレコードを変更する同じコードを持っています。

私の質問は..これらのトリガーは同時に実行されますか?私の恐れは、一方のテーブルのトリガーが、もう一方のテーブルのトリガーによって実行される処理作業を中断することです。

4

1 に答える 1

1

トリガーは、更新を適用するレプリケーション エージェントのコンテキストで実行されます。エージェントは、構成可能な数の接続を使用します。

-SubscriptionStreams [0|1|2|...64]

シングル スレッドの使用時に存在する多くのトランザクション特性を維持しながら、変更のバッチをサブスクライバーに並列に適用するために、ディストリビューション エージェントごとに許可される接続の数です。SQL Server パブリッシャーの場合、1 ~ 64 の範囲の値がサポートされています。このパラメーターは、パブリッシャーとディストリビューターが SQL Server 2005 以降のバージョンで実行されている場合にのみサポートされます。このパラメーターはサポートされていないか、SQL Server 以外のサブスクライバーまたはピア ツー ピア サブスクリプションの場合は 0 にする必要があります。

トランザクション セマンティクスはレプリケーション エージェントによって適切に維持されるため、更新に正しいトランザクション セマンティクスがあれば、サブスクライバーで競合することはありません (パブリッシャーで競合しなかったため)。そうであれば、トランザクション境界の設計に問題があるため、設計図に戻って正しいトランザクション セマンティクスでアプリケーションを設計することにより、それに応じて解決する必要があります。

于 2011-01-27T23:49:15.217 に答える