次の方法で共有


sp_marksubscriptionvalidation (Transact-SQL)

適用対象: SQL Server

現在開いているトランザクションを、指定されたサブスクライバーのサブスクリプション レベルの検証トランザクションとしてマークします。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースで実行されます。

Transact-SQL 構文表記規則

構文

sp_marksubscriptionvalidation
    [ @publication = ] N'publication'
    , [ @subscriber = ] N'subscriber'
    , [ @destination_db = ] N'destination_db'
    [ , [ @publisher = ] N'publisher' ]
[ ; ]

引数

[ @publication = ] N'publication'

出版物の名前。 @publicationsysname で、既定値はありません。

[ @subscriber = ] N'subscriber'

サブスクライバーの名前。 @subscribersysname で、既定値はありません。

[ @destination_db = ] N'destination_db'

転送先データベースの名前。 @destination_dbsysname で、既定値はありません。

[ @publisher = ] N'publisher'

SQL Server 以外のパブリッシャーを指定します。 @publishersysname で、既定値は NULL です。

@publisher は、SQL Server パブリッシャーに属するパブリケーションには使用しないでください。

リターン コードの値

0 (成功) または 1 (失敗)。

解説

sp_marksubscriptionvalidation はトランザクション レプリケーションで使用されます。

sp_marksubscriptionvalidation では、SQL Server 以外のサブスクライバーはサポートされていません。

SQL Server 以外のパブリッシャーの場合、明示的なトランザクション内から sp_marksubscriptionvalidation を実行することはできません。 これは、パブリッシャーへのアクセスに使用されるリンク サーバー接続で明示的なトランザクションがサポートされていないためです。

sp_marksubscriptionvalidationは、@subscription_level1の値を指定するsp_article_validationと共に使用する必要があり、他のサブスクライバーの現在開いているトランザクションをマークするためにsp_marksubscriptionvalidationする他の呼び出しで使用できます。

アクセス許可

sysadmin固定サーバー ロールまたは固定データベース ロールdb_ownerのメンバーのみがsp_marksubscriptionvalidationを実行できます。

次のクエリは、サブスクリプションレベルの検証コマンドを通知するために、パブリッシング データベースに適用できます。 これらのコマンドは、指定されたサブスクライバーのディストリビューション エージェントによって取得されます。 最初のトランザクションはアーティクル art1を検証し、2 番目のトランザクションは art2を検証します。 sp_marksubscriptionvalidationsp_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;