プッシュ サブスクリプションを作成する方法 (レプリケーション Transact-SQL プログラミング)

プッシュ サブスクリプションは、レプリケーション ストアド プロシージャを使用してプログラムで作成できます。使用するストアド プロシージャは、サブスクリプションが属するパブリケーションの種類によって変わります。

ms146912.security(ja-jp,SQL.90).gifセキュリティ メモ :
可能な場合は、実行時にセキュリティ資格情報の入力を求めるメッセージをユーザーに対して表示します。スクリプト ファイルに資格情報を格納する必要がある場合、不正なアクセスを防ぐために、ファイルをセキュリティ保護する必要があります。

スナップショット パブリケーションまたはトランザクション パブリケーションに対するプッシュ サブスクリプションを作成するには

  1. パブリッシャのパブリケーション データベースで、sp_helppublication を実行することにより、パブリケーションがプッシュ サブスクリプションをサポートしていることを確認します。

    • allow_push の値が 1 の場合、プッシュ サブスクリプションがサポートされます。
    • allow_push の値が 0 の場合、@propertyallow_push を、@valuetrue を指定して sp_changepublication を実行します。
  2. パブリッシャのパブリケーション データベースで、sp_addsubscription を実行します。@publication@subscriber、および @destination_db を指定します。@subscription_type には push を指定します。サブスクリプションの更新方法については、「トランザクション パブリケーションに対して更新可能なサブスクリプションを作成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

  3. パブリッシャのパブリケーション データベースで、sp_addpushsubscription_agent を実行します。次の指定を行います。

    • @subscriber パラメータ、@subscriber_db パラメータ、および @publication パラメータ。
    • ディストリビュータで実行されるディストリビューション エージェントが使用する Microsoft Windows 資格情報。@job_login および @job_password に指定します。
      ms146912.note(ja-jp,SQL.90).gifメモ :
      Windows 統合認証を使用して行われる接続では、常に @job_login および @job_password で指定された Windows 資格情報が使用されます。ディストリビューション エージェントは、常に Windows 統合認証を使用してディストリビュータにローカル接続します。既定では、エージェントは Windows 統合認証を使用してサブスクライバに接続します。
    • (省略可) @subscriber_security_mode0 を指定し、@subscriber_login および @subscriber_password に Microsoft SQL Server ログイン情報を指定します。サブスクライバに接続するときに SQL Server 認証を使用する必要がある場合、これらのパラメータを指定します。
    • このサブスクリプションでのディストリビューション エージェント ジョブのスケジュール。詳細については、「同期スケジュールを指定する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
    ms146912.security(ja-jp,SQL.90).gifセキュリティ メモ :
    リモート ディストリビュータを使用するパブリッシャ側でプッシュ サブスクリプションを作成する場合は、job_login および job_password を含むすべてのパラメータに指定された値がディストリビュータにプレーン テキストとして送信されます。このストアド プロシージャを実行する前に、パブリッシャとそのリモート ディストリビュータ間の接続を暗号化する必要があります。詳細については、「SQL Server への接続の暗号化」を参照してください。

マージ パブリケーションに対するプッシュ サブスクリプションを作成するには

  1. パブリッシャのパブリケーション データベースで、sp_helpmergepublication を実行することにより、パブリケーションがプッシュ サブスクリプションをサポートしていることを確認します。

    • allow_push の値が 1 の場合、パブリケーションでプッシュ サブスクリプションがサポートされます。
    • allow_push の値が 1 ではない場合、@propertyallow_push を、@valuetrue を指定して sp_changemergepublicationを実行します。
  2. パブリッシャのパブリケーション データベースで、次のパラメータを指定して sp_addmergesubscription を実行します。

    • @publication。これはパブリケーションの名前です。
    • @subscriber_type。クライアント サブスクリプションの場合は local を指定し、サーバー サブスクリプションの場合は global を指定します。
    • @subscription_priority。サーバー サブスクリプションの場合、サブスクリプションの優先度 (0.0099.99) を指定します。
      詳細については、「マージ レプリケーションの競合検出および解決の詳細」を参照してください。
  3. パブリッシャのパブリケーション データベースで、sp_addmergepushsubscription_agent を実行します。次の指定を行います。

    • @subscriber パラメータ、@subscriber_db パラメータ、および @publication パラメータ。
    • ディストリビュータで実行されるマージ エージェントが使用する Windows 資格情報。@job_login および @job_password に指定します。
      ms146912.note(ja-jp,SQL.90).gifメモ :
      Windows 統合認証を使用して行われる接続では、常に @job_login および @job_password で指定された Windows 資格情報が使用されます。マージ エージェントは、常に Windows 統合認証を使用してディストリビュータにローカル接続します。既定では、エージェントは Windows 統合認証を使用してサブスクライバに接続します。
    • (省略可) @subscriber_security_mode0 を指定し、@subscriber_login および @subscriber_password に SQL Server ログイン情報を指定します。サブスクライバに接続するときに SQL Server 認証を使用する必要がある場合、これらのパラメータを指定します。
    • (省略可) @publisher_security_mode0 を指定し、@publisher_login および @publisher_password に SQL Server ログイン情報を指定します。パブリッシャに接続するときに SQL Server 認証を使用する必要がある場合、これらの値を指定します。
    • このサブスクリプションでのマージ エージェント ジョブのスケジュール。詳細については、「同期スケジュールを指定する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
    ms146912.security(ja-jp,SQL.90).gifセキュリティ メモ :
    リモート ディストリビュータを使用するパブリッシャ側でプッシュ サブスクリプションを作成する場合は、job_login および job_password を含むすべてのパラメータに指定された値がディストリビュータにプレーン テキストとして送信されます。このストアド プロシージャを実行する前に、パブリッシャとそのリモート ディストリビュータ間の接続を暗号化する必要があります。詳細については、「SQL Server への接続の暗号化」を参照してください。

使用例

次の例では、トランザクション パブリケーションに対するプッシュ サブスクリプションを作成します。ログインとパスワードの値は、sqlcmd スクリプト変数を使用して実行時に指定されます。

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks]
EXEC sp_addsubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @destination_db = @subscriptionDB, 
  @subscription_type = N'push';

--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

次の例では、マージ パブリケーションに対するプッシュ サブスクリプションを作成します。ログインとパスワードの値は、sqlcmd スクリプト変数を使用して実行時に指定されます。

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica'; 
SET @hostname = N'adventure-works\david8'

-- Add a push subscription to a merge publication.
USE [AdventureWorks]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'push',
  @hostname = @hostname;

--Add an agent job to synchronize the push subscription.
EXEC sp_addmergepushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

参照

処理手順

プル サブスクリプションを作成する方法 (レプリケーション Transact-SQL プログラミング)
プッシュ サブスクリプションを作成する方法 (RMO プログラミング)

その他の技術情報

パブリケーションのサブスクライブ
sqlcmd でのスクリプト変数の使用

ヘルプおよび情報

SQL Server 2005 の参考資料の入手