チュートリアル: 2 つの常時接続サーバー間のレプリケーション (トランザクション) を構成する

適用対象: SQL Server

トランザクション レプリケーションは、常時接続サーバー間でデータを移動する際の問題を解決する有効なソリューションです。 レプリケーション ウィザードを使用すると、レプリケーション トポロジを簡単に設定し、管理できます。

このチュートリアルでは、常時接続サーバー間にトランザクション レプリケーション トポロジを設定する方法を学習します。 トランザクション レプリケーションのしくみについては、トランザクション レプリケーションの概要に関するページを参照してください。

学習する内容

このチュートリアルでは、トランザクション レプリケーションによって 1 つのデータベースから別のデータベースにデータをパブリッシュする方法について説明します。

このチュートリアルでは、次の内容を学習します。

  • トランザクション レプリケーションを使用してパブリッシャーを作成する。
  • トランザクション パブリッシャーのサブスクライバーを作成する。
  • サブスクリプションを検証し、待機時間を計測する。

前提条件

このチュートリアルは、データベースの基本的な操作は理解しているが、レプリケーション機能についてはあまり詳しくないユーザーを対象としています。 このチュートリアルを開始する前に、「チュートリアル: レプリケーション用の SQL Server の準備」を完了しておく必要があります。

このチュートリアルを実行するには、SQL Server、SQL Server Management Studio (SSMS)、および AdventureWorks データベースが必要です。

  • パブリッシャー サーバー側 (レプリケーション元) に以下をインストールします。

    • SQL Server Express または SQL Server Compact を除く、SQL Server の任意のエディション。 除外されているエディションはレプリケーションのパブリッシャーとして使用できません。
    • AdventureWorks2022 サンプル データベース。 セキュリティ強化のため、既定ではサンプル データベースがインストールされません。
  • サブスクライバー サーバー (レプリケーション先) に、SQL Server Compact を除く SQL Server の任意のエディションをインストールします。 SQL Server Compact は、トランザクション レプリケーションのサブスクライバーとして使用できません。

  • SQL Server Management Studio をインストールします。

  • SQL Server 2017 Developer Edition をインストールします。

  • AdventureWorks サンプル データベースをダウンロードします。 SSMS でデータベースを復元する方法の詳細については、データベースの復元に関するページを参照してください。

Note

3 つ以上離れたバージョンの SQL Server インスタンスでは、レプリケーションはサポートされていません。

SQL Server Management Studio では、固定サーバー ロール sysadmin のメンバーとしてログインし、パブリッシャーとサブスクライバーに接続する必要があります。 このロールの詳細については、「サーバー レベルのロール」を参照してください。

このチュートリアルの推定所要時間: 60 分

トランザクション レプリケーションのパブリッシャーを構成する

このセクションでは、SQL Server Management Studio を使用してトランザクション パブリケーションを作成し、AdventureWorks2022 サンプル データベースの Product テーブルからフィルター選択したサブセットをパブリッシュします。 また、ディストリビューション エージェントにより使用される SQL Server ログインをパブリケーション アクセス リスト (PAL) に追加します。

