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


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 и значение по умолчанию all.

  • [ @article=] 'article'
    Имя статьи. Аргумент article имеет тип sysname и значение по умолчанию all. Для непосредственно обновляемых публикаций аргумент 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.

    ПримечаниеПримечание

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

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

Пример

-- 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'AdventureWorks2012Replica';
SET @publication = N'AdvWorksProductTran';

USE [AdventureWorks2012Replica]

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

-- Start the Distribution Agent.

Разрешения

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

См. также

Справочник

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

Основные понятия

Повторная инициализация подписки

Повторная инициализация подписок