MS SQL Server のレプリケーションの設定方法
Microsoft SQL Server は、Windows Server オペレーティングシステムにインストールできるデータベース管理ソフトウェアです。データベースはあらゆる業界の企業で利用されており、多くのソフトウェアソリューションでは、集中型および分散型のデータベースが活用されています。データベースの可用性とデータの一貫性はビジネスにとって極めて重要であるため、データベースのバックアップとレプリケーションは不可欠です。
ここでは、SQL Server のレプリケーションの種類、SQL Server におけるレプリケーションの仕組み、および SQL Server レプリケーションの実行方法について解説します。
SQL Serverのレプリケーションとは?
MS SQL Server のレプリケーションとは、特定のデータベースオブジェクトを含め、あるデータベースから別のデータベースへデータをコピーし、ソースデータベースとターゲットデータベース間でこのデータの同期化されたコピーを維持するプロセスです。SQL Server のレプリケーションを使用すると、プライマリデータベースと完全に同一のコピーを作成し、データの整合性と完全性を維持しながら、2つのデータベース間の変更を同期させることができます。
MS SQL Serverのレプリケーションで使用される用語
MS SQL Serverのレプリケーションの設定方法について詳しく説明する前に、まずは主な用語とレプリケーションモデルについて簡単に確認しておきましょう。
記事 テーブル、プロシージャ、関数、ビューなど、レプリケーションの対象となる基本単位です。フィルターを使用することで、記事の垂直方向または水平方向のスケーリングが可能です。同じオブジェクトに対して複数の記事を作成することができます。
出版物 これは、記事の論理的な集合です。これは、レプリケーションの対象として指定されたデータベースからのエンティティの最終セットです。
フィルター これは、記事に対する一連の条件です。MS SQL Serverのレプリケーションでは、フィルタを使用してレプリケーション対象となるエンティティをカスタマイズすることができ、その結果、トラフィックや冗長性を低減し、データベースレプリカに保存されるデータ量を削減できます。たとえば、フィルタを使用して最も重要なテーブルやフィールドのみを選択し、そのデータのみをレプリケートすることができます。
エージェント これらは、リレーショナルデータベース管理システムのバックグラウンドサービスとして機能するMS SQL Serverのコンポーネントであり、MS SQLデータベースのバックアップやレプリケーションなどのジョブの自動実行をスケジュールするために使用されます。エージェントには、スナップショット・エージェント、ログ・リーダー・エージェント、ディストリビューション・エージェント、マージ・エージェント、キュー・リーダー・エージェントの5種類があります。
メタデータ これは、データベースのエンティティを記述するために使用されるデータです。MS SQL Server インスタンス、データベース インスタンス、およびデータベース エンティティに関する情報を取得できる、幅広い組み込みのメタデータ関数が用意されています。
SQL Database レプリケーションにおける役割
MS SQLデータベースのレプリケーションには、主に”ディストリビューター”、”パブリッシャー”、”サブスクライバー”の3つの役割があります。
- 販売代理店 これは、パブリケーションからトランザクションを収集し、それらをサブスクライバーに配信するように構成されたMS SQLデータベースインスタンスです。ディストリビューターは、レプリケートされたトランザクションを格納するためのデータベースとして機能します。
ディストリビューター・データベースは、パブリッシャーとディストリビューターを兼ねるものと見なすことができます。ローカル・ディストリビューター・モデルでは、単一の MS SQL Server インスタンスがパブリッシャーとディストリビューターの両方を実行します。リモート・ディストリビューター・モデルは、サブスクライバーが単一の MS SQL Server インスタンスを使用して異なるパブリケーションを取得するように構成したい場合(集中型ディストリビューション)に使用できます。このモデルでは、パブリッシャーとディストリビューターは別々のサーバー上で実行されます。
- 出版社 これは、パブリケーションが構成されているメインのデータベースのコピーであり、レプリケーションプロセスで使用されるように構成された他のMS SQLサーバーに対してデータを提供します。パブリッシャーは、複数のパブリケーションを持つことができます。
- ある加入者 パブリケーションからレプリケートされたデータを受信するデータベースです。1つのサブスクライバーは、複数のパブリッシャーやパブリケーションからデータを受信することができます。サブスクライバーが1つの場合は、シングルサブスクライバーモデルが使用されます。1つのパブリケーションに複数のサブスクライバーが接続されている場合は、マルチサブスクライバーモデルが使用されます。
定期購読 これは、購読者に配信される必要がある出版物のコピーの請求です。サブスクリプションは、受信する必要がある出版物のデータ、およびそのデータがどこで、いつ受信されるかを定義するために使用されます。サブスクリプションには2つの種類があります:
- プッシュ通知の購読: 変更されたデータは、ディストリビューターからサブスクライバーのデータベースへ強制的に送信されます。サブスクライバーからのリクエストは必要ありません。
- 購読の解除: パブリッシャー側で変更されたデータが、サブスクライバーから要求されます。エージェントはサブスクライバー側で実行されます。
サブスクリプション・データベースとは、MS SQLのレプリケーションモデルにおけるターゲット・データベースのことです。

