将当前打开的事务标记为指定订阅服务器的订阅级验证事务。必须与 sp_article_validation 一起使用,并使 @subscription_level 等于 1。还可以和其它对 sp_marksubscriptionvalidation 的调用一起使用,为其它订阅服务器标记当前打开的事务。此存储过程在发布服务器的发布数据库上执行。
sp_marksubscriptionvalidation [ @publication = ] 'publication'
, [ @subscriber = ] 'subscriber'
, [ @destination_db = ] 'destination_db'
[@publication =] 'publication'
是发布名。Publication 的数据类型为 sysname,无默认值。
[@subscriber = ] 'subscriber'
是订阅服务器名称。subscriber 的数据类型为 sysname,无默认值。
[@destination_db =] 'destination_db'
是目的数据库名。destination_db 的数据类型为 sysname,无默认值。
0(成功)或 1(失败)
sp_marksubscriptionvalidation
用于所有类型的复制。此存储过程不支持异类订阅服务器。
只有 sysadmin 固定服务器角色成员或 db_owner 固定数据库角色成员才能执行 sp_marksubscriptionvalidation。
下面的查询可应用到发布数据库,以发布订阅级验证命令。下列命令将由指定的订阅服务器的分发代理程序挑选。
begin tran
exec sp_marksubscriptionvalidation @publication = 'pub1',
@subscriber = 'Sub', @destination_db = 'SubDB'
exec sp_marksubscriptionvalidation @publication = 'pub1',
@subscriber = 'Sub2', @destination_db = 'SubDB'
exec sp_article_validation @publication = 'pub1', @article = 'art1',
@rowcount_only = 0, @full_or_fast = 0, @shutdown_agent = 0,
@subscription_level = 1
commit tran
begin tran
exec sp_marksubscriptionvalidation @publication = 'pub1',
@subscriber = 'Sub', @destination_db = 'SubDB'
exec sp_marksubscriptionvalidation @publication = 'pub1',
@subscriber = 'Sub2', @destination_db = 'SubDB'
exec sp_article_validation @publication = 'pub1', @article = 'art2',
@rowcount_only = 0, @full_or_fast = 0, @shutdown_agent = 0,
@subscription_level = 1
commit tran
请注意,第一个事务验证项目"art1",而第二个事务验证"art2"。还请注意,已把对 sp_marksubscriptionvalidation 和 sp_articlevalidation 的调用封装进了事务中。建议每个事务只调用一次 sp_articlevalidation。这是因为在事务的生存周期内,sp_article_validation 在源表上控制一个共享表锁。应尽量缩短事务以使并发最大化。