sp_marksubscriptionvalidation (Transact-SQL)

Применимо к:SQL Server

Помечает текущую открытую транзакцию как транзакцию проверки уровня подписки для заданного подписчика. Эта хранимая процедура выполняется на издателе в базе данных публикации.

Соглашения о синтаксисе Transact-SQL

Синтаксис

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

Аргументы

[ @publication = ] 'publication' Имя публикации. публикацияsysname, без значения по умолчанию.

[ @subscriber = ] 'subscriber' Имя подписчика. подписчик — sysname, без значения по умолчанию.

[ @destination_db = ] 'destination_db' Имя целевой базы данных. destination_db — sysname без значения по умолчанию.

[ @publisher = ] 'publisher' Указывает издателя Microsoft SQL Server, отличного от Microsoft SQL Server. publisher имеет имя sysname с значением NULL по умолчанию.

Заметка

издатель не должен использоваться для публикации, которая принадлежит издателю SQL Server.

Значения кода возврата

0 (успешно) или 1 (сбой)

Замечания

sp_marksubscriptionvalidation используется в репликации транзакций.

sp_marksubscriptionvalidation не поддерживает подписчиков, не являющихся подписчиками SQL Server.

Для издателей, отличных от SQL Server, невозможно выполнить sp_marksubscriptionvalidation из явной транзакции. Это обусловлено тем, что явные транзакции не поддерживаются через соединение связанного сервера, через которое осуществляется подключение к издателю.

sp_marksubscriptionvalidation необходимо использовать вместе с sp_article_validation (Transact-SQL), указав значение 1 для subscription_level, и можно использовать с другими вызовами для sp_marksubscriptionvalidation, чтобы пометить текущую открытую транзакцию для других подписчиков.

Разрешения

Только члены предопределенных ролей сервера sysadmin или db_owner предопределенных ролей базы данных могут выполняться sp_marksubscriptionvalidation.

пример

Приведенный ниже запрос можно применять к публикующей базе данных для выполнения команд проверки уровня подписки. Эти команды выбираются агентами распространителя указанных подписчиков. Обратите внимание, что первая транзакция проверяет статью art1, а вторая транзакция проверяет art2. Кроме того, обратите внимание, что вызовы sp_marksubscriptionvalidation и sp_article_validation (Transact-SQL) были инкапсулированы в транзакцию. Мы рекомендуем только один вызов sp_article_validation (Transact-SQL) для каждой транзакции. Это связано с тем, что sp_article_validation (Transact-SQL) содержит блокировку общей таблицы в исходной таблице в течение длительности транзакции. Для повышения параллелизма следует добиваться как можно меньшей продолжительности транзакций.

begin tran  
  
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 tran  
  
begin tran  
  
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 tran  

См. также

Системные хранимые процедуры (Transact-SQL)
Проверка реплицированных данных