パブリケーションを作成し、アーティクルを定義する

  1. SQL Server Management Studio でパブリッシャーに接続し、サーバー ノードを展開します。

  2. [SQL Server エージェント] を右クリックし、[開始] を選択します。 パブリケーションを作成する前に、SQL Server エージェントが実行されている必要があります。 この手順でエージェントが起動しない場合は、SQL Server 構成マネージャーから手動で起動する必要があります。

  3. [レプリケーション] フォルダーを展開し、[ローカル パブリケーション] フォルダーを右クリックして、[新しいパブリケーション] を選択します。 この手順で、パブリケーションの新規作成ウィザードが開始されます。

    パブリケーションの新規作成ウィザードを開始するための選択

  4. [パブリケーション データベース] ページで [AdventureWorks2022] を選択し、[次へ] を選択します。

  5. [パブリケーションの種類] ページで [トランザクション パブリケーション] を選択し、[次へ] を選択します。

    パブリケーションの種類が選択された [パブリケーションの種類] ページ

  6. [アーティクル] ページで、[テーブル] ノードを展開し、[Product] チェック ボックスをオンにします。 次に、[Product] を展開し、[ListPrice][StandardCost] の横のチェック ボックスをオフにします。 [次へ] を選択します。

    パブリッシュするアーティクルが選択された [アーティクル] ページ

  7. [テーブル行のフィルター選択] ページで、[追加] を選択します。

  8. [フィルターの追加] ダイアログ ボックスで [SafetyStockLevel] 列を選択します。 右矢印を選択して、フィルター選択クエリの Filter ステートメントの WHERE 句にこの列を追加します。 次に、WHERE 句の修飾子に次のように手動で入力します。

    WHERE [SafetyStockLevel] < 500  
    

    [テーブル行のフィルター選択] と [フィルターの追加] ダイアログ ボックス

  9. [OK] を選択し、 [次へ] を選択します。

  10. [スナップショットをすぐに作成し、サブスクリプションを初期化できるようにそのスナップショットを保持する] チェック ボックスをオンにして、[次へ] を選択します。

    チェック ボックスがオンの [スナップショット エージェント] ページ

  11. [エージェント セキュリティ] ページで、 [スナップショット エージェントのセキュリティ設定を使用する] チェック ボックスをオフにします。

    スナップショット エージェントの [セキュリティ設定] を選択します。 [プロセス アカウント] ボックスに「<Publisher_Machine_Name>\repl_snapshot」と入力し、このアカウントのパスワードを入力して [OK] を選択します。

    [エージェント セキュリティ] ページと [スナップショット エージェントのセキュリティ] ダイアログ ボックス

  12. 同様に、ログ リーダー エージェントのプロセス アカウントとして <Publisher_Machine_Name>\repl_logreader を設定します。 [OK] をクリックします。

    [ログ リーダー エージェントのセキュリティ] ダイアログ ボックスと [エージェント セキュリティ] ページ

  13. [ウィザードの完了] ページで、[パブリケーション名] ボックスに「AdvWorksProductTrans」と入力し、[完了] を選択します。

    パブリケーション名が表示された [ウィザードの完了] ページ

  14. パブリケーションが作成されたら、[閉じる] を選択してウィザードを閉じます。

パブリケーションを作成しようとしたときに、SQL Server エージェントが実行されていないと、次のエラーが発生する可能性があります。 このエラーは、パブリケーションは正常に作成されたが、スナップショット エージェントが起動できなかったことを示しています。 これが発生した場合は、SQL Server エージェントを起動してから、手動でスナップショット エージェントを起動する必要があります。 次のセクションで手順について説明します。

スナップショット エージェントが起動に失敗したという警告

スナップショット生成の状態を表示する

  1. SQL Server Management Studio でパブリッシャーに接続して、サーバー ノードを展開し、[レプリケーション] フォルダーを展開します。

  2. [ローカル パブリケーション] フォルダーを展開し、[AdvWorksProductTrans] を右クリックして、[スナップショット エージェントの状態の表示] を選択します。
    スナップショット エージェントの状態を表示することができるショートカット メニューのコマンド

  3. パブリケーションのスナップショット エージェントの現在の状態が表示されます。 スナップショット ジョブが正常に終了していることを確認してから次のセクションに進みます。

パブリケーションを作成したときに、SQL Server エージェントが実行されていないと、パブリケーションのスナップショット エージェントの状態を確認したときに、スナップショット エージェントの '実行履歴がない' と表示されます。 その場合は、[開始] を選択して、スナップショット エージェントを起動します。

[開始] ボタンと、スナップショット エージェントが実行されたことを示す状態の変更メッセージ

ここでエラーが発生する場合は、スナップショット エージェント エラーのトラブルシューティングに関するページを参照してください。

ディストリビューション エージェントのログインを PAL に追加する

  1. SQL Server Management Studio でパブリッシャーに接続して、サーバー ノードを展開し、[レプリケーション] フォルダーを展開します。

  2. [ローカル パブリケーション] フォルダーを展開し、[AdvWorksProductTrans] パブリケーションを右クリックして、[プロパティ] を選択します。 [パブリケーションのプロパティ] ダイアログ ボックスが表示されます。

    a. [パブリケーション アクセス リスト] ページを選択して、[追加] を選択します。
    b. [パブリケーション アクセスの追加] ダイアログ ボックスで、<Publisher_Machine_Name>\repl_distribution を選択し、[OK] を選択します。

    パブリケーション アクセス リストにログインを追加する選択

詳細については、「レプリケーションのプログラミング概念」を参照してください。

トランザクション パブリケーションへのサブスクリプションの作成

このセクションでは、前の手順で作成したパブリケーションにサブスクライバーを追加します。 このチュートリアルでは、リモート サブスクライバー (NODE2\SQL2016) を使用しますが、ローカルでパブリッシャーにサブスクリプションを追加することもできます。

