このトピックでは、SQL Server Management Studio または Transact-SQL を使用して、SQL Server 2014 で SQL Server 以外のサブスクライバーのサブスクリプションを作成する方法について説明します。 トランザクション レプリケーションとスナップショット レプリケーションでは、SQL Server 以外のサブスクライバーへのデータの発行がサポートされます。 サポートされているサブスクライバー プラットフォームの詳細については、「 SQL Server 以外のサブスクライバー」を参照してください。
このトピックについて
SQL Server 以外のサブスクライバーのサブスクリプションを作成するには、次を使用します。
SQL Server Management Studio の使用
SQL Server 以外のサブスクライバーのサブスクリプションを作成するには:
SQL Server ディストリビューターに適切なクライアント ソフトウェアと OLE DB プロバイダーをインストールして構成します。 詳細については、 Oracle サブスクライバー および IBM DB2 サブスクライバーを参照してください。
パブリケーションの新規作成ウィザードを使用してパブリケーションを作成します。 パブリケーションの作成の詳細については、「パブリケーションの 作成 」および「 Oracle データベースからのパブリケーションの作成」を参照してください。 パブリケーションの新規作成ウィザードで次のオプションを指定します。
[ パブリケーションの種類 ] ページで、[ スナップショット パブリケーション ] または [ トランザクション パブリケーション] を選択します。
[ スナップショット エージェント ] ページで、[ スナップショットをすぐに作成する] をオフにします。
SQL Server 以外のサブスクライバーに対してパブリケーションが有効になった後にスナップショットを作成して、SQL Server 以外のサブスクライバーに適したスナップショットスクリプトと初期化スクリプトがスナップショット エージェントによって生成されるようにします。
[パブリケーションの プロパティ - <PublicationName> ] ダイアログ ボックスを使用して、SQL Server 以外のサブスクライバーのパブリケーションを有効にします。 この手順の詳細については、「 パブリケーションのプロパティ」の「サブスクリプション オプション」を 参照してください。
サブスクリプションの新規作成ウィザードを使用してサブスクリプションを作成します。 このトピックでは、この手順の詳細について説明します。
(省略可能)サブスクライバーでテーブルを保持するように pre_creation_cmd アーティクル プロパティを変更します。 このトピックでは、この手順の詳細について説明します。
パブリケーションのスナップショットを生成します。 このトピックでは、この手順の詳細について説明します。
サブスクリプションを同期します。 詳細については、「 プッシュ サブスクリプションの同期」を参照してください。
SQL Server 以外のサブスクライバーのパブリケーションを有効にするには
SQL Server Management Studio でパブリッシャーに接続し、サーバー ノードを展開します。
[レプリケーション] フォルダーを展開し、[ローカル パブリケーション] フォルダーを展開します。
パブリケーションを右クリックし、[ プロパティ] をクリックします。
[サブスクリプション オプション] ページで、[SQL Server 以外のサブスクライバーを許可する] オプションの値 True を選択します。 このオプションを選択すると、パブリケーションが SQL Server 以外のサブスクライバーと互換性を持つよう、さまざまなプロパティが変更されます。
注
True を選択すると、pre_creation_cmdアーティクル プロパティの値が 'drop' に設定されます。 この設定は、レプリケーションがアーティクル内のテーブルの名前と一致する場合にサブスクライバーでテーブルを削除することを指定します。 保持するテーブルが購読者にある場合は、各記事に対してsp_changearticleストアドプロシージャを使用し、pre_creation_cmdに値 'none' を指定します:
sp_changearticle @publication= 'MyPublication', @article= 'MyArticle', @property='pre_creation_cmd', @value='none'
。OK をクリックします。 パブリケーションの新しいスナップショットを作成するように求められます。 現時点で作成しない場合は、後で次の「方法」手順で説明されている手順を使用します。
SQL Server 以外のサブスクライバーのサブスクリプションを作成するには
[レプリケーション] フォルダーを展開し、[ローカル パブリケーション] フォルダーを展開します。
適切なパブリケーションを右クリックし、[ 新しいサブスクリプション] をクリックします。
[ ディストリビューション エージェントの場所 ] ページ で、[ディストリビューターですべてのエージェントを実行する] が選択されていることを確認します。 SQL Server 以外のサブスクライバーは、サブスクライバーでのエージェントの実行をサポートしていません。
[ サブスクライバー ] ページで、[ サブスクライバーの追加 ] をクリックし、[ SQL Server 以外のサブスクライバーの追加] をクリックします。
[ SQL Server 以外のサブスクライバーの追加 ] ダイアログ ボックスで、サブスクライバーの種類を選択します。
データ ソース名に値を入力します。
Oracle の場合、これは構成した透過的なネットワーク 基板 (TNS) の名前です。
IBM の場合、これは任意の名前にすることができます。 通常、サブスクライバーのネットワーク アドレスを指定します。
この手順で入力したデータ ソース名と手順 9 で指定した資格情報は、このウィザードでは検証されません。 ディストリビューション エージェントがサブスクリプションに対して実行されるまで、レプリケーションでは使用されません。 クライアント ツール ( sqlplus for Oracle など) を使用してサブスクライバーに接続して、すべての値がテストされていることを確認します。 詳細については、 Oracle サブスクライバー および IBM DB2 サブスクライバーを参照してください。
OK をクリックします。 ウィザードの [サブスクライバー] ページで、[サブスクライバー] 列に[サブスクリプションデータベース] 列に読み取り専用 (既定の宛先) が表示されるようになりました。
Oracle の場合、サーバーには最大 1 つのデータベースがあるため、データベースを指定する必要はありません。
IBM DB2 の場合、データベースは DB2 接続文字列の 初期カタログ ・プロパティーで指定されます。このプロパティーは、このプロセスで後述する 「追加接続オプション 」フィールドに入力できます。
[ ディストリビューション エージェントのセキュリティ ] ページで、サブスクライバーの横にあるプロパティ ボタン (...) をクリックして、[ ディストリビューション エージェントのセキュリティ ] ダイアログ ボックスにアクセスします。
[ ディストリビューション エージェントのセキュリティ ] ダイアログ ボックスで、次の手順を実行します。
[ プロセス アカウント]、[ パスワード]、[ パスワードの確認 ] フィールドに、ディストリビューション エージェントを実行する Microsoft Windows アカウントとパスワードを入力し、ディストリビューターへのローカル接続を行います。
アカウントには、次の最小限のアクセス許可が必要です。ディストリビューション データベース の固定 データベース ロールdb_ownerメンバーです。パブリケーション アクセス リスト (PAL) のメンバー。スナップショット共有に対する読み取りアクセス許可。OLE DB プロバイダーのインストール ディレクトリに対する読み取りアクセス許可。 PAL の詳細については、「Secure the Publisher (パブリッシャーのセキュリティ保護)」を参照してください。
[ サブスクライバーへの接続] の [ ログイン]、[ パスワード]、[ パスワードの確認 ] フィールドに、サブスクライバーへの接続に使用するログインとパスワードを入力します。 このログインは既に構成されている必要があり、サブスクリプション データベースにオブジェクトを作成するための十分なアクセス許可が必要です。
[ 追加の接続オプション ] フィールドで、接続文字列の形式でサブスクライバーの接続オプションを指定します (Oracle では追加のオプションは必要ありません)。 各オプションはセミコロンで区切る必要があります。 DB2 接続文字列の例を次に示します (改行は読みやすくするために行われます)。
Provider=DB2OLEDB;Initial Catalog=MY_SUBSCRIBER_DB;Network Transport Library=TCP;Host CCSID=1252; PC Code Page=1252;Network Address=MY_SUBSCRIBER;Network Port=50000;Package Collection=MY_PKGCOL; Default Schema=MY_SCHEMA;Process Binary as Character=False;Units of Work=RUW;DBMS Platform=DB2/NT; Persist Security Info=False;Connection Pooling=True;
文字列内のほとんどのオプションは、構成する DB2 サーバーに固有ですが、[ バイナリを文字として処理 ] オプションは常に False に設定する必要があります。 サブスクリプション データベースを識別するには、 初期カタログ オプションに値が必要です。
[ 同期スケジュール] ページで、[エージェント スケジュール ] メニューから ディストリビューション エージェントのスケジュールを選択します (通常、スケジュールは 継続的に実行されます)。
[ サブスクリプションの初期化 ] ページで、サブスクリプションを初期化するかどうかを指定し、初期化する必要がある場合は次のように指定します。
すべてのオブジェクトを作成し、サブスクリプション データベースに必要なすべてのデータを追加した場合にのみ、[ 初期化 ] をオフにします。
このウィザードの完了後にディストリビューション エージェントがスナップショット ファイルをサブスクライバーに転送するには、[初期化時] 列のドロップダウン リストから [即時] を選択します。 [ 初回同期時 ] を選択すると、次回実行がスケジュールされるときにエージェントがファイルを転送できるようになります。
[ ウィザードの操作] ページで、必要に応じてサブスクリプションのスクリプトを作成します。 詳細については、「 レプリケーションのスクリプト作成」を参照してください。
サブスクライバーでテーブルを保持するには
- 既定では、SQL Server 以外のサブスクライバーのパブリケーションを有効にすると、 pre_creation_cmdアーティクル プロパティの値が 'drop' に設定されます。 この設定は、レプリケーションがアーティクル内のテーブルの名前と一致する場合にサブスクライバーでテーブルを削除することを指定します。 保持するテーブルがサブスクライバーにある場合は、各アーティ クルのsp_changearticle ストアド プロシージャを使用します。 pre_creation_cmdの値 'none' を指定します。
sp_changearticle @publication= 'MyPublication', @article= 'MyArticle', @property='pre_creation_cmd', @value='none'
。
パブリケーションのスナップショットを生成するには
[レプリケーション] フォルダーを展開し、[ローカル パブリケーション] フォルダーを展開します。
パブリケーションを右クリックし、[ スナップショット エージェントの状態の表示] をクリックします。
[ スナップショット エージェントの状態の表示 - <発行> ] ダイアログ ボックスで、[ 開始] をクリックします。
スナップショット エージェントがスナップショットの生成を完了すると、"[100%] 17 個のアーティクルのスナップショットが生成されました" などのメッセージが表示されます。
Transact-SQL の使用
レプリケーション ストアド プロシージャを使用して、SQL Server 以外のサブスクライバーへのプッシュ サブスクリプションをプログラムで作成できます。
重要
可能な場合は、実行時にセキュリティ資格情報の入力をユーザーに求めます。 スクリプト ファイルに資格情報を格納する必要がある場合は、未承認のアクセスを防ぐためにファイルをセキュリティで保護する必要があります。
SQL Server 以外のサブスクライバーへのトランザクション パブリケーションまたはスナップショット パブリケーションのプッシュ サブスクリプションを作成するには
パブリッシャーとディストリビューターの両方に、SQL Server 以外のサブスクライバー用の最新の OLE DB プロバイダーをインストールします。 OLE DB プロバイダーのレプリケーション要件については、「 SQL Server 以外のサブスクライバー、 Oracle サブスクライバー、 IBM DB2 サブスクライバー」を参照してください。
パブリケーション データベースのパブリッシャーで、sp_helppublication (Transact-SQL) を実行して、パブリケーションが SQL Server 以外のサブスクライバーをサポートしていることを確認します。
enabled_for_het_sub
の値が 1 の場合、SQL Server 以外のサブスクライバーがサポートされます。enabled_for_het_sub
の値が 0 の場合は、sp_changepublication (Transact-SQL) を実行し、@propertyのenabled_for_het_sub
と@valueのtrue
を指定します。注
enabled_for_het_sub
をtrue
に変更する前に、パブリケーションへの既存のサブスクリプションを削除する必要があります。 パブリケーションでサブスクリプションの更新もサポートされている場合、enabled_for_het_sub
をtrue
に設定することはできません。enabled_for_het_sub
を変更すると、他のパブリケーションのプロパティに影響します。 詳細については、「 SQL Server 以外のサブスクライバー」を参照してください。
パブリッシャー側のパブリケーション データベースで、 sp_addsubscription (Transact-SQL) を実行します。 @publication、@subscriber、@destination_dbの値 (既定の変換先)、@subscription_typeのプッシュ値、@subscriber_typeの値 3 (OLE DB プロバイダーを指定) を指定します。
パブリッシャー側のパブリケーション データベースで、 sp_addpushsubscription_agent (Transact-SQL) を実行します。 次を指定します。
@subscriberパラメーターと@publication パラメーター。
@subscriber_dbの値 (既定の変換先)
@subscriber_provider、@subscriber_datasrc、@subscriber_location、@subscriber_provider_string、@subscriber_catalogの SQL Server 以外のデータ ソースのプロパティ。
ディストリビューターのディストリビューション エージェントが@job_loginおよび@job_passwordに対して実行される Microsoft Windows 資格情報。
注
Windows 統合認証を使用して行われる接続では、常に @job_login と @job_passwordで指定された Windows 資格情報が使用されます。 ディストリビューション エージェントは、常に Windows 統合認証を使用してディストリビューターにローカル接続します。 既定では、エージェントは Windows 統合認証を使用してサブスクライバーに接続します。
@subscriber_security_modeの値が0の場合、@subscriber_loginと@subscriber_passwordにはOLE DBプロバイダーのログイン情報を使用します。
このサブスクリプションのディストリビューション エージェント ジョブのスケジュール。 詳細については、「 同期スケジュールの指定」を参照してください。
重要
リモート ディストリビューターを使用してパブリッシャーでプッシュ サブスクリプションを作成すると、 job_login や job_passwordを含むすべてのパラメーターに指定された値がプレーン テキストとしてディストリビューターに送信されます。 このストアド プロシージャを実行する前に、パブリッシャーとそのリモート ディストリビューター間の接続を暗号化する必要があります。 詳細については、「データベース エンジンへの暗号化接続の有効化 (SQL Server 構成マネージャー)」を参照してください。
こちらもご覧ください
IBM DB2 サブスクライバー
Oracle サブスクライバー
その他の SQL Server 以外のサブスクライバー
レプリケーション システム ストアド プロシージャの概念
レプリケーション のセキュリティに関するベスト プラクティス