sp_addpullsubscription (Transact-SQL)

スナップショット パブリケーションまたはトランザクション パブリケーションにプル サブスクリプションを追加します。このストアド プロシージャは、プル サブスクリプションが作成されるデータベース上のサブスクライバ側で実行されます。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

sp_addpullsubscription [ @publisher= ] 'publisher'
    [ , [ @publisher_db= ] 'publisher_db' ]
        , [ @publication= ] 'publication'
    [ , [ @independent_agent= ] 'independent_agent' ]
    [ , [ @subscription_type= ] 'subscription_type' ]
    [ , [ @description= ] 'description' ]
    [ , [ @update_mode= ] 'update_mode' ]
    [ , [ @immediate_sync = ] immediate_sync ]

引数

  • [ @publisher = ] 'publisher'
    パブリッシャの名前を指定します。publisher のデータ型は sysname で、既定値はありません。

  • [ @publisher_db=] 'publisher_db'
    パブリッシャ データベースの名前を指定します。publisher_db のデータ型は sysname で、既定値は NULL です。publisher_db は Oracle パブリッシャでは無視されます。

  • [ @publication = ] 'publication'
    パブリケーションの名前を指定します。publication のデータ型は sysname で、既定値はありません。

  • [ @independent_agent=] 'independent_agent'
    このパブリケーションに対して、スタンドアロン ディストリビューション エージェントが存在するかどうかを指定します。independent_agent のデータ型は nvarchar(5) で、既定値は TRUE です。値が true の場合は、このパブリケーションに対して、単独のディストリビューション エージェントが存在することを示します。値が false の場合は、パブリッシャ データベースとサブスクライバ データベースの 1 つの組み合わせにつき 1 つのディストリビューション エージェントが存在します。independent_agent はパブリケーションのプロパティであり、この値に相当するパブリッシャ側の値と同じにする必要があります。

  • [ @subscription_type=] 'subscription_type'
    サブスクリプションの種類を指定します。subscription_type のデータ型は nvarchar(9) で、既定値は anonymous です。subscription_type には値 pull を設定する必要があります。ただし、パブリッシャ側でサブスクリプションを登録せずにサブスクリプションを作成する場合は、値 anonymous を設定します。これは、サブスクリプションの構成中にパブリッシャへ SQL Server 接続を確立できない場合に対応するためです。

  • [ @description =] 'description'
    パブリケーションの説明を指定します。description のデータ型は nvarchar(100) で、既定値は NULL です。

  • [ @update_mode=] 'update_mode'
    更新の種類を指定します。update_mode のデータ型は nvarchar(30) で、次のいずれかの値を指定できます。

    説明

    read only (既定値)

    サブスクリプションは読み取り専用です。サブスクライバで加えられた変更はパブリッシャには送り返されません。サブスクライバで更新を行わない場合に使用します。

    synctran

    即時更新サブスクリプションのサポートを有効にします。

    queued tran

    サブスクリプションのキュー更新を有効にします。サブスクライバでデータを変更し、キューに格納し、それをパブリッシャに配信することができます。

    failover

    キュー更新をフェールオーバーとするサブスクリプションの即時更新を有効にします。サブスクライバでデータを変更し、それを直ちにパブリッシャに配信することができます。パブリッシャとサブスクライバが接続されていない場合は、サブスクライバとパブリッシャが接続されるまで、サブスクライバで加えられたデータの変更をキューに格納することができます。

    queued failover

    即時更新モードへの変更が可能なキュー更新サブスクリプションとしてサブスクリプションを有効にします。サブスクライバでデータを変更し、サブスクライバとパブリッシャの間の接続が確立されるまで、その変更をキューに格納することができます。継続的な接続が確立された場合は、更新モードを即時更新に変更できます。Oracle パブリッシャの場合はサポートされません。

  • [ @immediate_sync =] immediate_sync
    スナップショット エージェントを実行するたびに同期ファイルを作成または再作成するかどうかを指定します。immediate_sync のデータ型は bit で、既定値は 1 です。また、sp_addpublication の immediate_sync と同じ値に設定する必要があります。immediate_sync はパブリケーションのプロパティであり、この値に相当するパブリッシャ側の値と同じにする必要があります。

リターン コード値

0 (成功) または 1 (失敗)

説明

sp_addpullsubscription は、スナップショット レプリケーションおよびトランザクション レプリケーションで使用します。

セキュリティに関する注意セキュリティに関する注意

キュー更新サブスクリプションの場合、サブスクライバへの接続には SQL Server 認証を使用し、各サブスクライバへの接続にはそれぞれ異なるアカウントを指定してください。キュー更新をサポートするプル サブスクリプションを作成する場合は、レプリケーションによって、常に Windows 認証を使用するように接続が設定されます (プル サブスクリプションでは、SQL Server 認証を使用するために必要な、サブスクライバ側のメタデータにレプリケーションからアクセスすることはできません)。この場合は、サブスクリプションを構成した後に sp_changesubscription を実行して、SQL Server 認証を使用するように接続を変更する必要があります。

MSreplication_subscriptions (Transact-SQL) テーブルがサブスクライバにない場合は、sp_addpullsubscription によってそのテーブルが作成されます。MSreplication_subscriptions (Transact-SQL) テーブルの行も追加されます。プル サブスクリプションの場合、最初にパブリッシャで sp_addsubscription (Transact-SQL) を呼び出す必要があります。

使用例

-- 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 @publisher AS sysname;
DECLARE @publicationDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2008R2';

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [AdventureWorks2008R2Replica]
EXEC sp_addpullsubscription 
  @publisher = @publisher, 
  @publication = @publication, 
  @publisher_db = @publicationDB;

-- Add an agent job to synchronize the pull subscription.
EXEC sp_addpullsubscription_agent 
  @publisher = @publisher, 
  @publisher_db = @publicationDB, 
  @publication = @publication, 
  @distributor = @publisher, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

権限

sp_addpullsubscription を実行できるのは、sysadmin 固定サーバー ロールまたは db_owner 固定データベース ロールのメンバだけです。