はじめに
SQL Serverレプリケーションは、データをレポート環境に統合したり、移行したりする目的で、あるインスタンスから別のインスタンスにデータを転送できるようにするSQLServerの機能です。個人的には、SQL Serverレプリケーションを高可用性テクノロジと見なす人もいますが、それを高可用性テクノロジとは見なしません。
SQL Serverレプリケーションでは、発行業界と同様の用語を使用して、ソースから宛先へのデータの処理方法を説明します。重要な用語は次のとおりです。
- パブリッシャー–データを他のインスタンス(パブリケーションとしてパッケージ化)に複製できるようにするSQLServerインスタンス。
- パブリケーション–実際にはデータベースオブジェクトである記事のコレクションで構成される受信インスタンスに渡す準備ができているユニット。
- ディストリビューター–1つ以上のパブリッシャーに関連付けられたデータをディストリビューションデータベースと呼ばれるデータベースに格納するSQLServerインスタンス 。 ローカルディストリビューター リモートディストリビューターがパブリッシャーと同じインスタンスに保存されます 別のインスタンスにあります。
- サブスクライバー–レプリケートされたデータベースを受信するインスタンス。購読者サブスクリプションは、出版社から受け取ることを期待している出版物のコピーのリクエストです。
- スナップショット。
この記事では、異種サブスクライバーをサポートするようにSQLServerレプリケーションを構成することから学んだいくつかのポイントを共有します。パブリケーションを作成し、その後、このパブリケーションに依存するOracleサブスクリプションを作成します。また、問題のトラブルシューティングに非常に重要なプロセスの流れとともに、いくつかのポイントを示します。
スナップショットレプリケーションセッションを構成する手順は次のとおりです。
- ディストリビューターを構成する
- 発行者を構成します(発行されている記事を含む発行物とともに)
- サブスクライバーを構成する
各ステップについて簡単に説明します。
ディストリビューターの構成
ディストリビューターは、レプリケーション中に使用される情報の保存を担当するインスタンスです。インスタンスで初めてパブリケーションを作成しようとすると、SQLServerはディストリビューターの構成を提案します。この記事では、ディストリビューターはローカルディストリビューターです。 。
パブリケーションの作成
複製したいオブジェクトを含むデータベースを特定しましょう。これはパブリケーションデータベースになります 。
パブリケーションデータベースを作成するには、以下のスクリーンショットの指示に従ってください。
このステップでは、構成するパブリケーションのタイプを選択できます。各パブリケーションタイプは、下のペインで説明されています。単純さと互換性の理由から、スナップショットパブリケーションを選択します。オブジェクトをOracleインスタンスに複製する予定であることに注意してください。この場合、トランザクション およびスナップショットの出版物 サポートされています。ピアツーピアおよびマージレプリケーションの優れたユースケースは他にもあります。
このステップでは、公開する記事を選択します。 SQL Serverでは、次のような4つの主要なオブジェクトタイプを公開できます。
- テーブル
- ストアドプロシージャ
- ビュー
- ユーザー定義関数
ご覧のとおり、OrdersとOrderLinesの2つのテーブルを公開します。 SQL Serverレプリケーションの柔軟性を示すために、以下に示すようにレコードをフィルタリングします。
注: OrderIDの数が1000を超えることに関心があります。
公開されたテーブルから不要な行を除外するには、追加…をクリックします 次に次へ 。
以下のスクリーンショットは、OrderLinesテーブルの列をフィルタリングする方法を示しています。
次に、スナップショットエージェントのプロパティを構成します。初期スナップショットと、新しいスナップショットが生成される間隔を定義します。このステップで抽出されたデータは、ディストリビューターを最初に構成するときに指定されたディレクトリに保存されます。
まず、スナップショットエージェントを開始するスケジュールを設定します。 次へをクリックします 。
スナップショットエージェントごとに、それを実行するアカウントを指定します。
次に、SnapshotAgentのセキュリティ設定を構成します。 [セキュリティの設定]テーブルは、Snapshot Agentプロセスを実行するユーザーを定義し、パブリッシャーに接続するSQLServerログインの詳細を決定する別のウィンドウを開きます。これらのプリンシパルには特定の権限が必要ですが、本番環境では少し危険な場合があります。 SQL Serverエージェントサービスアカウントを使用することは、複雑さを回避するための回避策ですが、実際にはMicrosoftによって推奨されていません。
最後に、後で使用するために構成をスクリプトとして保存するか、すぐにパブリケーションを作成するかを決定する必要があります。
次のステップ(図16)は、選択したすべてのオプションを要約したものです。 完了をクリックする前に、簡単に確認することをお勧めします ボタン。
パブリケーションの作成プロセスが開始されます。 停止をクリックできます プロセスを中断します。
プロセスが完了すると、パブリケーションがSQL ServerManagementStudioの[オブジェクトエクスプローラー]ペインに表示されます。
サブスクライバーの追加
サブスクライバーは、パブリッシャーによって利用可能になったパブリケーションを受け取ります 。購読者に配信される出版物のコピーは、購読と呼ばれます。 。パブリッシャーは多くのサブスクライバーを持つことができます。各
サブスクライバーは、パブリッシャーに関する限り、このパブリッシャーによって発行された記事をパブリケーションと呼ばれる単位として受け取り、サブスクライバーへのサブスクリプションと見なします。
サブスクリプションを作成することで、「この出版物のコピーが欲しい」と出版社に伝えるだけです。出版社は多くの出版物を持つことができますが、1つの出版物に多くの購読者がいることもあります。
したがって、パブリッシャーとサブスクライバーの関係は1対多の関係です。
新規サブスクリプションウィザードを使用すると、サブスクライブするパブリケーションを決定できます。図20に示すように、以前に作成された出版物のリストから選択することができます。
次に、プルサブスクリプションの代わりにプッシュサブスクリプションを実行するかどうかを決定します。プルサブスクリプションは、複数のサブスクライバーを想定した場合のパフォーマンスには優れていますが、
異種データベースレプリケーションでは機能しません。 SQL Server以外のサブスクライバーは、プルサブスクリプションを使用する必要があります。このシナリオで公開される記事も、テーブルとインデックス付きビューに限定されていることに注意してください。
データソース名(DSN)を使用してOracleサブスクライバを追加します。このDSNは、Oracle Netを介してOracleインスタンスに接続できるという点で、すでに作成、テストされ、機能していることが確認されている必要があります。これは、SQLServerホストにtnsnames.oraというファイルへのエントリを持つOracleクライアントをインストールする必要があることを意味します。 接続の宛先を定義します。このTNSエントリは、新しいサブスクリプションウィザードがこの段階で要求するデータソース名を構成するために使用されます。
tnsnames.oraファイルに作成したエントリは次のようになります。
ORCL10G = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = IGIRI-LP)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl10g) ) )
強調表示された部分はエイリアスであり、他の詳細は接続の宛先を定義します。 tnsping を使用して、このエントリが正しく機能しているかどうか、およびOracle環境変数が正しく構成されているかどうかを確認できます。 以下に示すユーティリティ。
確認されると、このTNSエントリは、使用するDSNを構成するために使用されます。 TNSサービス名はORCL10Gと呼ばれます DSNはORCLDCと呼ばれます 。これは、新規サブスクリプションウィザードで使用するDSNです。
これは64ビットバージョンのODBCを使用してDSNを構成しており、これはシステムDSNであり、ユーザーDSNではないことに注意してください。構成は、コンピューターにログオンしているユーザーには依存しません。
追加する加入者タイプを選択し、データソース名を入力します。 OKをクリックします 。
1つまたは複数のサブスクライバーを選択し、サブスクリプションごとにデータベースを指定します。
DSNが追加されると、ディストリビューションエージェントのセキュリティの構成に進むことができます。これは、スナップショットエージェントセキュリティを構成した場合と同様であることがわかりました。 新しいパブリケーションウィザードで。
ただし、ここには、サブスクライバーへの接続を確立するセクションがあります。 パブリッシャーではなく (これはプッシュサブスクリプションであることを思い出してください)。このユーザーアカウントは、Oracleインスタンスで作成されている必要があり、デフォルトのテーブルスペース(ここではOracle DBAが必要な場合があります)にテーブルとクォータを作成する権限を持っている必要があります。
配布エージェントのセキュリティにパラメータを追加し、[ OK]をクリックします 。
各配信エージェントのアカウントと接続オプションを指定し、[次へ]をクリックします 。
各エージェントの同期スケジュールを定義します。私たちの場合、継続的に同期することを選択しました。 次へをクリックします 。
サブスクリプションをすぐに初期化するオプションを選択します。これは、Snapshotフォルダーで使用可能なすべてのデータを再度コピーすることを意味します。 NoSQL Serverサブスクライバーは、新しい記事がパブリケーションに追加されたときにサブスクリプションを再初期化することをお勧めします。 次へをクリックします 。
プロセスが正常に完了した後に実行するオプションを選択します。 次へをクリックします 。
追加した情報を確認し、[完了]をクリックします 。
サブスクリプションの作成プロセスが実行されます。
作成したサブスクリプションは、親パブリケーションにマップされた(パブリッシャー上の)オブジェクトエクスプローラーのエントリを示しています。この場合ではない現在のインスタンスで作成されたサブスクリプションのリストを提供するローカルサブスクリプションノードには表示されないことに注意してください。
監視とトラブルシューティング
SQL Serverは、インスタンス上のすべてのレプリケーションセッションの詳細を確認および監視するためのレプリケーションモニターを提供します。レプリケーションモニターは、スナップショットエージェントが実行および完了したときに管理者に通知できます。また、サブスクリプションが初期化されているかどうか、およびディストリビューションエージェントがスムーズに実行されているかどうかも表示できます。
現在の構成に関連付けられているSQLServerエージェントジョブは8つあります。これらの仕事の履歴を表示すると、すべてが正常かどうかの詳細もわかります。
実際のOracleエラーは、発生したときにレプリケーションモニターとSQLServerエラーログに一覧表示されます。このレベルの詳細により、SQLServerレプリケーションのトラブルシューティングが面白くなります。 Oracle(SQL Server DBAの場合)の知識があると、発生する可能性のあるエラーを理解するのに大いに役立ちます。
図34のエラーの例を見てください。このエラーは、OracleNetおよびODBC環境が正しく構成される前に発生しました。エラーは、問題がどこにあるかを非常に明確に示しています。
Job Activity Monitorビューは、ジョブ履歴を調べることにより、どのジョブが成功し、どのジョブをトラブルシューティングする必要があるかを詳細に通知します。
以前のすべてのエラーが解決されたら、サブスクリプションをダブルクリックして開くと、すべてのセッション、エラー、およびすべてが正常であるときに表示されると予想される結果の詳細が表示されます。エージェントがデータをパブリッシャーからサブスクライバーにバッチで一括コピーすることを確認します。 Oracleインスタンスで作成されたテーブルを照会し、レコードを比較することもできます。 (図37)。
ご覧のとおり、SQL Serverは、Oracleでテーブルを作成してデータをコピーする前に、ソーススキーマ(Sales)を除いてテーブルを準備します。
Oracleインスタンスのレコード数は、ソーステーブルのレコード数と一致し、1000より大きいOrderIDに対してOrderLinesテーブルをフィルタリングするという事実を考慮に入れています。
結論
Oracleインスタンスをサブスクライバとして使用して異種データベースレプリケーションを構成するプロセスを簡単に実行しました。このオプションはMicrosoftによって徐々に廃止されていますが、この古いSQLServer機能によって提供される機能の恩恵を受ける可能性のあるユースケースがあります。参考文献のセクションでは、このテーマに関する幅広い読み物を提供しており、もっと練習したい人に役立つと思います。
参考資料
常時接続の可用性グループのレプリケーションを構成する
Oracle以外のサブスクライバー
異種データベースレプリケーション
Oracleサブスクライバー