次の方法で共有


sp_addpullsubscription (Transact-SQL)

適用対象: SQL Server Azure 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'

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

Note

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

[ @publisher_db = ] N'publisher_db'

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

[ @publication = ] N'publication'

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

[ @independent_agent = ] N'independent_agent'

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

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

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

[ @subscription_type = ] N'subscription_type'

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

[ @description = ] N'description'

出版物の説明。 @descriptionnvarchar(100) で、既定値は NULL です。

[ @update_mode = ] N'update_mode'

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

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

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

[ @immediate_sync = ] immediate_sync

スナップショット エージェントを実行するたびに同期ファイルを作成するか再作成するかを指定します。 @immediate_syncbit で、既定値は 1 で、sp_addpublication@immediate_syncと同じ値に設定する必要があります。 @immediate_sync はパブリケーションのプロパティであり、パブリッシャーと同じ値を持つ必要があります。

リターン コードの値

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

解説

sp_addpullsubscription は、スナップショット レプリケーションとトランザクション レプリケーションで使用されます。

重要

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

MSreplication_subscriptions テーブルがサブスクライバーに存在しない場合は、テーブルsp_addpullsubscription作成します。 また、 MSreplication_subscriptions テーブルに行が追加されます。 プル サブスクリプションの場合は、最初にパブリッシャーで sp_addsubscription を呼び出す必要があります。

-- 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を実行できます。