sql >> データベース >  >> RDS >> Sqlserver

SQLServerレプリケーションのセットアップと構成

    SQL Serverレプリケーションは、SQLServerデータベースオブジェクトとデータを同じSQLServerインスタンスまたは異なるインスタンスにあるデータベース間でコピーおよび配布し、これらのデータベース間で同期して一貫性を保つために使用されるデータ同期機能の1つです。状態。

    SQLServerレプリケーションコンポーネント

    SQL Serverレプリケーションは、次の主要コンポーネントで構成されています。

    • 記事 :SQL Serverレプリケーションの基本単位と見なされるデータベーステーブル、ストアドプロシージャ、またはビュー。
    • ディストリビューター配布を含むSQLServerインスタンス データベース。レプリケーションのメタデータと履歴を保存します。パブリッシャーは1つのディストリビューターにのみ割り当てることができますが、ディストリビューターは複数のパブリッシャーにサービスを提供できることを考慮してください。
    • 発行者 :ソースデータベースを含み、データを他の場所に配布できるようにするSQLServerインスタンス。
    • サブスクライバー :パブリッシャーからSQLレプリケーションデータを受信して​​ターゲットデータベースに適用し、一部のレプリケーションタイプでデータ変更をパブリッシャーに返すSQLServerインスタンス。
    • レプリケーションスナップショットエージェント :このエージェントは、パブリッシャーデータベースの記事の完全なコピーをサブスクライバーに提供するすべてのレプリケーションタイプの初期同期を担当します。
    • ログリーダーエージェント :このエージェントは、ソースデータベースのトランザクションログを読み取ることにより、トランザクションレプリケーションでパブリッシャーからサブスクライバーにトランザクションを継続的にレプリケートするために使用されます。
    • 配布エージェント :このエージェントは、初期スナップショットをターゲットデータベースに適用し、継続的なデータ変更を追跡してターゲットデータベースに適用するために使用されます。このエージェントは、トランザクションレプリケーションとスナップショットレプリケーションでのみ使用されます。
    • マージエージェント :このエージェントは、サブスクライバーからパブリッシャーに変更をコピーしてから、両方の方法でパブリッシャーからサブスクライバーにすべての変更をコピーする責任があります。このエージェントは、マージレプリケーションでのみ使用されます。

    SQLServerレプリケーションタイプ

    SQL Serverは、データ同期要件に基づいて、データ配布に使用できるさまざまな種類のレプリケーションを提供します。すべてのSQLレプリケーションタイプは、データ全体のスナップショットをパブリッシャーからサブスクライバーにコピーすることにより、パブリッシャーとサブスクライバー間の初期同期を開始します。これらのSQLServerレプリケーションタイプには次のものがあります。

    • トランザクションレプリケーション :このレプリケーションタイプでは、パブリッシャー側で実行されるすべての変更が配信され、サブスクライバー側に直接適用されます。トランザクションレプリケーションの例は、異なるサイト間のデータ統合シナリオです。
    • スナップショットレプリケーション :このレプリケーションタイプでは、スナップショットがパブリッシャーから取得され、サブスクライバーに一度適用されます。スナップショットの後、次の同期が発生するまで、継続的な変更は配布されません。次の同期では、新しいスナップショットがコピーされ、サブスクライバーに再度適用されます。
    • レプリケーションのマージ :このレプリケーションタイプでは、変更はパブリッシャー側とサブスクライバー側の両方で実行および同期でき、サブスクライバーがネットワークに接続されているときに同期できます。マージレプリケーションの使用例は、POSアプリケーションユーザー間でのデータ交換です。
    • ピアツーピアレプリケーション :パブリッシャーがデータ変更を複数のサブスクライバーに同時に配布する特殊なタイプのトランザクションレプリケーション。
    • 双方向レプリケーション :両方のサーバーがパブリッシャーとサブスクライバーとして機能し、相互にデータを交換する、もう1つの特殊なタイプのトランザクションレプリケーション。

    SQLServerレプリケーションの要件

    SQLレプリケーションサイトをセットアップして構成する前に、次の点がチェックされていることを確認する必要があります。

    • SQL Serverレプリケーションコンポーネントは、参加しているすべてのサーバー、パブリッシャー、サブスクライバー、およびディストリビューターにインストールされます。これは、SQL Serverインスタンスのインストール中にインストールするか、後でSQLServerインストールウィザードを使用して既存のSQLインスタンスに追加する必要があります。
    • サーバーには、スナップショットの作成、サブスクライバー内の公開されたデータベースデータ、およびパブリッシャーデータベースのトランザクションログの増加のための十分なスペースがあります。
    • SQL Serverエージェントが稼働しているため、SQLサーバーレプリケーションエージェントは関連するSQLエージェントジョブを作成でき、ジョブは問題なく実行されます。
    • 参加しているSQLServerインスタンス間には十分なネットワーク帯域幅があります。
    • パブリッシャー、ディストリビューター、およびサブスクライバーインスタンスは相互に到達でき、これらのSQLインスタンスがリッスンするTCPポートはファイアウォールルールで開かれます。つまり、ネットワークや接続の問題なしに、他のインスタンスから各SQLインスタンスに接続できます。
    • データの一意性を維持するために、複製される発行元データベースの記事には、事前に定義された主キー制約が必要です。
    • レプリケーションサイトの作成とレプリケーションエージェントの実行に使用されるアカウントは、パブリッシャー、ディストリビューター、サブスクライバーデータベースの両方で、少なくともdb_owner固定データベースロールのメンバーである必要があります。スナップショットフォルダ。

    はじめに

    この記事では、トランザクションレプリケーションタイプを使用して、2つのSQLServerインスタンス間でAdventureWorks2017データベーステーブルをレプリケートする方法を示します。 SQL1 ディストリビューターとパブリッシャーとして機能するインスタンス、および SQL2 サブスクライバーとして機能するインスタンス。

    SQL Serverトランザクションレプリケーションは、次の3つのステップで構成されます。

    • ディストリビューターを構成します。
    • パブリッシャーを構成します。
    • サブスクライバーを構成する

    これらの手順について詳しく説明しましょう。

    ディストリビューターの構成

    ディストリビューターを構成するには、「 SQL1」に接続します ”ディストリビューターとして機能するSQL Serverインスタンスは、この例のパブリッシャーインスタンスと同じです。SSMSオブジェクトエクスプローラーでレプリケーションノードを参照し、レプリケーションを右クリックします。 ノードを選択し、配布の構成を選択します …オプション、以下に示すように:

    配布の構成ウィザードに表示される最初のウィンドウは開始ウィザードであり、そのウィザード内で実行されるアクションのリストが要約されています。 次へをクリックします 続行するには:

    次のウィンドウで、ディストリビューターとして機能するSQLServerインスタンスを選択するように求められます。現在のSQLServerインスタンスをディストリビューターとして選択し、そのインスタンス上に配布システムデータベースを作成するか、ディストリビューターとして使用する別のSQLServerインスタンスを指定するかを選択できます。このシナリオでは、現在のSQL1インスタンスをディストリビューターとして使用します。設計計画に合ったオプションを選択し、[次へ]をクリックします 続行するには:

    SQLServerエージェントサービスはSQLServerレプリケーションプロセスで重要な役割を果たします。SQLServerエージェントジョブはレプリケーションエージェントごとに作成されるため、SQL Serverエージェントサービスが手動(デフォルト)からの場合は、起動モードを変更することをお勧めします。 )自動になります。 SQL Serverの再起動時に、手動での起動を忘れることなく自動的に実行されるようにします。このウィザードは、SQL Serverサービスアカウントがそのサーバーでそのアクションを実行するための管理者権限を持っていることを考慮して、SQLServerエージェントサービスの起動モードを自動的に変更する機能を提供します。この場合、その変更を手動で実行します。 次へをクリックします 続行するには:

    その後、ウィザードは、初期同期スナップショットが作成されるフォルダーを指定するように要求します。十分なスペースがあるディスクドライブ内のフォルダを指定し、[次へ]をクリックします 続行するには:

    次のウィンドウで、ディストリビューションデータベースの名前と、そのデータベースのデータとログファイルを保存する場所を指定するように求められます。カスタマイズした名前と場所を指定するか、デフォルト設定のままにして、[次へ]をクリックします 続行するには:

    その後、パブリッシャーとして機能するSQL Serverインスタンスのリストを選択し、そのメタデータをそのディストリビューションデータベースに格納する必要があります。トポロジが事前定義されている場合は、すべての候補パブリッシャーを追加してから、[次へ]をクリックします 続行するには:

    次のウィンドウで、ディストリビューションを直接構成するか、前述の構成手順のスクリプトファイルを生成するか、またはその両方であるかを問わず、そのウィザードによって実行されるアクションを選択します。このシナリオでは、ディストリビューションを直接構成します。 次へをクリックします 続行するには:

    [ウィザードの完了]ウィンドウで、以前に実行したすべての選択を確認し、これらの選択に変更が加えられていないことを確認してから、[完了]をクリックします。 構成プロセスを開始するには:

    配布構成プロセスが正常に完了すると、ウィザードは各アクションの横に緑色のチェックを表示して通知します。問題が発生した場合は、問題を修正して構成を再度繰り返すために、意味のあるエラーメッセージが表示されます。すべてのアクションが正常に完了したので、閉じる 構成ウィザード:

    [システムデータベース]ノードを展開すると、SSMSオブジェクトエクスプローラーで、以下に示すように、SQLServerレプリケーションメタデータの格納に使用される新しい配布システムデータベースが作成されていることがわかります。

    パブリッシャーの構成

    ディストリビューターを構成した後、次のステップは、他のサイトのデータソースとして機能するパブリッシャーを構成することです。

    パブリッシャーを構成するには、公開するデータベースを含むSQL Serverインスタンスに接続し、オブジェクトエクスプローラーでSQL Serverレプリケーションノードを参照し、[ローカルパブリケーション]ノードを右クリックして、[新しいパブリケーション…]を選択します。 オプション、以下のように:

    新規パブリケーションウィザードの最初のウィンドウは開始ページであり、そのウィザードで実行されるアクションのリストが表示されます。このウィザードが次へをクリックするのにどのように役立つかを読んだ後 続行するには:

    次のページで、サブスクライバーに公開されるデータベースを選択するように求められます。これは、ここのデモのAdventureWorks2017データベースです。 次へをクリックします 続行するには:

    その後、使用する出版物の種類を選択するように求められます。この記事の前半で、SQLServerで提供されるSQLServerレプリケーションタイプのリストについて説明しました。このデモでは、トランザクションパブリケーションを使用します タイプ。 次へをクリックします 続行するには:

    [記事]ページで、サブスクライバーに複製する予定のデータベースオブジェクトのリストを選択できます。各タイプで使用可能なすべてのオブジェクトを選択するか、オブジェクトのタイプを展開して複製するオブジェクトのリストを選択するかを選択できます。このデモでは、すべてのデータベーステーブルをサブスクライバーに複製します。オブジェクトの選択を確認したら、[次へ]をクリックします 続行するには:

    SQL Serverでは、選択したデータベースオブジェクトにフィルターを追加し、追加されたフィルターの条件を満たすデータのみを複製することもできます。テーブルの行全体を複製する場合は、次へをクリックしてこのページをスキップしてください ボタン:

    [スナップショットエージェント]ページで、初期同期スナップショットをすぐに作成するか、後で実行するようにスケジュールするか、レプリケーションのセットアップが完了したときに手動で実行するかを指定します。このデモでは、SQLServerレプリケーションのセットアップが完了した後にスナップショットを作成します。 次へをクリックします 続行するには:

    その後、スナップショットエージェントとログリーダーエージェントの実行に使用されるアカウントを構成するように求められます。このユーザーは、スナップショットフォルダーに対する読み取りおよび書き込み権限に加えて、パブリッシャー、ディストリビューター、およびサブスクライバーデータベースに対する少なくともdb_owner権限を持っている必要があります。 SQL Agentサービスアカウントを使用して、これらのSQL Serverレプリケーションエージェントを実行することもできますが、セキュリティの観点からはお勧めしません。承認されたアカウントを入力して、[次へ]をクリックします 続行するには:

    [ウィザードのアクション]ページで、このウィザードの完了後に実行されるアクションを選択します。これには、パブリケーションの作成と、後でパブリケーションを作成するためのスクリプトファイルの生成、またはこのスクリプトを他のサーバーのテンプレートとして使用することが含まれます。このデモでは、パブリケーションの作成を選択します 、[次へ]をクリックします 続行するには:

    最後のページは「ウィザードの完了」です。このページでは、パブリケーションの名前を入力し、このウィザード内で選択内容を確認してから、[完了]をクリックする必要があります。 パブリケーションの作成を続行するには:

    パブリケーション作成ウィザードが完了すると、パブリケーション作成プロセスの結果と、プロセスが緑色のチェックで正常に完了したか、特定のステップで失敗したかを意味のあるエラーメッセージとともに表示します。このデモでは、以下に示すように、パブリケーションは問題なく正常に作成されています。

    パブリケーションが正常に作成されたかどうかを確認するには、SSMS ObjectExplorerのSQLServerレプリケーションノードの下にある[ローカルパブリケーション]ノードを展開し、新しく作成されたパブリケーションを確認します。そのパブリケーションのプロパティページからパブリケーション設定を確認および変更することもできます。出版物は次のようになります:

    サブスクライバーの構成

    今のところ、パブリッシャーとディストリビューターは正常に構成されています。データターゲットとして機能し、サブスクライバーからデータを受信するサブスクライバーを構成するときが来ました。

    サブスクライバーを構成するには、同じパブリッシャーインスタンスから、SSMSオブジェクトエクスプローラーの下のSQL Serverレプリケーションノードを展開し、[ローカルサブスクリプション]ノードを右クリックして、[新しいサブスクリプション]を選択します。 …オプション、以下に示すように:

    新規サブスクリプションウィザードに表示される最初のウィンドウは開始ページであり、このウィザードがサブスクライバーの構成にどのように役立つかを示しています。 次へをクリックします 続行するには:

    サブスクライバーを構成する最初のステップは、サブスクライバーが作成されるパブリッシャーと、そのサブスクライバーのデータソースとして機能するパブリケーションデータベースを選択することです。リストされたデータベースからパブリケーションデータベースを選択し、[次へ]をクリックします。 続行するには:

    その後、ディストリビューター側ですべてのエージェントを実行して変更をサブスクライバーにプッシュし、レプリケーション同期プロセスの集中管理を提供するか、パブリッシャーから変更をプルする独自のサブスクライバーで各エージェントを実行するかを指定するように求められます。 、ディストリビューター側での処理オーバーヘッドを削減し、各サブスクライバー同期を個別に管理できるようにします。このデモでは、プッシュサブスクリプションを選択し、[次へ]をクリックします 続行するには:

    次のウィンドウで、サブスクライバーSQL Serverインスタンスとサブスクリプションターゲットデータベースを追加する必要があります。データベースが存在しない場合は、以下に示すように、そのデータベースを作成できます。

    [配布エージェントのセキュリティ]ページで、同期プロセスを実行するために配布エージェントを実行するアカウントと、ディストリビューターとサブスクライバーの両方のSQLServerインスタンスへの接続に使用するアカウントを指定します。ディストリビューターとサブスクライバーの両方にアクセス許可を持つ許可されたドメインアカウントを提供することをお勧めします。SQLエージェントサービスアカウントを使用してディストリビューターとサブスクライバーに接続することもできますが、セキュリティの観点からはお勧めしません。承認されたセキュリティアカウントを提供したら、[次へ]をクリックします 続行するには:

    新規サブスクリプションウィザードの次のページで、各エージェントの同期スケジュールを指定します。同期を継続的に実行する場合は、デフォルト設定のままにして、[次へ]をクリックします 続行するには:

    その後、パブリケーションからのスナップショットを使用してサブスクリプションを初期化するかどうか、およびその初期化プロセスをいつ実行するかを指定できます。このデモでは、以下に示すように、最初の同期時にサブスクリプションを初期化することを選択します。

    [ウィザードのアクション]ウィンドウで、このウィザードの最後に実行するアクションを選択できます。たとえば、このウィザードには、構成されたサブスクリプションを作成し、後でまたは別のSQLServerインスタンスでサブスクリプションを作成するためのスクリプトファイルを生成するオプションがあります。

    その後、ウィザードは、サブスクリプション構成を開始する前にそれを確認するために、そのウィザードで選択したすべての構成の要約を提供します。すべての選択に問題がない場合は、[完了]をクリックします 構成プロセスを開始するには:

    サブスクリプションの作成操作が正常に完了すると、ウィザードは、完了したアクションごとに緑色のチェックを通知するか、失敗した場合に意味のあるエラーメッセージを次のように提供します。

    サブスクリプションが正常に作成されたことを確認するには、SSMS Object Explorerのレプリケーションノードで、以前に作成したパブリケーションを展開すると、以下に示すように、そのパブリッシャーに接続されているすべてのサブスクリプションが表示され、そこからデータを受信します。

    初期同期スナップショットの作成

    パブリッシャーの作成中に初期同期スナップショットを作成することを選択しなかった場合でも、レプリケーションコンポーネントを構成した後にスナップショットを作成できます。

    初期同期スナップショットを作成するには、作成したパブリケーションを右クリックして、スナップショットエージェントのステータスの表示を選択します。 オプション。開いたウィンドウで、[スタート]ボタンをクリックしてスナップショットエージェントを実行し、初期同期スナップショットを作成します。以下のように、すべての記事のスナップショットが正常に作成されるまで、スナップショット作成プロセスの進行状況を監視することもできます。

    同期の監視

    複製された記事のスナップショットが作成されると、そのスナップショットからサブスクライバーにすべての記事を書き込むことにより、サブスクライバーとの同期プロセスが自動的に開始されます。同期プロセスを監視するには、SQLServerのレプリケーションの下にあるサブスクリプションを右クリックします。 SSMS Object Explorerのノードで、同期ステータスの表示を選択します。 オプション。以下に示すように、サブスクライバーで実行されたトランザクションとコマンドの数が表示されます。

    さらに、以下に示すように、パブリケーション名を右クリックして[Launch Replication Monitor]ウィンドウを選択することにより、ディストリビューター側で保留中でサブスクライバー側に適用されていないすべてのレプリケーションエージェントのステータスとコマンドの数を監視できます。

    レプリケーションサイトが正常に機能していることを確認するために、パブリッシャー側でレプリケートされた記事の1つである「Employee」テーブルに新しいレコードを追加します。これはサブスクライバー側では使用できません。レプリケーションモニターから確認できます。新しいレコードがパブリッシャーからディストリビューター、次にサブスクライバーに配信されるウィンドウ。その後、以下に明確に示すように、サブスクライバー側のEmployeeテーブルで新しいレコードが使用可能になっていることがわかります。

    明確で簡単な手順で、同期されて正常に機能する完全なトランザクションレプリケーションサイトを構築しました。次の記事では、既存のSQLServerレプリケーションサイトのトラブルシューティング方法を説明します。しばらくお待ちください。


    1. PostgreSQLでJSONB値をマージしますか?

    2. SQLAlchemyの複雑な外部キー制約

    3. oracle sqlの結合キーワードと内部結合キーワードの違いは何ですか?

    4. SQLSELECTステートメント