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;