sp_addpullsubscription (Transact-SQL)

适用于: SQL Server Azure SQL 托管实例

将请求订阅添加到快照或事务发布中。 此存储过程在订阅服务器上要创建请求订阅的数据库中执行。

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,无默认值。

注意

可以将服务器名称指定为 <Hostname>,<PortNumber> 默认实例或 <Hostname>\<InstanceName>,<PortNumber> 命名实例。 使用自定义端口在 Linux 或 Windows 上部署 SQL Server 时指定连接的端口号,并禁用浏览器服务。 远程分发服务器的自定义端口号的使用适用于 SQL Server 2019 (15.x) 及更高版本。

[ @publisher_db = ] N'publisher_db'

发布服务器数据库的名称。 @publisher_db为 sysname,默认值为 NULL. Oracle 发布服务器将忽略@publisher_db

[ @publication = ] N'publication'

发布的名称。 @publicationsysname,无默认值。

[ @independent_agent = ] N'independent_agent'

指定此出版物是否有独立分发代理。 @independent_agent为 nvarchar(5),默认值为 true.

  • 如果true,此出版物有独立的分发代理。
  • 如果false,每个发布服务器数据库/订阅服务器数据库对都有一个分发代理。

@independent_agent是发布的属性,必须具有与发布服务器相同的值。

[ @subscription_type = ] N'subscription_type'

订阅的类型。 @subscription_type为 nvarchar(9),默认值为 anonymous. 你必须为 @subscription_type 指定一个值pull,除非你想要创建订阅而不在发布服务器上注册订阅。 在这种情况下,必须指定值 。anonymous 对于在订阅配置期间无法与发布服务器建立 SQL Server 连接的情况,这是必需的。

[ @description = ] N'description'

发布的说明。 @descriptionnvarchar(100),默认值为 NULL.

[ @update_mode = ] N'update_mode'

更新的类型。 @update_mode为 nvarchar(30),可以是以下值之一。

说明
read only(默认值) 该订阅是只读的。 订阅服务器上的任何更改不会发回发布服务器。 应在订阅服务器上未进行更新时使用。
synctran 支持立即更新订阅。
queued tran 支持订阅进行排队更新。 可以在订阅服务器上进行数据修改,将其存储在队列中,然后传播到发布服务器。
failover 将排队更新作为故障转移的情况下启用用于即时更新的订阅。 可以在订阅服务器上进行数据修改并立即传播到发布服务器。 如果发布服务器和订阅服务器未连接,则在订阅服务器和发布服务器重新连接之前,可以在队列中存储对订阅服务器进行的数据修改。
queued failover 注意: Oracle 发布服务器不支持。

支持将订阅作为排队更新订阅,并允许更改为立即更新模式。 在订阅服务器和发布服务器之间建立连接之前,可以在订阅服务器上修改数据,并将数据修改存储在队列中。 建立起持续连接后,即可将更新模式更改为立即更新。

[ @immediate_sync = ] immediate_sync

指定每次运行快照代理时是创建还是重新创建同步文件。 @immediate_sync是,默认值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