1

SQL 2005 マージ レプリケーションを使用しているデータベースがあり、サブスクライバーに挿入されたデータがパブリッシャーには送信されませんでした。以前の 14 日間の保持期間中に発生した競合があったと思いますが、それ以上は表示されません。パブリッシャーに手動で追加できますか? アイデアや良いリンクへの誘導は大歓迎です。ありがとうございました。

4

2 に答える 2

0

現在の保持期間より前に競合が発生した場合、それを取り戻す魔法はないと思います。サブスクリプションを削除して再作成できますか(その間にデルタを手動で同期します)?おそらく最も安全な行動です。

于 2012-06-18T22:04:28.883 に答える
0

これに答える前に、次の指示は非常に危険であり、細心の注意を払って行う必要があることに注意してください. 問題のテーブルは1つのサブスクライバーにのみ書き込まれ、他の場所には書き込まれないため、このソリューションは私にとってはうまくいきます。基本的に私がしたことは:

  1. レプリケーションを一時停止します (作業中のサブスクライバーのレプリケーション ジョブを実際に無効にし、完了したら有効にしました)
  2. テーブルの ID 挿入をオンに設定します (テーブルでは自動 ID が使用されます)。
  3. テーブルをNOCHECK CONSTRAINT repl_identity_range_ (ここでは 16 進数値) に変更します。
  4. テーブルの MSmerge_ins_(ここでは 16 進数値) トリガーを無効にしました (完了したら必ず有効にしてください)!!!
  5. 行を挿入しました
  6. Indentity_Insert をオフに設定
  7. MSmerge_ins_(ここでは16進数値)トリガーを有効にしました
  8. テーブルをCHECK CONSTRAINT に変更して repl_identity_range_ (ここでは 16 進数値)

sp_help を実行すると、repl_identity_range 制約の名前を見つけることができます。Red Gates のデータ比較などのツールを使用して、確認が完了したら検証することをお勧めします。状況によっては、すべてのサブスクライバーにもデータを手動で挿入する必要がある場合があります。参考までに、エンドユーザーを中断することなく、本番データベースでこれを行う必要がありました。ご注意ください。

于 2012-06-19T15:05:56.600 に答える