sp_marksubscriptionvalidation (Transact-SQL)
适用范围:SQL Server
将当前打开的事务标记为指定订阅服务器的订阅级验证事务。 此存储过程在发布服务器上对发布数据库执行。
语法
sp_marksubscriptionvalidation
[ @publication = ] N'publication'
, [ @subscriber = ] N'subscriber'
, [ @destination_db = ] N'destination_db'
[ , [ @publisher = ] N'publisher' ]
[ ; ]
参数
[ @publication = ] N'publication'
发布的名称。 @publication 为 sysname,无默认值。
[ @subscriber = ] N'subscriber'
订阅服务器的名称。 @subscriber 为 sysname,无默认值。
[ @destination_db = ] N'destination_db'
目标数据库的名称。 @destination_db为 sysname,无默认值。
[ @publisher = ] N'publisher'
指定非 SQL Server 发布服务器。 @publisher为 sysname,默认值为 NULL
.
@publisher不应用于属于 SQL Server 发布服务器的发布。
返回代码值
0
(成功)或 1
(失败)。
注解
sp_marksubscriptionvalidation
用于事务复制。
sp_marksubscriptionvalidation
不支持非 SQL Server 订阅服务器。
对于非 SQL Server 发布服务器,不能从显式事务中执行 sp_marksubscriptionvalidation
。 这是因为不支持通过用于访问发布服务器的链接服务器连接进行显式事务。
sp_marksubscriptionvalidation
必须与sp_article_validation一起使用,指定@subscription_level的值1
,并可用于其他调用来sp_marksubscriptionvalidation
标记其他订阅者的当前打开事务。
权限
只有 sysadmin 固定服务器角色的成员或db_owner固定数据库角色的成员才能执行sp_marksubscriptionvalidation
。
示例
下面的查询可应用到发布数据库,以发布订阅级验证命令。 下列命令将由指定的订阅服务器的分发代理程序挑选。 第一个事务验证项目 art1
,而第二个事务验证 art2
。 调用 sp_marksubscriptionvalidation
和 sp_article_validation 封装在事务中。 建议每个事务只调用一次sp_article_validation。 这是因为 sp_article_validation 事务期间保留源表上的共享表锁。 应尽量缩短事务以使并发最大化。
BEGIN TRANSACTION;
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 TRANSACTION;
BEGIN TRANSACTION;
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 TRANSACTION;