その 複数の発行者-複数の購読者 このモデルでは、パブリッシャーがMS SQLサーバーのいずれか1台上でサブスクライバーとして機能することができます。このMS SQL Serverレプリケーションモデルを使用する際は、更新の競合が発生する可能性を必ず回避してください。
MS SQL Server のレプリケーションの種類
MS SQL Serverのレプリケーションは、データベース間でデータをコピーし、継続的またはスケジュールされた間隔で定期的に同期させるための技術です。レプリケーションの方向性については、MS SQL Serverのレプリケーションには、一方向、一対多、双方向、および多対一の形式があります。MS SQL Serverのレプリケーションには、スナップショット・レプリケーション、トランザクション・レプリケーション、ピア・ツー・ピア・レプリケーション、マージ・レプリケーションの4つの種類があります。
スナップショットレプリケーション
スナップショットレプリケーション データベースのスナップショットが作成された時点のデータをそのまま複製するために使用されます。この種のレプリケーションは、データの変更頻度が低い場合、マスターデータベースよりも古いレプリカが存在しても重大な問題とならない場合、あるいは短期間に大量の変更が行われる場合に適しています。 スナップショットレプリケーションでは、変更追跡は使用されません。
たとえば、為替レートや価格表が1日1回更新され、メインサーバーから支店のサーバーへ配布する必要がある場合などに、スナップショットレプリケーションを使用できます。

トランザクションレプリケーション
トランザクションレプリケーション これは、マスターデータベースからデータベースレプリカへ、データをリアルタイム(またはニアリアルタイム)で配信する、定期的な自動レプリケーションです。 トランザクションレプリケーションは、スナップショットレプリケーションよりも複雑です。実行されたすべてのトランザクションとデータベースの最終状態がレプリケートされるため、レプリカ上でトランザクション履歴全体を監視することが可能になります。
トランザクションレプリケーションプロセスの開始時には、サブスクライバーにスナップショットが適用され、その後、データに変更が加えられるたびに、マスターデータベースからデータベースレプリカへデータが継続的に転送されます。トランザクションレプリケーションは、一方向レプリケーションとして広く利用されています。

トランザクションレプリケーションのユースケース:
- メインのデータベースサーバーに障害が発生した場合のフェイルオーバー用に、データベースレプリカを備えたデータベースサーバーを作成する。
- 各支店に複数のパブリッシャーを設置し、本社に1つのサブスクライバーを設置して、各支店で行われた業務に関するレポートを受信する。
- 変更が発生した直後に、その変更がレプリケートされるようにする。
- ソースデータベースのデータは頻繁に変更されます。
ピア・ツー・ピア複製
ピア・ツー・ピア複製 これは、データベースのデータを複数のサブスクライバーに同時に複製するために使用されます。このMS SQL Serverのレプリケーション方式は、データベースサーバーが世界中に分散している場合に利用できます。どのデータベースサーバーでも変更を加えることができ、その変更はすべてのデータベースサーバーに反映されます。ピアツーピアレプリケーションは、データベースを使用するアプリケーションのスケールアウトに役立ちます。その主な動作原理は、トランザクションレプリケーションに基づいています。

以下では、世界中に分散しているデータベースサーバー間で、MS SQL Serverのピアツーピアレプリケーションをどのように活用できるかをご紹介します。

マージレプリケーション
マージレプリケーション これは、データベースサーバー間で継続的に接続できない場合に、データを同期させるために、通常はサーバーからクライアントへの環境で使用される双方向レプリケーションの一種です。両方のデータベースサーバー間でネットワーク接続が確立されると、マージレプリケーションエージェントは両方のデータベースで行われた変更を検出し、データベースを修正して状態を同期・更新します。マージレプリケーションはトランザクションレプリケーションと似ていますが、データはパブリッシャーからサブスクライバーへ、そしてその逆の方向にもレプリケートされます。

