sp_addpullsubscription (Transact-SQL)

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

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

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

Синтаксис

sp_addpullsubscription
    [ @publisher = ] N'publisher'
    [ , [ @publisher_db = ] N'publisher_db' ]
    , [ @publication = ] N'publication'
    [ , [ @independent_agent = ] N'independent_agent' ]
    [ , [ @subscription_type = ] N'subscription_type' ]
    [ , [ @description = ] N'description' ]
    [ , [ @update_mode = ] N'update_mode' ]
    [ , [ @immediate_sync = ] immediate_sync ]
[ ; ]

Аргументы

[ @publisher = ] N'publisher'

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

Примечание.

Имя сервера можно указать как <Hostname>,<PortNumber> для экземпляра по умолчанию или <Hostname>\<InstanceName>,<PortNumber> для именованного экземпляра. Укажите номер порта для подключения при развертывании SQL Server в Linux или Windows с пользовательским портом, а служба браузера отключена. Использование пользовательских номеров портов для удаленного распространителя применяется к SQL Server 2019 (15.x) и более поздним версиям.

[ @publisher_db = ] N'publisher_db'

Имя базы данных издателя. @publisher_db имеет имя sysname с значением по умолчаниюNULL. @publisher_db игнорируется издателями Oracle.

[ @publication = ] N'publication'

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

[ @independent_agent = ] N'independent_agent'

Указывает, есть ли автономный агент распространения для этой публикации. @independent_agent — nvarchar(5) с значением по умолчаниюtrue.

  • Если trueдля этой публикации существует автономный агент распространения.
  • Если falseдля каждой пары баз данных издателя или подписчика существует одна агент распространения.

@independent_agent является свойством публикации и должно иметь то же значение, что и издатель.

[ @subscription_type = ] N'subscription_type'

Тип подписки. @subscription_type — nvarchar(9) с значением по умолчаниюanonymous. Необходимо указать значение pull для @subscription_type, если вы не хотите создать подписку без регистрации подписки на издателе. В этом случае необходимо указать значение anonymous. Это необходимо для случаев, в которых невозможно установить подключение SQL Server к издателю во время настройки подписки.

[ @description = ] N'description'

Описание публикации. @description — nvarchar(100) с значением по умолчаниюNULL.

[ @update_mode = ] N'update_mode'

Тип обновления. @update_mode — nvarchar(30) и может быть одним из следующих значений.

значение Описание
read only (по умолчанию) Подписка только для чтения. Любые изменения на подписчике не отправляются издателю. Следует использовать, если обновления не вносятся на подписчике.
synctran Включает поддержку немедленно обновляемых подписок.
queued tran Обеспечивает подписку обновляемую посредством очередей. Изменение данных можно выполнять у подписчика, сохранять в очереди и после этого передавать издателю.
failover Включает для подписки немедленное обновление с обновлением по очереди при переходе на другой ресурс в случае отработки отказа. Изменение данных можно выполнять на подписчике и немедленно передавать издателю. Если издатель и подписчик не подключены, изменения данных, внесенные на подписчике, можно хранить в очереди до повторного подключения подписчика и издателя.
queued failover Примечание. Не поддерживается для издателей Oracle.

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

[ @immediate_sync = ] immediate_sync

Указывает, создаются ли файлы синхронизации или создаются повторно при каждом запуске агент моментальных снимков. @immediate_sync бит, по умолчанию 1и должен иметь то же значение, что и @immediate_sync в sp_addpublication. @immediate_sync является свойством публикации и должно иметь то же значение, что и издатель.

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

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

Замечания

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

Внимание

Для подписок, обновляемых в очереди, используйте проверку подлинности SQL Server для подключений к подписчикам и укажите другую учетную запись подключения к каждому подписчику. При создании подписки на вытягивание, поддерживающей обновление в очереди, репликация всегда задает подключение для использования проверки подлинности Windows (для подписок на вытягивание репликация не может получить доступ к метаданным на подписчике, необходимому для использования проверки подлинности SQL Server). В этом случае необходимо выполнить sp_changesubscription , чтобы изменить подключение, чтобы использовать проверку подлинности SQL Server после настройки подписки.

Если таблица MSreplication_subscriptions не существует на подписчике, sp_addpullsubscription создайте ее. Она также добавляет строку в таблицу MSreplication_subscriptions . Для подписок на вытягивание sp_addsubscription сначала следует вызывать на издателе.

Примеры

-- 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".

-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2022';

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [AdventureWorks2022Replica]
EXEC sp_addpullsubscription 
  @publisher = @publisher, 
  @publication = @publication, 
  @publisher_db = @publicationDB;

-- Add an agent job to synchronize the pull subscription.
EXEC sp_addpullsubscription_agent 
  @publisher = @publisher, 
  @publisher_db = @publicationDB, 
  @publication = @publication, 
  @distributor = @publisher, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

Разрешения

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