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
は、@subscription_levelの1
の値を指定するsp_article_validationと共に使用する必要があり、他のサブスクライバーの現在開いているトランザクションをマークするためにsp_marksubscriptionvalidation
する他の呼び出しで使用できます。
アクセス許可
sysadmin固定サーバー ロールまたは固定データベース ロールdb_ownerのメンバーのみがsp_marksubscriptionvalidation
を実行できます。
例
次のクエリは、サブスクリプションレベルの検証コマンドを通知するために、パブリッシング データベースに適用できます。 これらのコマンドは、指定されたサブスクライバーのディストリビューション エージェントによって取得されます。 最初のトランザクションはアーティクル art1
を検証し、2 番目のトランザクションは art2
を検証します。 sp_marksubscriptionvalidation
とsp_article_validationの呼び出しは、トランザクションにカプセル化されます。 トランザクションごとに sp_article_validation する呼び出しは 1 つだけお勧めします。 これは、 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;