サブスクリプションを作成する

  1. SQL Server Management Studio でパブリッシャーに接続して、サーバー ノードを展開し、[レプリケーション] フォルダーを展開します。

  2. [ローカル パブリケーション] フォルダーを展開し、[AdvWorksProductTrans] パブリケーションを右クリックして、[新しいサブスクリプション] を選択します。 サブスクリプションの新規作成ウィザードが起動します。

    サブスクリプションの新規作成ウィザードを起動する選択

  3. [パブリケーション] ページで [AdvWorksProductTrans] を選択し、[次へ] を選択します。

    パブリケーションが選択された [パブリケーション] ページ

  4. [ディストリビューション エージェントの場所] ページで、[ディストリビューターですべてのエージェントを実行する] を選択し、[次へ] を選択します。 プル サブスクリプションとプッシュ サブスクリプションの詳細については、「パブリケーションのサブスクライブ」を参照してください。

    ディストリビューターですべてのエージェントを実行するオプションが選択された [ディストリビューション エージェントの場所] ページ

  5. [サブスクライバー] ページでサブスクライバー インスタンスの名前が表示されない場合は、[サブスクライバーの追加] を選択し、ドロップダウン リストから [SQL Server サブスクライバーの追加] を選択します。 この手順で、[サーバーへの接続] ダイアログ ボックスが開きます。 サブスクライバー インスタンス名を入力し、[接続] を選択します。

    サブスクライバーが追加されたら、そのサブスクライバーのインスタンス名の横にあるチェック ボックスをオンにします。 次に、[サブスクリプション データベース] の下で [新しいデータベース] を選択します。

    サブスクライバー サーバーの追加が選択された [サブスクライバー] ページ

  6. [新規データベース] ダイアログ ボックスが表示されます。 [データベース名] ボックスに「ProductReplica」と入力し、[OK][次へ] の順に選択します。

    サブスクリプション データベースの名前を入力する

  7. [ディストリビューション エージェント セキュリティ] ページで、省略記号 (...) ボタンを選択します。 [プロセス アカウント] ボックスに「<Publisher_Machine_Name>\repl_distribution」と入力し、次に、このアカウントのパスワードを入力して、[OK][次へ] の順に選択します。

    [ディストリビューション エージェント セキュリティ] ダイアログ ボックスのディストリビューション アカウント情報

  8. 以降のページでは既定値をそのまま採用し、[完了] を選択してウィザードを終了します。

サブスクライバー側のデータベース権限を設定する

  1. SQL Server Management Studio でサブスクライバーに接続します。 [セキュリティ] を展開して [ログイン] を右クリックし、[新しいログイン] をクリックします。

    a. [全般] ページの [ログイン名] の下で [検索] を選択し、<Subscriber_Machine_Name>\repl_distribution のログインを追加します。

    b. [ユーザー マッピング] ページで、ProductReplica データベースにログイン db_owner メンバーシップを付与します。

    サブスクライバーのログインを構成する選択

  2. [OK] を選択して、[新しいログイン] ダイアログ ボックスを閉じます。

サブスクリプションの同期状態を表示する

  1. SQL Server Management Studio でパブリッシャーに接続します。 サーバー ノードを展開し、[レプリケーション] フォルダーを展開します。

  2. [ローカル パブリケーション] フォルダーで、AdvWorksProductTrans パブリケーションを展開し、ProductReplica データベースのサブスクリプションを右クリックして、[同期の状態の表示] を選択します。 サブスクリプションの現在の同期状態が表示されます。

    [同期の状態の表示] ダイアログ ボックスを開く選択

  3. [AdvWorksProductTrans] の下にサブスクリプションが表示されない場合は、F5 キーを押して一覧を更新します。

詳細については、以下を参照してください:

レプリケーションの待機時間を計測する

このセクションでは、トレーサー トークンを使って、変更内容がサブスクライバーにレプリケートされているかどうかを確認し、待機時間を決定します。 待機時間は、パブリッシャー側で行われた変更がサブスクライバーに表示されるのにかかる時間です。

  1. SQL Server Management Studio でパブリッシャーに接続します。 サーバー ノードを展開して [レプリケーション] フォルダーを右クリックし、[レプリケーション モニターの起動] を選択します。

    ショートカット メニューの [レプリケーション モニターの起動] コマンド

  2. 左ペインでパブリッシャー グループを展開し、パブリッシャー インスタンスを展開して、[AdvWorksProductTrans] パブリケーションを選択します。

    a. [トレーサー トークン] タブを選択します。
    b. [トレーサーの挿入] を選択します。
    c. [パブリッシャーからディストリビューターまで]列、 [ディストリビューターからサブスクライバーまで]列、および [合計待機時間]列で、トレーサー トークンの経過時間を表示します。 [保留中] と表示された場合は、トークンが特定のポイントに到達していないことを示します。

    トレーサー トークンの情報

詳細については、以下を参照してください:

次のステップ