0

私はインターネット上でこれを見つけようとしましたが、何も見つかりませんでした。ディストリビューションエージェントのエラーをスキップする方法はありますが、スナップショットの適用中にエラーをスキップする方法はありません。MS SQLトランザクションレプリケーション - サブスクライバでスナップショットを適用中にエラーをスキップします

私の質問:私はマルチパブリッシャーのシングルサブスクライバ設定をしています。レプリケーションの設定中に、最初のパブリッシャのスナップショットがサブスクライバに正常に配信されます。連続するPublishersのスナップショットは正常に生成されますが、それをサブスクライバに適用すると失敗します。このエラーはプライマリキー違反によるものです。スナップショットがサブスクライバに適用されている間にエラーをスキップする方法はありますか?

環境:

  • 出版社:マイクロソフトのSQL Server 2008 R2(SP2) - (X64)
  • 配給:Microsoft SQL Serverの2014(SP2)(KB3171021) - (X64)
  • 購読者: Microsoft SQL Server 2008 R2(SP3-OD)(KB3144114) -
この問題の原因となっているテーブルとレコードを特定しようとしましたが、100個以上のレコードがそれぞれ100個以上あります。

レプリケーションはクライアントの要件であるため、私はスキーマとその中のデータをあまり制御できません。

+0

スナップショットを適用するときにPKエラーが発生した場合は、スキップしないでください。なぜそれが起こっているのかを理解し、それを解決する必要があります。 –

答えて

1

設定が間違っていると思われます。これは、同じパブリッシャの複数のテーブルが同じサブスクライバテーブルに行を挿入しようとしているため、重複するキーレコードにつながります。

異なる出版社のすべてが同一の表の同じコピーを持っている場合は、それらのいずれかからのみ公開したいとします。

異なるパブリッシャがすべて同じテーブルの異なるコピーを持つ場合は、それぞれに独自のサブスクライバテーブルが必要です。

そうしないと、異なるパブリッシャが実際に異なる行に同じキーを使用しているため、奇妙なレプリケーションエラーが発生するため、多くの行が失われてしまいます。エラーをスキップするだけで、不正なデータが発生する可能性があります。クライアントの要件の1つと推測しています。私は、レプリケーションの地形や管理を簡素化するために、過去に使用している

一つのオプション:

  • 出版
  • ごとに1つの加入者データベースこれらのデータベースにユーザーへの書き込みアクセスを許可することはありません
  • グラント経由でのアクセスを読んで同義語またはビューを使用する別のデータベース

これにより、管理が簡単になります。単一のデータベースを再初期化する必要がある場合は、バックアップからリストアするオプションがあり、一般的には、サブスクライバがすべて同じデータベースを共有している場合よりも柔軟性があります。

完全版のために、私はSkipping Errors in Transactional Replicationから書籍オンラインエントリを指摘しておくべきでしょう。しかし、明らかにするには、間違ったデータで終わるので、これは間違いだと思います。それはおそらく誰でも望むものではありません。

関連する問題