この種のデータベースレプリケーションは、MS SQL Serverのレプリケーション方式の中で最も複雑であり、ほとんど使用されません。 たとえば、マージレプリケーションは、共有倉庫と連携する複数のピアストアで使用できます。各ストアは倉庫データベース内の情報を変更することが許可されていますが、同時に、商品の出荷や倉庫への供給品の納入後、すべてのストアのデータベースは最新の状態に更新されていなければなりません。マージレプリケーションは、更新された情報をメイン(または中央)データベースと支店データベースの両方で同時に利用可能にする必要がある場合に使用できます。
MS SQL Server レプリケーションの要件
着信トラフィックに対して、以下のポートを開放する必要があります:
- TCP 1433、1434、2383、2382、135、80、443
- UDP 1434
MS SQL Server をインストールする前に、各ホストで Windows ファイアウォールを設定し、着信トラフィック用に適切なポートを有効にしてください。MS SQL レプリケーションに参加するホストは、ホスト名によって相互に解決できる必要があります。
MS SQL Server レプリケーションを設定する前に、MS SQL Server 用に以下のソフトウェアをインストールしておく必要があります。
- .NET Framework – 一連のライブラリ
- MS SQL Server – データベースサーバーソフトウェア
- MS SQL Server Management Studio (SSMS) – GUI(グラフィカル・ユーザー・インターフェース)を用いてMS SQLデータベースを管理するためのソフトウェア。
注: この記事では、設定に MS SQL Server 2016 を使用しています。同じ原理を用いて、より新しいバージョンの SQL Server でもレプリケーションを設定することができます。
ソースデータベースが配置されている最初のマシンに MS SQL Server 2016 をインストールする場合、データベースが正常に機能するためには、2 台目のマシンにも MS SQL Server 2016 をインストールする必要がある点に注意してください。
たとえば、MS SQL トランザクションレプリケーションを設定する場合、パブリッシャーが設定されているソースデータベースサーバーから 2 バージョン以内のバージョンのデータベースサーバー(サブスクライバーが設定される 2 台目のサーバー)を使用できます。 MS SQL Server上のパブリッシャーのバージョンが2016の場合、ディストリビューターは2016、2017、2019、および2022のバージョンで構成でき、サブスクライバーはMS SQL Server 2012、2014、2016、2017、および2019で構成できます。 ディストリビューターのバージョンは、パブリッシャーのバージョンより低いことはできません。たとえば、2台目のマシンにMS SQL Server 2008をインストールした場合、レプリケーションは機能しません。
MS SQL データベースのレプリケーションに関する基本的な推奨事項
MS SQL Server の環境設定を行う前に、以下の点を考慮してください。
- IDフィールドとトリガーには制限があります。
- パブリケーションには、主キーを持つテーブルのみを含めることができます。
- 大規模なデータベースでは、大量のコンピューティングリソースを消費することを避けるため、スナップショット作成のスケジュール設定を使用しないことをお勧めします。
- サブスクライバー上に存在するデータベースレプリカのデータを変更する際は注意が必要です。データを変更するトランザクションが送信されようとしている際に、そのデータが編集または削除されていると、この問題が解決されるまでレプリケーションが停止する可能性があります。
環境の設定
MS SQLのレプリケーションを初めて設定する際は、まずテスト環境で試すことをお勧めします。例えば、仮想マシン上で動作するSQL Serverでレプリケーションを設定します。このチュートリアルでは、Windows Server 2016とMS SQL Server 2016を実行している2台のホストを使用して、MS SQL Serverのレプリケーションについて解説します。
このブログ記事の執筆に使用したテスト環境の構成を確認し、MS SQL Serverのレプリケーションの構成についてより深く理解しましょう。
司会者1
- IPアドレス:192.168.101.101
- ホスト名: MSSQL01
- MS SQL Server インスタンス ID: MSSQLSERVER1
司会者2
- IPアドレス:192.168.101.102
- ホスト名: MSSQL02
- MS SQL Server インスタンス ID: MSSQLSERVER2
両方のマシンでは、ディスク構成にディスク C: とディスク D: が含まれています。
MS SQL Server のレプリケーション設定を練習する際は、インストール中に Windows ファイアウォールを一時的に無効にすることができます。
このチュートリアルは MS SQL Server のレプリケーション設定に焦点を当てているため、本ブログ記事では MS SQL Server のインストール方法については詳しく説明しません。この例では、両方の MS SQL Server は PolyBase なしでインストールされています。
MS SQL Server のインストールが完了したら、MS SQL Server のレプリケーションに必要な機能がインストールされていることを確認してください。 なお、SQL Server レプリケーションや R-Services などのデータベースエンジンサービスは、MS SQL Server のインストール時に選択する必要があります。この例では、デフォルトのインストールパス(C:Program FilesMicrosoft SQL Server)を使用しています。

