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'
项目名。article 的数据类型为 sysname,默认值为 all。 对于即时更新发布,article 必须为 all;否则,存储过程将跳过该发布并报告错误。[ @subscriber=] 'subscriber'
订阅服务器名。subscriber 的数据类型为 sysname,无默认值。[ @destination_db=] 'destination_db'
目标数据库名。destination_db 的数据类型为 sysname,默认值为 all。[ @for_schema_change=] 'for_schema_change'
指示发布数据库中的架构更改是否导致重新初始化。for_schema_change 的数据类型为 bit,默认值为 0。如果为 0,则只要整个发布而不是仅其中的部分项目被重新初始化,就会重新激活允许即时更新的活动发布订阅。 这意味着,架构更改导致启动重新初始化。 如果为 1,在运行快照代理前不会重新激活活动订阅。[@publisher= ] 'publisher'
指定一个非 SQL Server 发布服务器。publisher 的数据类型为 sysname,默认值为 NULL。注意 publisher 不应用于 SQL Server 发布服务器。
[ @ignore_distributor_failure= ] ignore_distributor_failure
即使分发服务器不存在或脱机,也可以重新初始化。ignore_distributor_failure 的数据类型为 bit,默认值为 0。如果为 0,则分发服务器不存在或脱机时,重新初始化会失败。[ @invalidate_snapshot= ] invalidate_snapshot
使现有的发布快照无效。invalidate_snapshot 的数据类型为 bit,默认值为 0。如果为 1,则为发布生成新快照。
返回代码值
0(成功)或 1(失败)
注释
sp_reinitsubscription 用于事务复制。
对等事务复制不支持 sp_reinitsubscription。
对于自动应用初始快照和发布不允许可更新订阅的订阅,执行此存储过程之后必须运行快照代理,以便准备架构和大容量复制程序文件,并使分发代理随后能够重新同步订阅。
对于自动应用初始快照和发布允许可更新订阅的订阅,分发代理使用先前由快照代理创建的最新架构和大容量复制程序文件重新同步订阅。 如果分发代理不忙,则在用户执行 sp_reinitsubscription 后,分发代理将立即重新同步订阅;否则,可能会在消息间隔(由分发代理命令提示符参数:MessageInterval)。
sp_reinitsubscription 对手动应用初始快照的订阅没有影响。
若要重新同步发布的匿名订阅,请将 all 或 NULL 作为 subscriber 传递。
事务复制支持项目级的订阅重新初始化。 当项目被标记为要重新初始化后,在下一个同步过程中将在订阅服务器上重新应用项目快照。 但是,如果有相关的项目也由同一个订阅服务器订阅,那么在项目上重新应用快照可能会失败,除非发布中的相关项目在某些情况下也自动重新初始化:
如果项目上的预创建命令是“删除”,则项目基对象上的架构绑定视图和架构绑定存储过程也将被标记为要重新初始化。
如果项目上的架构选项包括在主键上创建声明引用完整性脚本,则基表同重新初始化项目的基表有外键关系的项目也将被标记为要重新初始化。
示例
-- 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'AdventureWorks2008R2Replica';
SET @publication = N'AdvWorksProductTran';
USE [AdventureWorks2008R2Replica]
-- 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。