更新可能なサブスクリプションでトランザクションレプリケーションを使用しています。 1つのパブリッシャー、1つのサブスクライバー。
2つの異なるオフィスの人々が一意の制約に違反するデータを入力したため、SQLレプリケーションは3/6の午前10時に制約エラーを検出し始めました。完全に期待されています。
ただし、3/6の12:08 PMに、SQLレプリケーションはそのエラーの報告を停止し、代わりに次のように述べました。
「パブリケーション「TheDB」の初期スナップショットはまだ使用できません。」
レプリケーションの再試行を停止し、代わりにこのエラーをスローし始めるのはなぜですか?次に、スナップショットを再生成する必要があります。
[000]ジョブCOTOPSVR\TheDB-TheDB-COTCPSVR\DB-3(ユーザーCTOB\Administratorから)を実行する要求は、ジョブがユーザーsaによる要求から既に実行されているため拒否されました
何か案は?私はこれを修正する方法を知っています...これが再発しないようにしたいと思います。
基本的なトランザクションレプリケーションには、さまざまなエージェントがあります。
データとスキーマの初期スナップショットを担当するSnapshot Agentがあります。これは定期的に実行するようにスケジュールすることができます(私は12時間ごとにスケジュールされていました)。
Log Reader Agentがあり、トランザクションログを読み取り、レプリケーション用にマークされたログをディストリビューターに送信します。
最後に、Distribution Agentがあり、スナップショットとトランザクションをディストリビュータからサブスクライバに移動します。
エラーは、初期スナップショット(および/または後続のスナップショット)がまだ適用されていないため、レプリケーション用にマークされたトランザクションをサブスクライバーに適用できないことを示しています。このスナップショットが適用されない理由をトラブルシューティングする必要があります。 couldが発生する理由はたくさんあります。
Distribution Agentは、スナップショットファイルを含むディレクトリへのアクセス許可を失っていますか?
subscriberで、スナップショットの適用が遅くなっているブロッキングアクティビティがありますか?
distributorおよび/またはsubscriberをオーバーロードして、すべての記事を大規模な公開データベースをすべてのサブスクライバーに同時に配信しますか?
サブスクリプションがそのエラーでスタックしていて、実際には新しいトランザクションを複製していないと思います。その時点で、サブスクリプションは、そのパブリケーションに定義されたトランザクション保持期間を過ぎて遅れました。サブスクリプションは、ディストリビューションデータベースから削除されているため、必要なレプリケートされたトランザクションが利用できなくなったことを認識します。
これが発生すると、サブスクリプションをスナップショットで再初期化する必要があることを示します。