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 или создатель подписки.