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


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.

    ms189756.note(ru-ru,SQL.90).gifПримечание.
    Аргумент 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

См. также

Справочник

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

Другие ресурсы

Проверка реплицированных данных

Справка и поддержка

Получение помощи по SQL Server 2005