sp_addpullsubscription (Transact-SQL)

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

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

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

Аргументы

  • [ @publisher=] 'publisher'
    Имя издателя. Аргумент publisher имеет тип sysname и не имеет значения по умолчанию.

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

  • [ @publication=] 'publication'
    Имя публикации. Аргумент publication имеет тип sysname и не имеет значения по умолчанию.

  • [ @independent_agent=] 'independent_agent'
    Указывает, имеется ли для этой публикации изолированный агент распространителя. Аргумент independent_agent имеет тип nvarchar(5) и значение по умолчанию TRUE. Если равен true, то для этой публикации имеется отдельный агент распространителя. Если значение аргумента равно false, то имеется один агент распространителя для всех пар баз данных «издатель-подписчик». Аргумент independent_agent является свойством публикации и должен иметь то же значение, что и на издателе.

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

  • [ @description=] 'description'
    Описание публикации. Аргумент description имеет тип nvarchar(100) и значение по умолчанию NULL.

  • [ @update_mode=] 'update_mode'
    Тип обновления. Аргумент update_mode имеет тип nvarchar(30) и может принимать одно из следующих значений.

    Значение

    Описание

    read only (по умолчанию)

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

    synctran

    Включает поддержку немедленно обновляемых подписок.

    queued tran

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

    failover

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

    queued failover

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

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

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

0 (успешное завершение) или 1 (неуспешное завершение)

Замечания

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

Примечание по безопасностиПримечание по безопасности

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

Если таблица MSreplication_subscriptions (Transact-SQL) не существует на подписчике, хранимая процедура sp_addpullsubscription создаст ее. Также она добавляет новую строку в таблицу MSreplication_subscriptions (Transact-SQL). Для подписок по запросу хранимая процедура sp_addsubscription (Transact-SQL) сначала вызывается на издателе.

Пример

-- 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'AdventureWorks2008R2';

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [AdventureWorks2008R2Replica]
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.