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
搭配使用,以標記其他訂閱者的目前開啟交易。
權限
只有系統管理員固定伺服器角色或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;