sp_addpullsubscription (Transact-SQL)

適用対象: SQL ServerAzure SQL Managed Instance

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

Transact-SQL 構文表記規則

構文

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

引数

[ @publisher = ] N'publisher'

パブリッシャーの名前。 @publisherは sysname で、既定値はありません。

Note

サーバー名は次のように <Hostname>,<PortNumber>指定できます。 SQL Server がカスタム ポートを使用して Linux または Windows にデプロイされ、ブラウザー サービスが無効になっている場合に、接続のポート番号を指定します。 リモート ディストリビューターのカスタム ポート番号の使用は、SQL Server 2019 (15.x) 以降のバージョンに適用されます。

[ @publisher_db = ] N'publisher_db'

パブリッシャー データベースの名前。 @publisher_dbは sysname で、既定値は NULL. @publisher_dbは Oracle パブリッシャーによって無視されます。

[ @publication = ] N'publication'

出版物の名前。 @publicationは sysname で、既定値はありません。

[ @independent_agent = ] N'independent_agent'

この文書にスタンドアロン ディストリビューション エージェントがあるかどうかを指定します。 @independent_agentは nvarchar(5) で、既定値は true.

  • この文書にスタンドアロンのディストリビューション エージェントがある場合true
  • 場合falseは、パブリッシャー データベースとサブスクライバー データベースのペアごとに 1 つのディストリビューション エージェントがあります。

@independent_agentはパブリケーションのプロパティであり、パブリッシャーと同じ値を持つ必要があります。

[ @subscription_type = ] N'subscription_type'

サブスクリプションの種類。 @subscription_typeは nvarchar(9) で、既定値は anonymous. パブリッシャーでサブスクリプションを登録せずにサブスクリプションを作成する場合を除き、@subscription_typeの値pullを指定する必要があります。 この場合、値 anonymousを指定する必要があります。 これは、サブスクリプションの構成中にパブリッシャーへの SQL Server 接続を確立できない場合に必要です。

[ @description = ] N'description'

出版物の説明。 @descriptionは nvarchar(100) で、既定値は NULL.

[ @update_mode = ] N'update_mode'

更新プログラムの種類。 @update_modeは nvarchar(30) で、次のいずれかの値を指定できます。

Value 説明
read only (既定値) サブスクリプションは読み取り専用です。 サブスクライバーでの変更はパブリッシャーに送り返されません。 サブスクライバーで更新が行われていない場合に使用する必要があります。
synctran 即時更新サブスクリプションのサポートを有効にします。
queued tran サブスクリプションのキュー更新を有効にします。 データの変更はサブスクライバーで行い、キューに格納してからパブリッシャーに伝達できます。
failover キュー更新をフェールオーバーとするサブスクリプションの即時更新を有効にします。 サブスクライバーでデータを変更し、それを直ちにパブリッシャーに配信することができます。 パブリッシャーとサブスクライバーが接続されていない場合、サブスクライバーとパブリッシャーが再接続されるまで、サブスクライバーで行われたデータ変更をキューに格納できます。
queued failover 注: Oracle パブリッシャーではサポートされていません。

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

[ @immediate_sync = ] immediate_sync

スナップショット エージェントを実行するたびに同期ファイルを作成するか再作成するかを指定します。 @immediate_syncはビットであり、既定値は 1、sp_addpublication (Transact-SQL) の@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'AdventureWorks2022';

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [AdventureWorks2022Replica]
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

アクセス許可

sysadmin 固定サーバー ロールまたは固定データベース ロールdb_ownerメンバーのみが実行sp_addpullsubscriptionできます。