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


sp_reinitsubscription (Transact-SQL)

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

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

Синтаксис

sp_reinitsubscription [ [ @publication = ] 'publication' ]
    [ , [ @article = ] 'article' ]
        , [ @subscriber = ] 'subscriber'
    [ , [ @destination_db = ] 'destination_db']
    [ , [ @for_schema_change = ] 'for_schema_change']
    [ , [ @publisher = ] 'publisher' ]
    [ , [ @ignore_distributor_failure = ] ignore_distributor_failure ] 
    [ , [ @invalidate_snapshot = ] invalidate_snapshot ]

Аргументы

  • [ @publication=] 'publication'
    Имя публикации. Аргумент publication имеет тип sysname и значение по умолчанию NULL.
  • [ @article=] 'article'
    Имя статьи. Аргумент article имеет тип sysname и значение по умолчанию NULL. Для непосредственно обновляемых публикаций аргумент article должен иметь значение all; в противном случае хранимая процедура пропускает публикацию и сообщает об ошибке.
  • [ @subscriber=] 'subscriber'
    Имя подписчика. Аргумент subscriber имеет тип sysname и не имеет значения по умолчанию.
  • [ @destination_db=] 'destination_db'
    Имя целевой базы данных. Аргумент destination_db имеет тип sysname и значение по умолчанию all.
  • [ @for_schema_change=] 'for_schema_change'
    Указывает, проводится ли повторная инициализация в результате изменения схемы на базе данных публикации. Аргумент for_schema_change имеет тип bit и значение по умолчанию 0. Если значение равно 0, активные подписки публикаций, которые допускают непосредственное обновление, повторно активируются, и вся публикация, а не некоторые из ее статей, повторно инициализируются. Это означает, что повторная инициализация инициируется в результате изменения схемы. Если значение равно 1, активные подписки не активируются повторно, пока запущен агент моментальных снимков.
  • [ @publisher= ] 'publisher'
    Указывает издателя, не являющегося SQL Server. Аргумент publisher имеет тип sysname и значение по умолчанию NULL.

    ms189469.note(ru-ru,SQL.90).gifПримечание.
    Аргумент publisher не должен использоваться для издателей SQL Server.
  • [ @ignore_distributor_failure= ] ignore_distributor_failure
    Разрешает повторную инициализацию, даже если распространитель не существует или находится в автономном режиме. Аргумент ignore_distributor_failure имеет тип bit и значение по умолчанию 0. Если его значение — 0, повторная инициализация завершится неудачей, если распространитель не существует или находится в автономном режиме.
  • [ @invalidate_snapshot= ] invalidate_snapshot
    Проверяет существующий моментальный снимок публикации. Аргумент invalidate_snapshot имеет тип bit и значение по умолчанию 0. Если его значение — 1, формируется новый моментальный снимок для публикации.

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

0 (успешное завершение) или 1 (неуспешное завершение)

Замечания

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

Процедура sp_reinitsubscription не поддерживается для одноранговой репликации транзакций.

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

Для подписок, у которых исходный моментальный снимок применяется автоматически и публикация допускает обновляемые подписки, агент распространителя повторно синхронизирует подписку, используя последнюю схему и программные файлы массового копирования, предварительно созданные агентом моментальных снимков. Агент распространителя повторно синхронизирует подписку сразу после выполнения пользователем процедуры sp_reinitsubscription, если агент не занят, иначе синхронизация может быть выполнена по прошествии интервала сообщения (заданного параметром командной строки агента распространителя MessageInterval).

Процедура sp_reinitsubscription не влияет на подписки, для которых исходный моментальный снимок создается вручную.

Для повторной синхронизации анонимных подписок публикации задайте значение all или NULL аргументу subscriber.

Репликация транзакций поддерживает повторную инициализацию подписок на уровне статей. Моментальный снимок статьи повторно применяется на стороне подписчика во время следующей инициализации, после того как статья была помечена для повторной инициализации или синхронизации. Однако если существуют зависимые статьи, на которые подписан тот же подписчик, повторное применение к статье моментального снимка может завершиться неудачно, если только зависимые статьи в публикации также автоматически не инициализируются повторно при возникновении определенных обстоятельств:

  • если командой перед созданием статьи является DROP, то статьи для привязанных к схеме представлений и хранимых процедур на основном объекте статьи также помечаются для повторной инициализации;
  • если параметр схемы статьи включает создание сценария объявленной ссылочной целостности для первичных ключей, статьи, у которых есть основные таблицы с внешними ключами к основным таблицам повторно инициализируемой статьи, также помечаются для повторной инициализации.

Разрешения

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

Пример

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

DECLARE @subscriptionDB AS sysname;
DECLARE @publication AS sysname;
SET @subscriptionDB = N'AdventureWorksReplica';
SET @publication = N'AdvWorksProductTran';

USE [AdventureWorksReplica]

-- Execute at the Publisher to reinitialize the push subscription.
EXEC sp_reinitsubscription 
    @subscriber = $(SubServer),
    @destination_db = @subscriptionDB,
    @publication = @publication;
GO

-- Start the Distribution Agent.

См. также

Справочник

Хранимые процедуры репликации (Transact-SQL)

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

How to: Reinitialize a Subscription (Replication Transact-SQL Programming)
Повторная инициализация подписки

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

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