その他の設定:
- 混合認証モード(Windows 認証と MS SQL Server 認証)
- データのルートディレクトリ:D:MSSQL_Server
- システムデータベースのディレクトリ:D:MSSQL_ServerMSSQL13.MSSQLSERVER1MSSQLData
- ユーザー・データベースのディレクトリ:D:MSSQL_ServerMSSQL13.MSSQLSERVER1MSSQLData
- ユーザー・データベースのログ・ディレクトリ:D:MSSQL_ServerMSSQL13.MSSQLSERVER1MSSQLData
- バックアップディレクトリ:D:MSSQL_ServerMSSQL13.MSSQLSERVER1MSSQLBackup
各マシンに MS SQL Server 2016 および SQL Server Management Studio をインストールしたら、データベースのレプリケーションに向けて MS SQL Server の準備を行うことができます。
MS SQL Server レプリケーションの準備
データベースのレプリケーションを開始するには、事前にサーバーの設定を行う必要があります。この例では、MS SQL Serverのレプリケーションエージェント用に1つのWindowsアカウントを使用します。
- を作成する mssql 両方のサーバーでユーザーを作成し、同じパスワードを設定します。
- その mssql この例では、ユーザーは以下のグループのメンバーです:
- 管理者(ローカルマシン上のローカル管理者。ドメイン管理者は除く)
- SQLRUserGroupMSSQLSERVER1
- SQLServer2005SQLBrowserUser$MSSQL01
- ユーザーやグループを編集するには、 Win+R, オープニング CMD、そして
lusrmgr.mscコマンド。
この例で使用している 2 台の Windows Server マシンは、Active Directory に登録されていません。Active Directory を使用する場合は、 mssql ドメイン コントローラー上のユーザー。
MS SQL Server への接続
- SQL Server Management Studio を起動します。
- (スクリーンショットを参照)としてログインしてください sa SQL Server 認証を使用することで。
- MSSQL01MSSQLSERVER1 は、1台目のサーバーのホスト名およびMS SQLインスタンス名です。
- MSSQL02MSSQLSERVER2 は、2台目のサーバーのホスト名およびMS SQLインスタンス名です。

