sp_reinitsubscription (Transact-SQL)
标记用于重新初始化的订阅。 此存储过程在发布服务器的推送订阅中执行。
语法
sp_reinitsubscription [ [ @publication = ] 'publication' ]
[ , [ @article = ] 'article' ]
, [ @subscriber = ] 'subscriber'
[ , [ @destination_db = ] 'destination_db']
[ , [ @for_schema_change = ] 'for_schema_change']
[ , [ @publisher = ] 'publisher' ]
[ , [ @ignore_distributor_failure = ] ignore_distributor_failure ]
[ , [ @invalidate_snapshot = ] invalidate_snapshot ]
参数
[ @publication = ] 'publication'
发布的名称。 publication 为 sysname,默认值为 all。
[ @article = ] 'article'
项目的名称。 项目 为 sysname,默认值为 all。 对于立即更新的发布, 项目 必须为 全部;否则,存储过程将跳过发布并报告错误。
[ @subscriber = ] 'subscriber'
订阅服务器的名称。 订阅服务器 为 sysname,无默认值。
[ @destination_db = ] 'destination_db'
目标数据库的名称。 destination_db为 sysname,默认值为 all。
[ @for_schema_change = ] 'for_schema_change'
指示是否由于发布数据库中的架构更改而重新初始化。 for_schema_change 为 位,默认值为 0。 如果 为 0,只要整个发布(而不仅仅是某些项目)重新初始化允许立即更新的发布的活动订阅,都会重新激活。 这意味着,架构更改导致启动重新初始化。 如果为 1,则在运行快照代理之前,不会重新激活活动订阅。
[ @publisher = ] 'publisher'
指定非 SQL Server 发布服务器。 publisher 为 sysname,默认值为 NULL。
注意
发布服务器 不应用于 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对手动应用初始快照的订阅没有影响。
若要将匿名订阅重新同步到发布,请以订阅者身份传入所有订阅或 NULL。
事务复制支持项目级的订阅重新初始化。 当项目被标记为要重新初始化后,在下一个同步过程中将在订阅服务器上重新应用项目快照。 但是,如果有相关的项目也由同一个订阅服务器订阅,那么在项目上重新应用快照可能会失败,除非发布中的相关项目在某些情况下也自动重新初始化:
如果项目上的预创建命令是“删除”,则项目基对象上的架构绑定视图和架构绑定存储过程也将被标记为要重新初始化。
如果项目上的架构选项包括在主键上创建声明引用完整性脚本,则基表同重新初始化项目的基表有外键关系的项目也将被标记为要重新初始化。
示例
-- 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。