sp_reinitsubscription (Transact-SQL)

Применимо к:SQL Server Управляемый экземпляр SQL Azure

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

Соглашения о синтаксисе 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' Имя публикации. публикацияsysname, по умолчанию — это sysname.

[ @article = ] 'article' Имя статьи. статьяsysname, по умолчанию — это sysname. Для публикации немедленного обновления статья должна быть все. В противном случае хранимая процедура пропускает публикацию и сообщает об ошибке.

[ @subscriber = ] 'subscriber' Имя подписчика. подписчик — sysname, без значения по умолчанию.

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

[ @for_schema_change = ] 'for_schema_change' Указывает, происходит ли повторная инициализация в результате изменения схемы в базе данных публикации. for_schema_change бит с значением по умолчанию 0. Если значение 0, активные подписки для публикаций, которые позволяют немедленно обновляться, активируются до тех пор, пока вся публикация, а не только некоторые из ее статей, повторно инициализированы. Это означает, что повторная инициализация инициируется в результате изменения схемы. Если 1, активные подписки не активируются до тех пор, пока агент моментальных снимков не будет запущено.

[ @publisher = ] 'publisher' Указывает издателя, отличного от SQL Server. publisher имеет имя sysname с значением NULL по умолчанию.

Примечание.

издатель не должен использоваться для издателей SQL Server.

[ @ignore_distributor_failure = ] ignore_distributor_failure Разрешает повторную инициализацию, даже если распространитель не существует или находится в автономном режиме. ignore_distributor_failure бит с значением по умолчанию 0. Если значение равно 0, повторная инициализация завершается ошибкой, если распространитель не существует или находится в автономном режиме.

[ @invalidate_snapshot = ] invalidate_snapshot Отменяет существующий моментальный снимок публикации. invalidate_snapshot бит с значением по умолчанию 0. Если 1, для публикации создается новый моментальный снимок.

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

0 (успешно) или 1 (сбой)

Замечания

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

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

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

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

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

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

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

  • если командой перед созданием статьи является 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'AdventureWorks2022Replica';
SET @publication = N'AdvWorksProductTran';

USE [AdventureWorks2022Replica]

-- 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)