web-dev-qa-db-ja.com

「公開用の初期スナップショットはまだ利用できません。」と表示されるのはなぜですか?

更新可能なサブスクリプションでトランザクションレプリケーションを使用しています。 1つのパブリッシャー、1つのサブスクライバー。

2つの異なるオフィスの人々が一意の制約に違反するデータを入力したため、SQLレプリケーションは3/6の午前10時に制約エラーを検出し始めました。完全に期待されています。

ただし、3/6の12:08 PMに、SQLレプリケーションはそのエラーの報告を停止し、代わりに次のように述べました。

「パブリケーション「TheDB」の初期スナップショットはまだ使用できません。」

レプリケーションの再試行を停止し、代わりにこのエラーをスローし始めるのはなぜですか?次に、スナップショットを再生成する必要があります。

  • 現在、DBのバックアップまたは復元は実行されていません
  • スナップショットは、レプリケーションが最初に設定された数か月前のサブスクライバーで正常に適用されました。
  • ログに3/6の12:07からのメッセージがあります

[000]ジョブCOTOPSVR\TheDB-TheDB-COTCPSVR\DB-3(ユーザーCTOB\Administratorから)を実行する要求は、ジョブがユーザーsaによる要求から既に実行されているため拒否されました

  • 誰も手動でジョブを開始したり、午後12時6分に何もしなかった。

何か案は?私はこれを修正する方法を知っています...これが再発しないようにしたいと思います。

7
Jeff

基本的なトランザクションレプリケーションには、さまざまなエージェントがあります。

参考になるMSDN記事

データとスキーマの初期スナップショットを担当するSnapshot Agentがあります。これは定期的に実行するようにスケジュールすることができます(私は12時間ごとにスケジュールされていました)。

Log Reader Agentがあり、トランザクションログを読み取り、レプリケーション用にマークされたログをディストリビューターに送信します。

最後に、Distribution Agentがあり、スナップショットとトランザクションをディストリビュータからサブスクライバに移動します。

エラーは、初期スナップショット(および/または後続のスナップショット)がまだ適用されていないため、レプリケーション用にマークされたトランザクションをサブスクライバーに適用できないことを示しています。このスナップショットが適用されない理由をトラブルシューティングする必要があります。 couldが発生する理由はたくさんあります。

Distribution Agentは、スナップショットファイルを含むディレクトリへのアクセス許可を失っていますか?

subscriberで、スナップショットの適用が遅くなっているブロッキングアクティビティがありますか?

distributorおよび/またはsubscriberをオーバーロードして、すべての記事を大規模な公開データベースをすべてのサブスクライバーに同時に配信しますか?

4
swasheck

サブスクリプションがそのエラーでスタックしていて、実際には新しいトランザクションを複製していないと思います。その時点で、サブスクリプションは、そのパブリケーションに定義されたトランザクション保持期間を過ぎて遅れました。サブスクリプションは、ディストリビューションデータベースから削除されているため、必要なレプリケートされたトランザクションが利用できなくなったことを認識します。

これが発生すると、サブスクリプションをスナップショットで再初期化する必要があることを示します。

1
Ian Chamberland