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
См. также
Справочник
Системные хранимые процедуры (Transact-SQL)