Поделиться через


sp_marksubscriptionvalidation (Transact-SQL)

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

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

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

Аргументы

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

  • [ @subscriber= ] 'subscriber'
    Имя подписчика. Аргумент subscriber имеет тип sysname и не имеет значения по умолчанию.

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

  • [@publisher= ] 'publisher'
    Задает издателя, отличного от Microsoft 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 (Transact-SQL) (параметр уровень_подписки должен иметь значение 1). Кроме того, текущую открытую транзакцию можно помечать для других подписчиков путем совместного использования данной процедуры с другими вызовами процедуры sp_marksubscriptionvalidation.

Разрешения

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

Пример

Приведенный ниже запрос можно применять к публикующей базе данных для выполнения команд проверки уровня подписки. Эти команды выбираются агентами распространителя указанных подписчиков. Обратите внимание, что первая транзакция проверяет статью '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