継続的な更新が行われる実稼働データベースがあり、トランザクション レプリケーションを使用してこれを別のサーバーに公開するように構成しました。
トランザクション レプリケーションを構成するときは、次の操作を実行しています。
- ソースデータベースへのアクセスを無効にする
- ソースDBをバックアップし、サブスクリプションサーバーに復元する
- レプリケーションを構成する
- アプリへのDBアクセスを再度有効にする
このアプローチの問題は、ダウンタイムをスケジュールすることであり、実行するさまざまな時間指定のタスクをすべて一時停止し、このデータベースに依存するさまざまなアプリケーションへのアクセスをシャットダウンする必要があります。
パブリッシング データベースへのアクセスを無効にせずにトランザクション レプリケーションを構成するだけで、サブスクライバー データベースが正しくキャッチアップされるでしょうか。つまり、すべての DML ステートメントがパブリッシャーのキューに入れられ、サブスクライバーの準備が整うとすぐに取り出されて実行されるのでしょうか。
答え1
簡単な答えは「いいえ」です。システムへのアクセスを無効にする必要はありません。その理由と仕組みは次のとおりです。レプリケーションを設定すると、パブリッシャーはパブリケーションを作成した瞬間にデータのスナップショットを作成します。また、トランザクション レプリケーションと同時に実行されているログ リーダーもあり、最後のスナップショットが作成されてからのすべてのトランザクションをキャッチします。つまり、サブスクライバーが作成されるとき、基本的には 2 つの手順で処理されます。
ステップ 1: スナップショットがサブスクライバーに適用され、サブスクライバー データベースにスキーマとデータが作成されます。
ステップ 2: 次に、スナップショットの時点以降のトランザクションがサブスクライバーに適用され、サブスクライバー データベースが最新のデータで更新されます。
つまり、基本的には、新しいサブスクライバーを作成するために行っている他のすべての作業を行う必要はありません。
他に何か必要なことがあればお知らせください。
ありがとう!
-VM