プッシュ サブスクリプションを作成する方法 (レプリケーション Transact-SQL プログラミング)
プッシュ サブスクリプションは、レプリケーション ストアド プロシージャを使用してプログラムで作成できます。使用するストアド プロシージャは、サブスクリプションが属するパブリケーションの種類によって変わります。
セキュリティに関する注意 |
---|
可能であれば、実行時にセキュリティ資格情報の入力を求めるメッセージをユーザーに対して表示します。スクリプト ファイルに資格情報を格納する必要がある場合、不正なアクセスを防ぐために、ファイルをセキュリティ保護する必要があります。 |
スナップショット パブリケーションまたはトランザクション パブリケーションに対するプッシュ サブスクリプションを作成するには
パブリッシャ側のパブリケーション データベースに対して、sp_helppublication を実行して、パブリケーションがプッシュ サブスクリプションをサポートしていることを確認します。
allow_push の値が 1 の場合、プッシュ サブスクリプションがサポートされます。
allow_push の値が 0 の場合は、@property に allow_push を、@value に true を指定して、sp_changepublication を実行します。
パブリッシャ側のパブリケーション データベースに対して、sp_addsubscription を実行します。@publication、@subscriber、および @destination_db を指定します。@subscription_type には push を指定します。サブスクリプションの更新方法の詳細については、「トランザクション パブリケーションに対して更新可能なサブスクリプションを作成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
パブリッシャ側のパブリケーション データベースに対して、sp_addpushsubscription_agent を実行します。次の指定を行います。
@subscriber パラメータ、@subscriber_db パラメータ、および @publication パラメータ。
ディストリビュータで実行されるディストリビューション エージェントが使用する Microsoft Windows 資格情報。@job_login および @job_password に指定します。
注意 Windows 統合認証を使用して行われる接続では、常に @job_login および @job_password で指定された Windows 資格情報が使用されます。ディストリビューション エージェントは、常に Windows 統合認証を使用してディストリビュータにローカル接続します。既定では、エージェントは Windows 統合認証を使用してサブスクライバに接続します。
(省略可) @subscriber_security_mode に 0 を指定し、@subscriber_login および @subscriber_password に MicrosoftSQL Server ログイン情報を指定します。サブスクライバに接続するときに SQL Server 認証を使用する必要がある場合、これらのパラメータを指定します。
このサブスクリプションでのディストリビューション エージェント ジョブのスケジュール。詳細については、「同期スケジュールを指定する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
セキュリティに関する注意 リモート ディストリビュータを使用するパブリッシャ側でプッシュ サブスクリプションを作成する場合は、job_login および job_password を含むすべてのパラメータに指定された値がディストリビュータにプレーン テキストとして送信されます。このストアド プロシージャを実行する前に、パブリッシャとそのリモート ディストリビュータ間の接続を暗号化する必要があります。詳細については、「SQL Server への接続の暗号化」を参照してください。
マージ パブリケーションに対するプッシュ サブスクリプションを作成するには
パブリッシャ側のパブリケーション データベースに対して、sp_helpmergepublication を実行して、パブリケーションがプッシュ サブスクリプションをサポートしていることを確認します。
allow_push の値が 1 の場合、パブリケーションでプッシュ サブスクリプションがサポートされます。
allow_push の値が 1 ではない場合は、@property に allow_push を、@value に true を指定して、sp_changemergepublication を実行します。
パブリッシャ側のパブリケーション データベースに対して、sp_addmergesubscription を実行します。次のパラメータを指定します。
@publication。これはパブリケーションの名前です。
@subscriber_type。クライアント サブスクリプションの場合は local を指定し、サーバー サブスクリプションの場合は global を指定します。
@subscription_priority。サーバー サブスクリプションの場合、サブスクリプションの優先度 (0.00 ~ 99.99) を指定します。
詳細については、「マージ レプリケーションの競合検出および解決の詳細」を参照してください。
パブリッシャ側のパブリケーション データベースに対して、sp_addmergepushsubscription_agent を実行します。次の指定を行います。
@subscriber パラメータ、@subscriber_db パラメータ、および @publication パラメータ。
ディストリビュータで実行されるマージ エージェントが使用する Windows 資格情報。@job_login および @job_password に指定します。
注意 Windows 統合認証を使用して行われる接続では、常に @job_login および @job_password で指定された Windows 資格情報が使用されます。マージ エージェントは、常に Windows 統合認証を使用してディストリビュータにローカル接続します。既定では、エージェントは Windows 統合認証を使用してサブスクライバに接続します。
(省略可) @subscriber_security_mode に 0 を指定し、@subscriber_login および @subscriber_password に SQL Server ログイン情報を指定します。サブスクライバに接続するときに SQL Server 認証を使用する必要がある場合、これらのパラメータを指定します。
(省略可) @publisher_security_mode に 0 を指定し、@publisher_login および @publisher_password に SQL Server ログイン情報を指定します。パブリッシャに接続するときに SQL Server 認証を使用する必要がある場合、これらの値を指定します。
このサブスクリプションでのマージ エージェント ジョブのスケジュール。詳細については、「同期スケジュールを指定する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
セキュリティに関する注意 リモート ディストリビュータを使用するパブリッシャ側でプッシュ サブスクリプションを作成する場合は、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