トランザクション パブリケーションに対して更新可能なサブスクリプションを作成する方法 (レプリケーション Transact-SQL プログラミング)

注意

この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。

トランザクション レプリケーションは、即時更新サブスクリプションまたはキュー更新サブスクリプションを使用して、サブスクライバでの変更がパブリッシャに反映されるようにします。レプリケーション ストアド プロシージャを使用して、更新サブスクリプションをプログラムで作成できます。

即時更新プル サブスクリプションを作成するには

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

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

    • 結果セットの allow_pull の値が 1 である場合、パブリケーションはプル サブスクリプションをサポートします。

    • allow_pull の値が 0 である場合は、@propertyallow_pull を、@value に true を指定して、sp_changepublication を実行します。

  3. サブスクライバで、sp_addpullsubscription を実行します。@publisher および @publication を指定し、@update_mode に次のいずれかの値を指定します。

    • synctran - サブスクリプションの即時更新を有効にします。

    • failover - キュー更新をフェールオーバー オプションとする即時更新を即時更新サブスクリプションで有効にします。

      注意

      failover では、パブリケーションでもキュー更新サブスクリプションが有効になっていることが必要です。

  4. サブスクライバで、sp_addpullsubscription_agent を実行します。次の指定を行います。

    • @publisher@publisher_db、および @publication の各パラメータ。

    • @job_login および @job_password に、サブスクライバでディストリビューション エージェントを実行するときに使用する Microsoft Windows 資格情報。

      注意

      Windows 統合認証を使用して作成された接続では、常に、@job_login および @job_password で指定された Windows 資格情報が使用されます。ディストリビューション エージェントは、常に Windows 統合認証を使用してサブスクライバへのローカル接続を作成します。既定では、エージェントは Windows 統合認証を使用してディストリビュータに接続します。

    • (省略可) ディストリビュータへの接続時に SQL Server 認証を使用する必要がある場合は、@distributor_security_mode0@distributor_login および @distributor_password に Microsoft SQL Server ログイン情報。

    • このサブスクリプションでのディストリビューション エージェント ジョブのスケジュール。詳細については、「同期スケジュールを指定する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

  5. サブスクライバ側のサブスクリプション データベースに対して、sp_link_publication を実行します。@publisher および @publication を指定し、@publisher_db にパブリケーション データベースの名前を、@security_mode に次のいずれかの値を指定します。

    • 0 - パブリッシャで更新を作成する場合に SQL Server 認証を使用します。このオプションの場合、パブリッシャで、@login および @password に有効なログインを指定する必要があります。

    • 1 - パブリッシャへの接続時にサブスクライバで変更するユーザーのセキュリティ コンテキストを使用します。このセキュリティ モードに関連する制限の詳細については、sp_link_publication のトピックを参照してください。

    • 2 - sp_addlinkedserver を使って作成された、既存のユーザー定義リンク サーバー ログインを使用します。

  6. パブリッシャで、@publication@subscriber、および @destination_db を指定し、@subscription_typepull を、@update_mode に手順 3. で指定した値と同じ値を指定して、sp_addsubscription を実行します。

    これにより、パブリッシャでプル サブスクリプションが登録されます。

即時更新プッシュ サブスクリプションを作成するには

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

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

    • 結果セットの allow_push の値が 1 である場合、パブリケーションはプッシュ サブスクリプションをサポートします。

    • allow_push の値が 0 である場合は、@propertyallow_push を、@value に true を指定して、sp_changepublication を実行します。

  3. パブリッシャで、sp_addsubscription を実行します。@publication@subscriber、および @destination_db を指定し、@update_mode に次のいずれかの値を指定します。

    • synctran - 即時更新のサポートを有効にします。

    • failover - キュー更新をフェールオーバー オプションとする即時更新のサポートを有効にします。

      注意

      failover では、パブリケーションでもキュー更新サブスクリプションが有効になっていることが必要です。

  4. パブリッシャで、sp_addpushsubscription_agent を実行します。次のパラメータを指定します。

    • @subscriber@subscriber_db、および @publication

    • ディストリビュータで実行されるディストリビューション エージェントが使用する Windows 資格情報。@job_login および @job_password に指定します。

      注意

      Windows 統合認証を使用して作成された接続では、常に、@job_login および @job_password で指定された Windows 資格情報が使用されます。ディストリビューション エージェントは、常に Windows 統合認証を使用してディストリビュータにローカル接続します。既定では、エージェントは Windows 統合認証を使用してサブスクライバに接続します。

    • (省略可) サブスクライバへの接続時に SQL Server 認証を使用する必要がある場合は、@subscriber_security_mode0@subscriber_login および @subscriber_password に SQL Server ログイン情報。

    • このサブスクリプションでのディストリビューション エージェント ジョブのスケジュール。詳細については、「同期スケジュールを指定する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

  5. サブスクライバ側のサブスクリプション データベースに対して、sp_link_publication を実行します。@publisher および @publication を指定し、@publisher_db にパブリケーション データベースの名前を、@security_mode に次のいずれかの値を指定します。

    • 0 - パブリッシャで更新を作成する場合に SQL Server 認証を使用します。このオプションの場合、パブリッシャで、@login および @password に有効なログインを指定する必要があります。

    • 1 - パブリッシャへの接続時にサブスクライバで変更するユーザーのセキュリティ コンテキストを使用します。このセキュリティ モードに関連する制限の詳細については、sp_link_publication のトピックを参照してください。

    • 2 - sp_addlinkedserver を使って作成された、既存のユーザー定義リンク サーバー ログインを使用します。

