SQL 2005 マージ レプリケーションを使用しているデータベースがあり、サブスクライバーに挿入されたデータがパブリッシャーには送信されませんでした。以前の 14 日間の保持期間中に発生した競合があったと思いますが、それ以上は表示されません。パブリッシャーに手動で追加できますか? アイデアや良いリンクへの誘導は大歓迎です。ありがとうございました。
質問する
866 次
2 に答える
0
現在の保持期間より前に競合が発生した場合、それを取り戻す魔法はないと思います。サブスクリプションを削除して再作成できますか(その間にデルタを手動で同期します)?おそらく最も安全な行動です。
于 2012-06-18T22:04:28.883 に答える
0
これに答える前に、次の指示は非常に危険であり、細心の注意を払って行う必要があることに注意してください. 問題のテーブルは1つのサブスクライバーにのみ書き込まれ、他の場所には書き込まれないため、このソリューションは私にとってはうまくいきます。基本的に私がしたことは:
- レプリケーションを一時停止します (作業中のサブスクライバーのレプリケーション ジョブを実際に無効にし、完了したら有効にしました)
- テーブルの ID 挿入をオンに設定します (テーブルでは自動 ID が使用されます)。
- テーブルをNOCHECK CONSTRAINT repl_identity_range_ (ここでは 16 進数値) に変更します。
- テーブルの MSmerge_ins_(ここでは 16 進数値) トリガーを無効にしました (完了したら必ず有効にしてください)!!!
- 行を挿入しました
- Indentity_Insert をオフに設定
- MSmerge_ins_(ここでは16進数値)トリガーを有効にしました
- テーブルをCHECK CONSTRAINT に変更して repl_identity_range_ (ここでは 16 進数値)
sp_help を実行すると、repl_identity_range 制約の名前を見つけることができます。Red Gates のデータ比較などのツールを使用して、確認が完了したら検証することをお勧めします。状況によっては、すべてのサブスクライバーにもデータを手動で挿入する必要がある場合があります。参考までに、エンドユーザーを中断することなく、本番データベースでこれを行う必要がありました。ご注意ください。
于 2012-06-19T15:05:56.600 に答える