SQL Serverトランザクションレプリケーションへの新規アーティクル追加とバックアップ初期化環境での再初期化手順
以前のブログ記事では、データベースバックアップを利用して大規模データベースのレプリケーションを初期化する方法について解説しました。本記事では、バックアップを使って構成済みの既存のSQL Serverトランザクションレプリケーションに対して、新しいアーティクルを追加する方法と、サブスクライバーを再初期化する方法について詳しく説明します。
はじめに
通常、パブリケーションに新しいアーティクルを追加したり、サブスクライバーを再初期化したりする場合、スナップショットエージェントを使用するのが一般的です。しかし、このシナリオでは、すでにデータベースバックアップを使ってトランザクションレプリケーションが構成されているため、スナップショットエージェントに頼らない手順が必要になります。
本記事で扱う内容は以下の2つです。
- バックアップで初期化された既存のパブリケーションに、新しいアーティクルを追加する。
- バックアップで初期化済みのサブスクライバーを再初期化する。
シナリオ1:バックアップで初期化された既存のパブリケーションに新しいアーティクルを追加する方法
今回のシナリオでは、次のようにバックアップファイルを使ってトランザクションレプリケーションがすでに構成されているものとします。
- パブリッシャー + ディストリビューター:Node1
- サブスクライバー:Node2
- パブリッシャーデータベース:ABC_Pub
- サブスクライバーデータベース:ABC_Sub
- パブリケーション:ABC_Pub_Bkp
- サブスクリプション:ABC_Sub_Bkp
- アーティクル:Cars、Bikes
既存のパブリケーションに新しいアーティクルを追加するには、パブリッシャーとサブスクライバー間でデータを手動で同期します。具体的な手順は以下の通りです。
処理ステップの概要
- インポート/エクスポート機能などを使って、新しいアーティクルのデータをパブリッシャーからサブスクライバーへ同期する。
- ログリーダーエージェントとディストリビューションエージェントのジョブを停止する。
- GUIから新しいアーティクルをパブリケーションに追加し、構成を完了させる。
- ログリーダーおよびディストリビューションエージェントのジョブを有効化して開始する。
- パブリッシャー側に新しいデータを挿入する。
- サブスクライバー側でデータを検証する。
ステップ1:インポート/エクスポート機能で新しいアーティクルのデータを同期する
既存のレプリケーションには「Cars」と「Bikes」の2つのアーティクルが含まれています。ここでは、パブリッシャーデータベースにさらに2つのテーブルを作成し、後ほどそれらをレプリケーションに追加します。
まず、パブリッシャーデータベースに2つの新しいテーブル(CountryとCustomer)を作成し、それぞれ数行のデータを挿入します。次に、両テーブルのCREATE定義をスクリプト化し、サブスクライバーデータベース上で実行して同じテーブルを作成します。
その後、インポート/エクスポートウィザードを使って、パブリッシャーとサブスクライバー間でデータを同期します。手順は以下の通りです。
- パブリッシャーデータベースを右クリック → 「データのエクスポート」を選択 → ウィザードに従って必要な情報を入力します。
ソースサーバー(パブリッシャー)とデータベース名を選択:
次の画面で、コピー先サーバー(サブスクライバー)とデータベース名を選択します。
転送対象のテーブル名を選択して「次へ」をクリック:
次のステップで、エクスポートが正常に完了したことを確認:
データの検証:
ご覧の通り、パブリッシャーとサブスクライバー間でデータが正しく同期されています。
ステップ2:ログリーダーおよびディストリビューションエージェントのジョブを停止する
アーティクルに対して何らかの操作を行う前に、レプリケーションエージェントを停止しておくことがベストプラクティスとして推奨されます。
ステップ3:GUIから新しいアーティクルをパブリケーションに追加する
レプリケーションフォルダー配下のパブリケーションを右クリックし、「プロパティ」を選択します。「アーティクル」ページに移動し、「一覧にはチェックされたアーティクルのみ表示する」のチェックを外します。そして「パブリッシュするオブジェクト」の一覧から、今回の例ではCountryとCustomerの2つの新しいテーブルを選択し、「OK」をクリックして構成を完了させます。
ステップ4:ログリーダーおよびディストリビューションエージェントのジョブを有効化して開始する
エージェントを有効化して開始すると、ログリーダーが新しく追加されたレコードをキャプチャし、ディストリビューションエージェントがそれらをサブスクライバーへレプリケートします。続いて、データの検証を行います。
ステップ5:パブリッシャー側に新しいデータを挿入する
ここで、両方のパブリッシャーテーブルに対して、それぞれ5件ずつ新しいレコードを追加します。
ステップ6:サブスクライバー側でデータを検証する
検証の結果、両テーブルとも5件の新しいレコードが追加され(合計10行)、それらがサブスクライバーにも正しくレプリケートされていることが確認できます。
レプリケーションの正常性の状態:
シナリオ2:バックアップで初期化済みのサブスクライバーを再初期化する方法
次に、2つ目のシナリオとして、レプリケーションの同期問題を解決する最後の手段となる「サブスクライバーの再初期化」について説明します。
今回はバックアップを使ってレプリケーションを初期化しているため、以下の手順でサブスクライバーを再初期化します。
- ログリーダー、ディストリビューションエージェント、およびディストリビューションクリーンアップの各ジョブを停止する。
- パブリッシャーデータベースの完全バックアップを取得し、トランザクションログ(T-Log)バックアップジョブを無効化する。
- REPLACEオプションを指定して、サブスクライバーデータベース上でバックアップを復元する。
- データを検証する。
- sp_addsubscriptionを実行する。
- ログリーダーおよびディストリビューションジョブを有効化し、パブリッシャーデータベースに新しいレコードを挿入して、サブスクライバー側でデータを検証する。
ステップ1:ログリーダーおよびディストリビューションエージェントのジョブを停止する
アーティクルに対して操作を行う前に、レプリケーションエージェントを停止しておくことが推奨されます。
ステップ2:パブリッシャーデータベースの完全バックアップを取得し、T-Logバックアップジョブを無効化する
パブリッシャーサーバー上のデータベースABC_Pubの完全バックアップを実行します。また、トランザクションログバックアップジョブが設定されている場合は、無効化しておきます。
ステップ3:REPLACEオプション付きでサブスクライバーデータベースを復元する
REPLACEオプションを指定してサブスクライバーデータベースABC_Subを復元:
ステップ4:パブリッシャーとサブスクライバー間でデータを検証する
データを検証すると、次のスクリーンショットの通り、CarsテーブルとBikesテーブルはそれぞれ5件、CountryテーブルとCustomerテーブルはそれぞれ10件のレコードが存在することが確認できます。
ステップ5:sp_addsubscriptionを実行する
必要なパラメーターを指定して、以下のストアドプロシージャを実行し、サブスクライバーを再初期化します。
ステップ6:ジョブを有効化し、新しいレコードを挿入してデータを検証する
レプリケーションエージェントのジョブを有効化して開始:
レプリケート対象の2つのテーブルに、さらに5件ずつレコードを挿入:
サブスクライバーデータベース上でデータを検証:
検証が完了し、新しく追加された5件のレコードがサブスクライバーに正しくレプリケートされ、すべてのテーブルがそれぞれ10件のレコードを持っていることが確認できます。
レプリケーションのヘルスチェック:
まとめ
本記事では、バックアップで初期化されたレプリケーション環境において、新しいアーティクルを追加する方法と、サブスクライバーを再初期化する方法という2つのシナリオを紹介しました。スナップショットエージェントを使わずにこれらの運用タスクを実行したい場合の参考になれば幸いです。
コメントやご質問がある場合は、フィードバックタブをご利用ください。また、私たちとの対話も歓迎します。
-
SQL Serverクエリストアとは?設定方法から実行プランの強制まで徹底解説
Microsoft® SQL Server® のクエリストア(Query Store)は、その名のとおり、データベース上で実行されたクエリの履歴、ランタイム実行統計、実行プランを「保管庫」のように記録してくれる機能です。収集されたデータはディスク上に保存されるため、トラブルシューティングが必要になったときにいつでも参照でき、SQL Server を再起動してもデータは失われません。SQL Server 2016 で導入され、それ以降のすべてのエディションで利用可能なクエリストアを活用すれば、クエリプランの変更に起因するパフォーマンス問題の切り分けが格段に容易になります。 はじめに パフォーマン
-
PostgreSQLレプリケーション完全ガイド:種類・仕組みからストリーミングレプリケーションの構築手順まで
レプリケーションとは、あるデータベースサーバー(ソース)から別のサーバー(レプリカ)へデータを複製する仕組みです。高可用性の実現や災害復旧(DR)対策を支える、PostgreSQLの強力な機能の一つです。はじめにレプリカサーバーは、テストやレポーティング用途にも活用でき、本番のOLTP(オンライントランザクション処理)データベースへの負荷を軽減できます。この記事では、PostgreSQLにおけるレプリケーションの種類を整理したうえで、ストリーミングレプリケーションを実際に構築するための手順を解説します。レプリケーションの詳細まずは、PostgreSQLのレプリケーションモード(同期/非同期)、