キュー更新プル サブスクリプションを作成するには

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

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

    • 結果セットの allow_pull の値が 1 である場合、パブリケーションはプル サブスクリプションをサポートします。

    • allow_pull の値が 0 である場合は、@propertyallow_pull を、@value に true を指定して、sp_changepublication を実行します。

  3. サブスクライバで、sp_addpullsubscription を実行します。@publisher および @publication を指定し、@update_mode に次のいずれかの値を指定します。

    • queued tran - サブスクリプションのキュー更新を有効にします。

    • queued failover - 即時更新をフェールオーバー オプションとするキュー更新のサポートを有効にします。

      注意

      queued failover では、パブリケーションでも即時更新サブスクリプションが有効になっていることが必要です。即時更新へのフェールオーバーを行うために、sp_link_publication を使って、サブスクライバでの変更をパブリッシャにレプリケートするときに使用する資格情報を定義する必要があります。

  4. サブスクライバで、sp_addpullsubscription_agent を実行します。次のパラメータを指定します。

    • @publisher@publisher_db、および @publication の各パラメータ。

    • サブスクライバで実行されるディストリビューション エージェントが使用する Windows 資格情報。@job_login および @job_password に指定します。

      注意

      Windows 統合認証を使用して作成された接続では、常に、@job_login および @job_password で指定された Windows 資格情報が使用されます。ディストリビューション エージェントは、常に Windows 統合認証を使用してサブスクライバへのローカル接続を作成します。既定では、エージェントは Windows 統合認証を使用してディストリビュータに接続します。

    • (省略可) ディストリビュータへの接続時に SQL Server 認証を使用する必要がある場合は、@distributor_security_mode0@distributor_login および @distributor_password に SQL Server ログイン情報。

    • このサブスクリプションでのディストリビューション エージェント ジョブのスケジュール。詳細については、「同期スケジュールを指定する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

  5. パブリッシャで、sp_addsubscriber (Transact-SQL) を実行してパブリッシャでサブスクライバを登録します。

    パブリッシャで、@publication@subscriber、および @destination_db を指定し、@subscription_typepull を、@update_mode に手順 3. で指定した値と同じ値を指定して、sp_addsubscription を実行します。

    これにより、パブリッシャでプル サブスクリプションが登録されます。

キュー更新プッシュ サブスクリプションを作成するには

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

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

    • 結果セットの allow_push の値が 1 である場合、パブリケーションはプッシュ サブスクリプションをサポートします。

    • allow_push の値が 0 である場合は、@propertyallow_push を、@value に true を指定して、sp_changepublication を実行します。

  3. パブリッシャで、sp_addsubscription を実行します。@publication@subscriber、および @destination_db を指定し、@update_mode に次のいずれかの値を指定します。

    • queued tran - サブスクリプションのキュー更新を有効にします。

    • queued failover - 即時更新をフェールオーバー オプションとするキュー更新のサポートを有効にします。

      注意

      queued failover オプションでは、パブリケーションでも即時更新サブスクリプションが有効になっていることが必要です。即時更新へのフェールオーバーを行うために、sp_link_publication を使って、サブスクライバでの変更をパブリッシャにレプリケートするときに使用する資格情報を定義する必要があります。

  4. パブリッシャで、sp_addpushsubscription_agent を実行します。次のパラメータを指定します。

    • @subscriber@subscriber_db、および @publication

    • ディストリビュータで実行されるディストリビューション エージェントが使用する Windows 資格情報。@job_login および @job_password に指定します。

      注意

      Windows 統合認証を使用して作成された接続では、常に、@job_login および @job_password で指定された Windows 資格情報が使用されます。ディストリビューション エージェントは、常に Windows 統合認証を使用してディストリビュータにローカル接続します。既定では、エージェントは Windows 統合認証を使用してサブスクライバに接続します。

    • (省略可) サブスクライバへの接続時に SQL Server 認証を使用する必要がある場合は、@subscriber_security_mode0@subscriber_login および @subscriber_password に SQL Server ログイン情報。

    • このサブスクリプションでのディストリビューション エージェント ジョブのスケジュール。詳細については、「同期スケジュールを指定する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

使用例

この例では、即時更新サブスクリプションをサポートするパブリケーションに対する即時更新プル サブスクリプションを作成します。ログインとパスワードの値は、実行時に 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".

-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS nvarchar(512);
SET @publication = N'AdvWorksProductTran';
SET @publicationDB = N'AdventureWorks2008R2';
SET @publisher = $(PubServer);
SET @login = $(Login);
SET @password = $(Password);

-- At the subscription database, create a pull subscription to a transactional 
-- publication using immediate updating with queued updating as a failover.
EXEC sp_addpullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB, 
    @update_mode = N'failover', 
    @subscription_type = N'pull';

-- Add an agent job to synchronize the pull subscription, 
-- which uses Windows Authentication when connecting to the Distributor.
EXEC sp_addpullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication,
    @job_login = @login,
    @job_password = @password; 

-- Add a Windows Authentication-based linked server that enables the 
-- Subscriber-side triggers to make updates at the Publisher. 
EXEC sp_link_publication 
    @publisher = @publisher, 
    @publication = @publication,
    @publisher_db = @publicationDB, 
    @security_mode = 0,
    @login = @login,
    @password = @password;
GO

USE AdventureWorks2008R2;
GO

-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @subscriber AS sysname;
SET @publication = N'AdvWorksProductTran'; 
SET @subscriptionDB = N'AdventureWorks2008R2Replica'; 
SET @subscriber = $(SubServer);

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks2008R2]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'pull', 
    @update_mode = N'failover';
GO