0

P、S1、S2、S3など、いくつかのデータベースがあるとします。

P (パブリッシャー) には、 S1、S2、および S3 (サブスクライバー)でレプリケート (複製および同期) する必要があるいくつかのテーブルがあります。これらのテーブルのコピーは読み取り専用になります。さらに、コピーは S1、S2、S3 などの他のテーブルによって (外部キーを介して) 参照されます。

例えば、

  • P にはテーブルP.O1P.O2があります。S1 にはS1.O1_copy、S1.O2_copy、およびS1.OTHERがあり、S1.OTHERは S1.O1_copy を参照します。

あなたの経験から、このシナリオではSQL Server トランザクション レプリケーション(私の知る限り、これはログベースのレプリケーションです) を使用しても問題ありませんか? または、トリガーベースのレプリケーションを使用する方がよいでしょうか? ただし、新しいサブスクライバー (データベース) が追加されるたびにトリガーを更新する必要があると思います。

レプリケートする必要がある P のテーブルはめったに更新されませんが、データの一貫性を確保するために、更新操作はトランザクションである必要があります (レプリカからの読み取りは、要求されたデータの最新のスナップショットを返す必要があります)。

ありがとうございました :)

4

1 に答える 1

1

これには、トランザクション レプリケーションを使用できます。私が提示する警告はすべて、サブスクライバーの初期化または再初期化に関係しています。アーティクルを追加すると、デフォルトの動作では、サブスクライバーにオブジェクトがドロップされます。レプリケートされたテーブルを指す外部キーを持つテーブルがある場合、その削除は失敗します。もちろん、それを回避することはできますが、注意が必要です。

もう 1 つ: サブスクライブしたデータベースを読み取り専用として扱うのが好きです。これにより、バックアップ要件が削減されます (つまり、データベースに何かが発生した場合、サブスクライバーのバックアップを復元するのではなく、新しいデータベースを作成して再サブスクライバーを作成します)。サブスクライバーに新しいデータを保存しているので、ここではその贅沢はありません。

于 2013-07-16T21:05:06.680 に答える