sp_reinitsubscription (Transact-SQL)

Область применения: SQL Server Управляемый экземпляр SQL Azure

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

Соглашения о синтаксисе Transact-SQL

Синтаксис

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

Аргументы

[ @publication = ] N'publication'

Имя публикации. @publication — sysname с значением по умолчаниюall.

[ @article = ] N'article'

Имя статьи. @article — sysname с значением по умолчаниюall. Для немедленно обновляемой публикации @article должен быть all. В противном случае хранимая процедура пропускает публикацию и сообщает об ошибке.

[ @subscriber = ] N'подписчик'

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

[ @destination_db = ] N'destination_db'

Имя целевой базы данных. @destination_db имеет имя sysname с значением по умолчаниюall.

[ @for_schema_change = ] for_schema_change

Указывает, является ли повторная инициализация результатом изменения схемы в базе данных публикации. @for_schema_change бит с значением по умолчанию0.

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

  • Если 1активные подписки не активируются до запуска агент моментальных снимков.

[ @publisher = ] N'publisher'

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

@publisher не следует использовать для издателей 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 не поддерживается для одноранговой репликации транзакций.

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

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

Разрешения

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