sp_addpullsubscription (Transact-SQL)
适用于: SQL Server Azure 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'
发布的名称。 @publication 为 sysname,无默认值。
[ @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'
发布的说明。 @description 为 nvarchar(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
。
相关内容
- Create a Pull Subscription
- Create an Updatable Subscription to a Transactional Publication
- Subscribe to Publications
- sp_addpullsubscription_agent (Transact-SQL)
- sp_change_subscription_properties (Transact-SQL)
- sp_droppullsubscription (Transact-SQL)
- sp_helppullsubscription (Transact-SQL)
- sp_helpsubscription_properties (Transact-SQL)
- 系统存储过程 (Transact-SQL)