2

ガイダンスを探している状況があります。

マージレプリケーションを使用してインターネット経由で同期される4つのSQL2008データベースがあります。1つのパブリッシャーと3つのサブスクライバー。

通常、データベースに入力されたレコードも同じデータベースからのみ更新され、すべてが正常に機能します。ただし、パブリッシャーでサブスクライバーで作成されたレコードが更新されることがあり、最後の同期(通常は60秒)以降にサブスクライバーで同じレコードが更新された場合、競合が発生する可能性があります。

SSMSに組み込まれている競合リゾルバーを使用しましたが、これは問題なく機能します(スキーマと基になるデータを理解しています)。しかし、私はエンドユーザー(管理者の誰か)が競合が発生したときにアラートを受け取り、彼らが理解できる方法で私からの介入なしに競合を解決できるソリューションを探していますか?

レプリケーションの競合を処理する必要がある場合、他の人は何をしましたか?

4

2 に答える 2

3

高度なマージ レプリケーションの競合の検出と解決から

デフォルトの競合リゾルバとクライアント タイプのサブスクリプションを使用する場合、パブリッシャに書き込まれた最初の変更が競合に勝ちます。デフォルトの競合リゾルバーとサーバー タイプのサブスクリプションを使用する場合、個々のサブスクライバーに優先度の値が割り当てられ、優先度が最も高いノードで行われた変更が競合に勝ちます。

この動作はデフォルトで発生し、競合が発生して競合ビューアーに表示された場合でも、手動による介入は必要ありません。Conflict Viewer は、保持期間内に発生した競合を表示し、結果を手動で変更する手段を提供するだけです。

デフォルトの解決メカニズムでは提供されない競合解決動作が必要な場合は、次のオプションがあります。

ビジネス ロジック ハンドラーまたはカスタム競合リゾルバーは、競合が発生したときに警告を発し、ビジネス要件に基づいて競合を自動的に解決する手段を提供します。

于 2013-01-08T23:35:24.097 に答える
1

あなたが行ったように、最初に組み込みの競合リゾルバーを実装しましたが、手動で解決しなければならない複数のレプリケーション競合が定期的にありました。次に、次の方法でシステムを改善することにしました。

  • 各テーブルに「最終更新日」フィールドを追加する
  • 「Microsoft SQL Server DATETIME (Later Wins) Conflict Resolver」をレプリケーション スキーマのデフォルトの競合リゾルバーとして設定する

その後、衝突は毎月わずか数件にまで減少し、次の 3 つの基本的なルールに従って、衝突ビューアー インターフェイスを介してそれらを処理するようにユーザーをトレーニングすることができました。

  • 2 つのレコードが変更されている場合は、新しい方を選択します (これらが自動的に処理されない理由はまだわかりませんが、いくつかあります)。
  • 古いもの (同時に変更されたもの) がない場合は、いずれかを選択します (非常に一般的な「偽の」競合状況)。
  • 1 つのレコードが削除され、もう 1 つのレコードが変更された場合は、削除を選択します

以上です。

于 2015-06-06T06:24:10.503 に答える