同様に、2台目のサーバー(MSSQL02)から、2つ目のMS SQL Serverインスタンス(MSSQLSERVER2)に接続することもできます。 また、SQL Server Management Studioで認証情報を入力することで、1番目のMS SQL Server(MSSQL01)から2番目のMS SQL Serverインスタンス(MSSQLSERVER2)に接続することもできます。1つのSQL Server Management Studioインスタンスで、両方のMS SQL Serverインスタンス(MSSQL01およびMSSQL02)に接続できます。
これを行うには、オブジェクトエクスプローラーで、[ 接続 > データベースエンジン. このチュートリアルでは、SQL Server Management Studio を使用して、MSSQL01 から MSSQLSERVER1 に、また MSSQL02 から MSSQLSERVER2 に接続し、MS SQL サーバーの設定を行います。
エージェントの起動
MS SQL Server インスタンスにログインすると、エージェントが実行されていないことがわかります。デフォルトでは、SQL Server エージェントは自動的に起動しません。このサービスを手動で起動することもできますが、Windows の起動後に自動的に開始されるように設定しておくことをお勧めします。

エージェント・サービスを自動起動するように設定するには:
- 報道 Win+R, 実行 cmd, そして、
services.mscコマンド。 - SQL Server Agent サービスのプロパティを開き、S を設定します。“スタートアップ”と入力して 自動.

MS SQL Server のユーザー設定
SQL Server Management Studio で MSSQLSERVER1 インスタンスに接続したら、ユーザーの設定を行う必要があります:
- [移動] オブジェクトエクスプローラー そして開く セキュリティ > ログイン.
- 右クリック ログイン そして、[選択] をクリックします 新規ログイン. 選択 Windows 認証.
- ログイン名を入力してください mssql その中では 概要 セクション。
- クリック 検索, その後、 名前を確認する 確認して、クリックしてください OK 設定を保存するには、2回クリックしてください。

- さて、 MSSQL01mssql Windows ユーザーが、データベースにログインできるユーザーのリストに追加されます(同様に、 mssql ユーザーを ログイン (2台目のマシン”MSSQL02″上のSQL Server Management Studioで)。
- に mssql ユーザーを システム管理者 のサーバーロール セキュリティ SQL Server Management Studio でのデータベースの設定。
- [移動] MSSQL01MSSQLSERVER1 > サーバーの役割, 右クリック システム管理者, そして開く プロパティ.
- その メンバー ページで、[クリック] 追加, ユーザー名を入力してください mssql, そして、クリックして 名前を確認する.
- ユーザー名のチェックボックスを選択してください MSSQL01mssql そして、クリックして OK.

- 2台目のマシン(この場合はMSSQL02)でも、同じ設定を行ってください。
- 両方のマシンを再起動してください。
これで、両方のサーバーで Windows 認証を使用してログインできるようになりました。

バックアップからデータベースをインポートする
バックアップからサンプルデータベースをインポートし、そのデータベースを1台目のマシンから2台目のマシンへレプリケートしてみましょう。その AdventureWorks 2016 この例では、このデータベースがサンプルデータベースとして使用されています。
- をコピーして AdventureWorks2016.bak データベースのバックアップファイルをMSSQLのバックアップディレクトリに保存します。今回のケースでは、1台目のサーバー上のこのディレクトリは D:MSSQL_ServerMSSQL13.MSSQLSERVER1MSSQLBackup です。
- サンプルデータベースをインポートします。1台目のマシンで、SQL Server Management Studio を起動し、次の場所に移動します。 MSSQL01MSSQLSERVER1, 右クリック データベース、 そして、[選択] をクリックします データベースの復元 コンテキストメニュー内で。

- その データベースの復元 ウィンドウで、必要なパラメータを選択してください:
- 出典: デバイス.
- をクリックして 3つの点 データベースのバックアップファイルを閲覧するには。
- その バックアップデバイスを選択してください ウィンドウで、バックアップメディアの種類を選択してください: ファイル.
- クリック 追加.
- 必要なものを選択してください .bak ファイル – D:MSSQL_ServerMSSQL13.MSSQLSERVER1MSSQLBackupAdventureWorks2016.bak
- ヒット OK, その後、 OK またしても。
- その AdventureWorks 2016 データベースの復元が正常に完了しました。

データベースのレプリカが実行される2台目のマシン上のバックアップから、データベースをインポートすることができます。この方法では、空のデータベースにデータベースデータ全体をコピーすることなく、バックアップ作成以降の変更内容をコピーすることからレプリケーションが開始されるため、ネットワークトラフィックを削減できます。
2台目のサーバー上のバックアップからデータベースを復元し、データベースの名前を AdventureWorks2016rここで、”r”は”レプリカ”を意味します。
最終的に、次のようになります:
| ホスト名MSSQLインスタンス名 | データベース名 |
| MSSQL01MSSQLSERVER1 | AdventureWorks 2016 |
| MSSQL02MSSQLSERVER2 | AdventureWorks2016r |
データベースをインポートした後、MS SQL Server を準備するために、いくつかのチューニングを行う必要があります。
- その MSSQL01 マシン、[ここ](https://example.com)へ移動 MSSQL01MSSQLSERVER1 > セキュリティ > ログイン, 選択 MSSQL01mssql. 右クリック(またはダブルクリック) mssql ユーザーと選択 プロパティ.
- In サーバーの役割, の横にあるチェックボックスを選択し、 dbcreator 役割。

- その ユーザーマッピング ページで、このログインに紐付けられているユーザーを選択し、 AdventureWorks 2016 データベースのチェックボックス(選択 AdventureWorks2016r (2台目のサーバーでも同様に)。
- その データベース・ロールのメンバーシップ セクションで、[ ] にチェックを入れ、 db_owner チェックボックス。

- クリック OK 設定を保存するには。
MSSQL02 マシンでも同様の設定を行ってください。その後、データベースのレプリケーションに必要な MS SQL Server コンポーネントの設定を行うことができます。
データベースのレプリケーションの設定
グラフィカルモードでのレプリケーションの設定は、最も便利な方法です。次の設定は、SQL Server Management Studio で行います。 この例では、MS SQL Server のレプリケーションタイプの中で最もよく使用されるものの 1 つであるトランザクション データベース レプリケーションについて説明します。
以下のスクリーンショットは、SQL Server Management Studio におけるメインのデータベース サーバー (MSSQL01MSSQLSERVER1) のビューと、2 番目のサーバー (MSSQL02MSSQLSERVER2) のビューを示しています。

配布の設定
ディストリビューションは、複数のパブリッシャーおよびサブスクライバーで利用できます。この例では、ソースデータベースが格納されているメインサーバー上でディストリビューションが構成されています。メインサーバー(MSSQL01MSSQLSERVER1)で、右クリックして レプリケーション そして、コンテキストメニューから、[ ] を選択します。 配布の設定.

その 配布設定ウィザード 開きます。
- 販売代理店. この例では、メインサーバー(MSSQL01MSSQLSERVER1)上で実行中の現在のデータベースインスタンスをディストリビューターとして選択します。[クリック] 次へ ウィザードの次の手順に進むたびに。
- SQL Server Agent の起動. 上記で説明したように、MS SQL Server Agent が自動的に起動するように設定されていない場合、次のメッセージが表示されます。[選択] をクリックしてください。 はい、SQL Server Agent サービスを自動起動するように設定してください.

- スナップショットフォルダ. ここではデフォルトのパスをそのまま使用できます。レプリケーションの初期化にはスナップショットが必要です。スナップショットディレクトリが配置されているディスクに、十分な空き容量があることを確認してください。空き容量は、少なくともレプリケートされるデータベースのサイズと同等である必要があります。
- 流通データベース. ディストリビューション・データベース名を入力してください。デフォルト名をそのまま使用することもできます(分布) および、配布用データベースファイルとログファイル用のフォルダ。

- 出版社. ディストリビューターにアクセスできる MS SQL Server レプリケーションのパブリッシャーを定義します。プライマリの MS SQL Server インスタンス(レプリケートされるソースデータベースをホストしているもの)上で、ディストリビューション・データベース名の横にあるチェックボックスを選択します。この例では、インスタンス名は MSSQL01MSSQLSERVER1 であり、ディストリビューション・データベース名は 分布.
- ウィザードのアクション. 選択 配布の設定 ウィザードの最終ステップで配布設定を行います。この例では、後で実行するためのスクリプトファイルは生成しません。

- ウィザードを完了する. “配布設定の概要”を確認し、[ ] をクリックします。 終了 ディストリビューターを作成するには。

- その 成功 ディストリビューターが正常に作成・設定された場合、ステータスが表示されるはずです。

SQL Server Agent を自動起動するように設定する際にエラーが発生した場合は、サービス設定に移動し、SQL Server Agent の起動モードを確認してください(Agent の起動設定方法については、このブログ記事の上記部分を参照してください)。
また、SQL Server Management Studio で SQL Server Agent のプロパティを開き、サービスの状態や再起動オプションを確認することもできます。右クリックして SQL Server エージェント リストの最後にある オブジェクトエクスプローラー そして、クリックして プロパティ エージェントのプロパティを表示または編集するには。

パブリッシャーの設定
配布の設定が完了したら、パブリッシャーの設定を行うことができます。パブリッシャーは、レプリケート対象のマスターデータベースが格納されているメインサーバー(MSSQL01MSSQLSERVER1)上で設定する必要があります。選択してください レプリケーション, 右クリック 地元出版物 そして、コンテキストメニューから、[ ] を選択します。 新刊.

その 新しい出版ウィザード 開きます。
- 出版物データベース. レプリケートしたいデータベースを選択します(AdventureWorks 2016 (この場合は)。クリック 次へ ウィザードの各ステップで、[次へ]をクリックして進めてください。

- 出版の種類. この手順では、データベースに対してMS SQL Serverのレプリケーションの種類を選択できます。ここでは、広く利用されているレプリケーションの種類である”トランザクション・パブリケーション”を選択してみましょう。
- 記事. 記事として公開するテーブル、プロシージャ、ビュー、インデックス付きビュー、ユーザー定義関数など、必要なオブジェクトを選択します。必要に応じて、テーブル内のカスタムフィールドのレプリケーションを選択したり、記事のプロパティを設定したりすることも可能です。この例では、いくつかのテーブルが選択されています。

- テーブルの行をフィルタリングする. この例ではフィルタは追加されていません(これがフィルタのデフォルト設定です)。必要に応じてフィルタを追加することができます。
- スナップショット・エージェント. スナップショット・エージェントの実行タイミングを指定します。エージェントを直ちに実行するように設定しましょう。選択してください 直ちにスナップショットを作成し、サブスクリプションを初期化するためにそのスナップショットを利用可能な状態にしておく.

- エージェントのセキュリティ. 選択 スナップショット・エージェントのセキュリティ設定を使用する. をクリックして セキュリティ設定 ボタンをクリックして、エージェントが実行されるアカウントを選択します。
その スナップショット・エージェントのセキュリティ 表示されるウィンドウで、の認証情報を入力してください。 mssql 以前に作成した Windows ユーザーです。”パブリッシャーに接続”を選択してください。 プロセスアカウントになりすますことで. [OK] をクリックして設定を保存し、ウィザードに戻ります。

必要なユーザーを定義すると、そのユーザーを スナップショット・エージェント そして ログリーダーエージェント セクション。

- ウィザードのアクション. ウィザードの最終ステップで、上部のチェックボックスを選択してパブリケーションを作成します。
- ウィザードを完了する. 公開設定を確認し、[クリック] をクリックしてください 終了 新しい出版物を作成するには。

その 出版物の作成 このウィンドウでは、新しいパブリケーションの作成進捗状況を確認できます。しばらく待つと、すべてが正しく行われていれば、成功ステータスが表示されるはずです。

これでパブリケーションが作成されました。以下の手順で”オブジェクト エクスプローラー”に表示されるパブリケーションを確認できます。 レプリケーション > 地元出版物.

サブスクライバーの設定
ご存じのとおり、MS SQL Serverのレプリケーションには、プル型とプッシュ型の2種類があります。プッシュ型レプリケーションを設定する場合は、サブスクライバーがメインのデータベースサーバー(この場合はMSSQL01)上でエージェントを実行するように設定する必要があります。プル型レプリケーションを設定する場合は、サブスクライバーが2台目のマシン(MSSQL02)、つまりデータベースのレプリカが作成されるマシン上でエージェントを実行するように設定する必要があります。
プッシュレプリケーションを設定し、マスターデータベースが存在する最初の MS SQL Server(MSSQL01MSSQLSERVER1)で新しいサブスクリプションを作成しましょう。
オブジェクトエクスプローラーで、次の場所へ移動します。 レプリケーション, 右クリック ローカルサブスクリプション そして、コンテキストメニューから、[ ] を選択します。 新規の定期購読.

その 新しいサブスクリプションウィザード 開きます。
- 出版物. 新規サブスクリプションを作成するパブリケーションを選択します。この例では、パブリッシャーの名前は MSSQL01MSSQLSERVER1 で、パブリケーション名(先に作成されたもの)は AdvWorks_Pub. クリック 次へ ウィザードの各ステップで、[次へ] をクリックして進めてください。
- 販売代理店の所在地. レプリケーションの種類として、”プッシュ型サブスクリプション”または”プル型サブスクリプション”のいずれかを選択します。この例では、すべてのエージェントをソースサーバー側で実行したいので、最初のオプションを選択してプッシュ型サブスクリプションを作成します。これにより、MS SQL Serverのレプリケーションを一元的に管理できるようになります。

- 購読者. デフォルトでは、ウィザードを実行しているサーバー(この場合は MSSQL01MSSQLSERVER1)がサブスクライバーとして表示され、サブスクリプション・データベースは定義されていません。新しいサブスクライバーを追加し、2台目のデータベース・サーバー(MSSQL01MSSQLSERVER2)にあるサブスクリプション・データベースを選択しましょう。[クリック] 購読者を追加 そして、コンテキストメニューから、[ ] を選択します。 SQL Server サブスクライバーを追加する.
- ポップアップウィンドウで、2つ目のMSSQL Serverインスタンス(この例ではMSSQL01MSSQLSERVER2)の認証情報を入力し、[クリック]をクリックします。 接続.

- データベースのレプリカを保存する2台目のサーバー(MSSQL02MSSQLSERVER2)のチェックボックスを選択し、 定期購読データベース ドロップダウンメニューから、データベースレプリカとして使用する新しいデータベース、またはバックアップから復元した既存のデータベースを選択します。
この例では、 AdventureWorks2016r メイン(ソース)を復元することで、2台目のサーバー上に作成されました AdventureWorks 2016 バックアップからデータベースを復元してレプリケーションを開始します。レプリケーションは、レプリケーションプロセスの開始後にデータベース全体をコピーするのではなく、新しいデータのみをレプリケートすることで開始されます。したがって、 AdventureWorks2016r この例では、このデータベースがサブスクリプション対象として選択されています。

- ポップアップウィンドウで、2つ目のMSSQL Serverインスタンス(この例ではMSSQL01MSSQLSERVER2)の認証情報を入力し、[クリック]をクリックします。 接続.
- 販売代理店のセキュリティ. 三つの点が付いたボタンをクリックしてください(…)、ディストリビューション・エージェントのユーザーやその他のセキュリティ設定を選択します。
その 販売代理店のセキュリティ 表示されるウィンドウで、ディストリビューション・エージェントが MSSQL01 ~の下でホストする mssql ユーザーアカウント。のパスワードを入力してください。 mssql Windowsユーザー。選択してください プロセスアカウントを代行してディストリビューターに接続する そして、[選択] をクリックします プロセスアカウントを代行して、サブスクライバーに接続する. ヒット OK 設定を保存するには。

これで、サブスクリプションのプロパティの設定が完了しました。

- 同期スケジュール. ディストリビュータ上に配置されているエージェントを選択して、 連続して実行する 現在の加入者について。
- サブスクリプションの初期化. を選択してください。 初期化 チェックボックスにチェックを入れ、ドロップダウンメニューから選択してください 直ちに サブスクリプションをいつ初期化するかを指定します。また、 メモリ最適化 必要に応じて、このオプションを選択してください。

- ウィザードのアクション. ウィザードの最後にサブスクリプションを作成するには、上部のチェックボックスを選択してください。
- ウィザードを完了する. 購読設定を確認し、[クリック] してください 終了 サブスクリプションを作成するには。

- サブスクリプションが作成されるまでお待ちください。もし 成功 ステータスがこの状態であれば、サブスクリプションが正常に作成されたことを意味します。

- SQL Server でレプリケーションを設定すると、オブジェクト エクスプローラーに 3 つのジョブが表示されます。これらは、次の場所から確認できます。 SQL Server エージェント > ジョブ.

レプリケーション設定の確定
ディストリビューター、パブリッシャー、およびサブスクライバーの設定が完了したら、MS SQL Server のレプリケーションの状態を確認できます。
- 最初のサーバー(MSSQL01MSSQLSERVER1)で、レプリケーション・モニターを起動し、MS SQL Serverのレプリケーションの状態を確認します。SQL Server Management Studioで、MS SQL Serverインスタンス(MSSQLSERVER1)を選択し、[ レプリケーション, 右クリック 地域出版物 そして、コンテキストメニューから、[ ] を選択します。 レプリケーション・モニターを起動する.

- そこには ログリーダーエージェント このケースではエラーが発生しました。エラーの詳細を確認するには、左ペインでソースデータベース(パブリッシャー)を選択し、 エージェント 右側のペインにある [タブ] をクリックし、エラー名をダブルクリックします。

- 開いたウィンドウには、エージェントの履歴とエラーメッセージが表示されます。エラーメッセージは以下の通りです:
- このプロセスでは、MSSQL01MSSQLSERVER1 上で sp_replcmds を実行できませんでした。原因:MSSQL_REPL。エラー番号:MSSQL_REPL20011)。
- プリンシパル”dbo”が存在しない、この種類のプリンシパルを偽装できない、または権限がないため、データベース・プリンシパルとして実行できません。(ソース:MSSQLServer、エラー番号:15517)。

2つ目のエラーメッセージは、何らかの権限が不足していることを示唆しています。このエラーを修正しましょう。
- MS SQL Management Studio で新しいクエリを作成し、このクエリを実行します。メインウィンドウで、[ 新しいクエリ ボタン。
- メインウィンドウの”SQLクエリ”セクションに、次のクエリを入力してください:
USE AdventureWorks2016GOEXEC sp_changedbowner 'sa'GOをクリックして 実行 ボタン。

コマンドが正常に完了しました。
- 次に、次のページへ進んでください。 MSSQL01MSSQLSERVER1 > レプリケーション > 地元出版物 > [AdventureWorks2016]: AdvWorks_Pub. パブリケーション名を右クリックし、コンテキストメニューから以下を選択します。 スナップショット・エージェントのステータスを表示. クリックすると アクション > 更新 ステータスを更新して、 すべてのサブスクリプションを再初期化する 各サブスクライバーにスナップショットを適用する。
これで問題はすべて解決し、エラーも表示されなくなりました。MS SQL Serverのレプリケーションは正常に動作するはずです。

レプリケーションの仕組みを確認する
MS SQL Serverのレプリケーションが実際にどのように動作するか見てみましょう。あるテーブルの内容を表示して、 AdventureWorks 2016 最初のMS SQLサーバーに保存されているデータベース(MSSQL01MSQLSERVER1)。この例では、 Person.AddressType テーブル。これを行うには、次のクエリを実行してください:
USE AdventureWorks2016;
GO
SELECT *
FROM Person.AddressType
;
クエリを実行した結果は、以下のスクリーンショットに表示されています:

2台目のサーバーでも同様のクエリを実行して、 Person.AddressType の AdventureWorks2016r MSSQL02MSSQLSERVER2 に保存されているデータベース。
USE AdventureWorks2016r;
GO
SELECT *
FROM Person.AddressType
;
上のスクリーンショットと下のスクリーンショットを比較すると、 Person.AddressType 両方のデータベース(1台目のサーバー上のソースデータベースと、2台目のサーバー上のデータベースレプリカであるターゲットデータベース)で同一です。

の表から1行を削除してみましょう。 人物住所タイプ の表 AdventureWorks 2016 最初のサーバー(MSSQL01MSSQLSERVER1)上のデータベース(ソース)。以下のクエリを実行して、 “請求” そのテーブルの名前を指定し、その後にテーブルの内容を表示するには:
DELETE FROM Person.AddressType WHERE Name='Billing';
SELECT * FROM Person.AddressType;

ご覧の通り、最初の行には AddressTypeID 1 と名前 “請求” から削除されました Person.AddressType の表 AdventureWorks 2016 のデータベース MSSQL01 マシン。
トランザクションレプリケーションが実行されています。のコンテンツを確認してみましょう。 Person.AddressType の表 AdventureWorks2016r のデータベース MSSQL02 マシン。テーブルの内容を確認するには、上記と同様のクエリをもう一度実行してください:
USE AdventureWorks2016r;
GO
SELECT *
FROM Person.AddressType
;
複製が行われた結果、1行目も Person.AddressType データベースのレプリカとして機能するセカンダリデータベース内のテーブル(AdventureWorks2016r)。結果は以下のスクリーンショットでご確認いただけます。

SQL Server のデータベースレプリケーションは正常に動作しています。
結論
MS SQL Server のレプリケーションには、スナップショット、トランザクション、ピアツーピア、マージの 4 種類があります。トランザクション・レプリケーションが広く利用されているため、このブログ記事ではこの種類の MS SQL Server レプリケーションの設定方法について解説します。 データベースのレプリケーションを機能させるには、ディストリビューター、パブリッシャー、およびサブスクライバーを設定する必要があります。サブスクライバーは、ソースサーバー(プッシュレプリケーション)およびターゲットサーバー(プルレプリケーション)のいずれにも設定可能です。
ただし、レプリケーションと MS SQLデータベースのバックアップ 成功の可能性を高めるために データベースデータの復旧.