sp_reinitsubscription (Transact-SQL)
适用于: SQL Server Azure SQL 托管实例
标记用于重新初始化的订阅。 此存储过程在发布服务器的推送订阅中执行。
语法
sp_reinitsubscription
[ [ @publication = ] N'publication' ]
[ , [ @article = ] N'article' ]
, [ @subscriber = ] N'subscriber'
[ , [ @destination_db = ] N'destination_db' ]
[ , [ @for_schema_change = ] for_schema_change ]
[ , [ @publisher = ] N'publisher' ]
[ , [ @ignore_distributor_failure = ] ignore_distributor_failure ]
[ , [ @invalidate_snapshot = ] invalidate_snapshot ]
[ ; ]
参数
[ @publication = ] N'publication'
发布的名称。 @publication为 sysname,默认值为 all
.
[ @article = ] N'article'
项目的名称。 @article为 sysname,默认值为 all
. 对于立即更新的发布, @article 必须是 all
。 否则,存储过程将跳过发布并报告错误。
[ @subscriber = ] N'subscriber'
订阅服务器的名称。 @subscriber 为 sysname,无默认值。
[ @destination_db = ] N'destination_db'
目标数据库的名称。 @destination_db为 sysname,默认值为 all
.
[ @for_schema_change = ] for_schema_change
指示发布数据库中的架构更改是否导致重新初始化。 @for_schema_change 为 位,默认值为 0
.
如果
0
允许立即更新的发布的活动订阅会重新激活,只要整个发布,而不仅仅是部分文章,都会重新初始化。 这意味着,架构更改导致启动重新初始化。如果
1
,则在运行快照代理之前,不会重新激活活动订阅。
[ @publisher = ] N'publisher'
指定非 SQL Server 发布服务器。 @publisher为 sysname,默认值为 NULL
.
不应将@publisher用于 SQL Server 发布服务器。
[ @ignore_distributor_failure = ] ignore_distributor_failure
允许重新初始化,即使分发服务器不存在或处于脱机状态。 @ignore_distributor_failure为位,默认值为 0
. 如果 0
,如果分发服务器不存在或处于脱机状态,则重新初始化失败。
[ @invalidate_snapshot = ] invalidate_snapshot
使现有的发布快照无效。 @invalidate_snapshot为位,默认值为 0
. 如果 1
为发布生成新快照。
返回代码值
0
(成功)或 1
(失败)。
注解
sp_reinitsubscription
用于事务复制。
sp_reinitsubscription
对等事务复制不支持。
对于自动应用初始快照且发布不允许可更新订阅的订阅,在执行此存储过程后必须运行快照代理,以便准备好架构和大容量复制程序文件,然后分发代理能够重新同步订阅。
对于自动应用初始快照的订阅,发布允许可更新的订阅,分发代理使用之前由快照代理创建的架构和大容量复制程序文件重新同步订阅。 分发代理在用户执行sp_reinitsubscription
后立即重新同步订阅(如果分发代理不忙)。 否则,同步可能会在消息间隔后发生(由分发代理命令提示符参数MessageInterval
指定)。
sp_reinitsubscription
对手动应用初始快照的订阅没有影响。
若要将匿名订阅重新同步到发布,请传入 all
或 NULL
作为 @subscriber。
事务复制支持项目级的订阅重新初始化。 当项目被标记为要重新初始化后,在下一个同步过程中将在订阅服务器上重新应用项目快照。 但是,如果有相关的项目也由同一个订阅服务器订阅,那么在项目上重新应用快照可能会失败,除非发布中的相关项目在某些情况下也自动重新初始化:
如果项目上的预创建命令是
drop
,则项目的基础对象上的架构绑定视图和架构绑定存储过程的文章也标记为重新初始化。如果项目上的架构选项包括主键上声明引用完整性的脚本,则具有基表的项目(与重新初始化项目基表的外键关系)也标记为重新初始化。
示例
-- 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".
DECLARE @subscriptionDB AS sysname;
DECLARE @publication AS sysname;
SET @subscriptionDB = N'AdventureWorks2022Replica';
SET @publication = N'AdvWorksProductTran';
USE [AdventureWorks2022Replica]
-- Execute at the Publisher to reinitialize the push subscription.
EXEC sp_reinitsubscription
@subscriber = $(SubServer),
@destination_db = @subscriptionDB,
@publication = @publication;
GO
-- Start the Distribution Agent.
权限
只有 sysadmin 固定服务器角色的成员、db_owner固定数据库角色的成员或订阅的创建者才能执行sp_reinitsubscription
。