1

SQL Server 2005 の双方向レプリケーションに関連する問題を紹介したいと思います。私が必要なものは何?私のチームリーダーは、それぞれが異なるアプリケーションで使用される 2 つのデータベース間の双方向レプリケーションを使用して、私たちの問題の 1 つを解決したいと考えています。1 つのアプリケーションがテーブル A にレコードを作成し、その変更を 2 番目のデータベースにレプリケートしてテーブル A のコピーにする必要があります。SQL Server 2005 を実行している 1 つのサーバー上の 2 つのデータベース間で双方向のトランザクション レプリケーションを実現しようとしています。スクリプトを使用してこれをセットアップし、2 つのパブリケーションとループバック検出付きの 2 つの読み取り専用サブスクリプションを確立しました。ディストリビューション データベースが作成され、両方のデータベースでの発行が有効になります。ディストリビューターとパブリッシャーが稼働しています。レプリケートされるレコードを制御するためにいくつかのルールを使用しているため、レプリケーション中にカスタム ストアド プロシージャを呼び出す必要があります。そのため、アーティクルはカスタム ストアド プロシージャの更新、挿入、および削除を使用するように設定されています。

ここまではいいけど?

更新が両方のテーブルで同時に行われるまで、または変更がレプリケートされる前に (約 3 ~ 6 秒かかります)、すべてが正常に機能し、変更がレプリケートされます。その後、両方のレコードが異なる値になります。

UPDATE db1.dbo.TestTable SET Col = 4 WHERE ID = 1
UPDATE db2.dbo.TestTable SET Col = 5 WHERE ID = 1

結果:

db1.dbo.TestTable COL = 5

db2.dbo.TestTable COL = 4

しかし、最後の変更がレプリケーションを優先するようにしたいと考えています。私の問題を解決する方法はありますか?両方のレコードで同じ値を確保するにはどうすればよいですか? または、この種の複製よりも簡単な解決策はありますか?

私が使用しているサンプル レプリケーション スクリプトを提供できます。 ミレク
、あなたのアイデアを楽しみにしています

4

1 に答える 1

0

両方のテーブルに dateUpdated フィールドを追加すると役立つと思います。このように、レプリケーション コードでは、dateUpdated が既に格納されている値よりも大きい場合にのみ、レコードが更新されます。

その dateUpdated フィールドには、レプリケーションが実行されたときではなく、元のレコードが更新されたときの日時が格納されることは明らかです。

于 2009-10-07T10:45:58.693 に答える