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'

Имя публикации. @publication — sysname без значения по умолчанию.

[ @subscriber = ] N'подписчик'

Имя подписчика. @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, указав значение 1 для @subscription_level, и можно использовать с другими вызовами, чтобы 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;