Поделиться через


sp_addsubscription (Transact-SQL)

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

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

Синтаксис

sp_addsubscription [ @publication = ] 'publication'
    [ , [ @article = ] 'article']
    [ , [ @subscriber = ] 'subscriber' ]
    [ , [ @destination_db = ] 'destination_db' ]
        [ , [ @sync_type = ] 'sync_type' ]
    [ , [ @status = ] 'status'
        [ , [ @subscription_type = ] 'subscription_type' ]
    [ , [ @update_mode = ] 'update_mode' ]
    [ , [ @loopback_detection = ] 'loopback_detection' ]
    [ , [ @frequency_type = ] frequency_type ]
    [ , [ @frequency_interval = ] frequency_interval ]
    [ , [ @frequency_relative_interval = ] frequency_relative_interval ]
    [ , [ @frequency_recurrence_factor = ] frequency_recurrence_factor ]
    [ , [ @frequency_subday = ] frequency_subday ]
    [ , [ @frequency_subday_interval = ] frequency_subday_interval ]
    [ , [ @active_start_time_of_day = ] active_start_time_of_day ]
    [ , [ @active_end_time_of_day = ] active_end_time_of_day ]
    [ , [ @active_start_date = ] active_start_date ]
    [ , [ @active_end_date = ] active_end_date ]
    [ , [ @optional_command_line = ] 'optional_command_line' ]
    [ , [ @reserved = ] 'reserved' ]
    [ , [ @enabled_for_syncmgr= ] 'enabled_for_syncmgr' ]
    [ , [ @offloadagent= ] remote_agent_activation]
    [ , [ @offloadserver= ] 'remote_agent_server_name' ]
    [ , [ @dts_package_name= ] 'dts_package_name' ]
    [ , [ @dts_package_password= ] 'dts_package_password' ]
    [ , [ @dts_package_location= ] 'dts_package_location' ]
    [ , [ @distribution_job_name= ] 'distribution_job_name' ]
    [ , [ @publisher = ] 'publisher' ]
    [ , [ @backupdevicetype = ] 'backupdevicetype' ]
    [ , [ @backupdevicename = ] 'backupdevicename' ]
    [ , [ @mediapassword = ] 'mediapassword' ]
    [ , [ @password = ] 'password' ]
    [ , [ @fileidhint = ] fileidhint ]
    [ , [ @unload = ] unload ]
    [ , [ @subscriptionlsn = ] subscriptionlsn ]
    [ , [ @subscriptionstreams = ] subscriptionstreams ]
    [ , [ @subscriber_type = ] subscriber_type ]

Аргументы

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

  • [ @article=\] 'article'
    Статья, на которую подписана публикация. Аргумент article имеет тип sysname и значение по умолчанию all. Если значение равно all, то подписка добавляется ко всем статьям в данной публикации. Издателями Oracle поддерживаются только значения all и NULL.

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

  • [ @destination\_db=\] 'destination_db'
    Имя целевой базы данных, в которую помещаются реплицированные данные. Аргумент destination_db имеет тип sysname и значение по умолчанию NULL. При значении NULL destination_db устанавливается как значение имени базы данных публикации. Для издателей Oracle аргумент destination_db должен быть задан. Для подписчика, отличного от SQL Server, укажите значение (назначение по умолчанию) для аргумента destination_db.

  • [ @sync\_type=\] 'sync_type'
    Тип синхронизации подписки. Аргумент sync_type имеет тип nvarchar(255) и может принимать одно из следующих значений:

    Значение

    Описание

    none

    Подписчик уже имеет схему и начальные данные для опубликованных таблиц.

    ПримечаниеПримечание

    Этот аргумент является устаревшим. Вместо этого используйте значение replication support only.

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

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

    replication support only

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

    Не поддерживается для подписок на публикации, отличные от SQL Server.

    initialize with backup

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

    Не поддерживается для подписок на публикации, отличные от SQL Server.

    initialize from lsn

    Используется при добавлении узла к топологии одноранговой репликации транзакций. Чтобы убедиться в том, что с новым узлом реплицированы все нужные транзакции, используется значение @subscriptionlsn. Предполагает, что подписчик уже имеет схему и начальные данные для опубликованных таблиц. Дополнительные сведения см. в разделе Одноранговая репликация транзакций.

    ПримечаниеПримечание

    Системные таблицы и данные переносятся всегда.

  • [ @status=\] 'status'
    Состояние подписки. Аргумент status имеет тип sysname и значение по умолчанию NULL. Если этот параметр не задан явно, при репликации ему устанавливается одно из следующих значений.

    Значение

    Описание

    active

    Подписка инициализирована и готова к принятию изменений. Этот параметр устанавливается в случае, если аргумент sync_type установлен в значение none, initialize with backup или replication support only.

    subscribed

    Требуется инициализация подписки. Этот параметр устанавливается, если значением аргумента sync_type является automatic.

  • [ @subscription\_type=\] 'subscription_type'
    Тип подписки. Аргумент subscription_type имеет тип nvarchar(4) и значение по умолчанию push. Может принимать значения push или pull . Агенты распространителя принудительных подписок находятся на распространителе, а агенты распространителя подписок по запросу — на подписчике. Аргумент subscription_type может принимать значение pull для создания именованной подписки по запросу, известной издателю. Дополнительные сведения см. в разделе Подписка на публикации.

    ПримечаниеПримечание

    Анонимные подписки не нуждаются в использовании этой хранимой процедуры.

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

    Значение

    Описание

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

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

    sync tran

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

    queued tran

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

    отработка отказа

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

    queued failover

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

    Обратите внимание, что значения synctran и queued tran недопустимы, если публикация, на которую выполняется подписка, разрешает использование служб DTS.

  • [ @loopback\_detection=\] 'loopback_detection'
    Определяет, отправляет ли агент распространителя транзакции, изначально созданные на подписчике, обратно подписчику. loopback_detection — это значение типа nvarchar(5), может иметь одно из указанных значений.

    Значение

    Описание

    true

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

    false

    Агент распространителя отправляет транзакции, изначально созданные у подписчика, обратно.

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

    Автоматически устанавливается значение true для подписчика SQL Server и значение false для подписчика, не относящегося к SQL Server.

  • [ @frequency\_type=\] frequency_type
    Частота запуска задачи распространения по расписанию. Аргумент frequency_type имеет тип int и может принимать одно из следующих значений.

    Значение

    Описание

    1

    Однократно

    2

    По запросу

    4

    Ежедневно

    8

    Еженедельно

    16

    Ежемесячно

    32

    Ежемесячно с относительной датой

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

    Автозапуск

    128

    Повторяющееся задание

  • [ @frequency\_interval=\] frequency_interval
    Значение, которое применяется к частоте, задаваемой аргументом frequency_type. Аргумент frequency_interval имеет тип int и значение по умолчанию NULL.

  • [ @frequency\_relative\_interval=\] frequency_relative_interval
    Дата агента распространителя. Этот аргумент используется, когда параметр frequency_type имеет значение 32 (ежемесячно с относительной датой). Аргумент frequency_relative_interval имеет тип int и может принимать одно из следующих значений.

    Значение

    Описание

    1

    Первая

    2

    Второй

    4

    Третий

    8

    Четвертый

    16

    Последний

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

     

  • [ @frequency\_recurrence\_factor=\] frequency_recurrence_factor
    Коэффициент повторения, используемый аргументом frequency_type. Аргумент frequency_recurrence_factor имеет тип int и значение по умолчанию NULL.

  • [ @frequency\_subday=\] frequency_subday
    Частота повторного планирования в течение определенного периода, в минутах. frequency_subday — это значение типа int, может иметь одно из указанных значений.

    Значение

    Описание

    1

    Однократно

    2

    Секунда

    4

    Минута

    8

    Час

    NULL

     

  • [ @frequency\_subday\_interval=\] frequency_subday_interval
    Интервал для аргумента frequency_subday. Аргумент frequency_subday_interval имеет тип int и значение по умолчанию NULL.

  • [ @active\_start\_time\_of\_day=\] active_start_time_of_day
    Время суток, на которое запланирован первый запуск агента распространителя, в формате ЧЧММСС. Аргумент active_start_time_of_day имеет тип int и значение по умолчанию NULL.

  • [ @active\_end\_time\_of\_day=\] active_end_time_of_day
    Время суток, на которое запланирован останов агента распространителя, в формате ЧЧММСС. Аргумент active_end_time_of_day имеет тип int и значение по умолчанию NULL.

  • [ @active\_start\_date=\] active_start_date
    Дата, когда запланирован первый запуск агента распространителя, в формате ГГГГММДД. Аргумент active_start_date имеет тип int и значение по умолчанию NULL.

  • [ @active\_end\_date=\] active_end_date
    Дата, когда запланирован останов агента распространителя, в формате ГГГГММДД. Аргумент active_end_date имеет тип int и значение по умолчанию NULL.

  • [ @optional\_command\_line=\] 'optional_command_line'
    Необязательное приглашение к вводу команды. Аргумент optional_command_line имеет тип nvarchar(4000) и значение по умолчанию NULL.

  • [ @reserved=\] 'reserved'
    Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.

  • [ @enabled\_for\_syncmgr=\] 'enabled_for_syncmgr'
    Указывает, может ли подписка синхронизироваться с помощью диспетчера синхронизации Microsoft Windows. Аргумент enabled_for_syncmgr имеет тип nvarchar(5) и значение по умолчанию FALSE. Если это значение равно false, подписка не регистрируется диспетчером синхронизации Windows. Если значение равно true, подписка регистрируется диспетчером синхронизации Windows и может быть синхронизирована без запуска среды Среда SQL Server Management Studio. Не поддерживается для издателей Oracle.

  • [ @offloadagent= ] 'remote_agent_activation'
    Указывает на то, что агент может быть активирован удаленно. Аргумент remote_agent_activation имеет тип bit и значение по умолчанию 0.

    ПримечаниеПримечание

    Этот аргумент является устаревшим и сохраняется только для поддержки обратной совместимости скриптов.

  • [ @offloadserver= ] 'remote_agent_server_name'
    Указывает сетевое имя сервера, используемого для удаленной активации. Аргумент remote_agent_server_nameимеет тип sysname и значение по умолчанию NULL.

  • [ @dts\_package\_name= ] 'dts_package_name'
    Указывает имя пакета служб DTS. Аргумент dts_package_name имеет тип sysname и значение по умолчанию NULL. Например, для задания пакета DTSPub_Package параметр должен быть равен @dts\_package\_name = N'DTSPub_Package'. Этот аргумент доступен для принудительных подписок. Для добавления сведений о пакете служб DTS к подписке по запросу используется процедура sp_addpullsubscription_agent.

  • [ @dts\_package\_password= ] 'dts_package_password'
    Задает пароль для пакета, если он имеется. Аргумент dts_package_password имеет тип sysname и значение по умолчанию NULL.

    ПримечаниеПримечание

    Если указан аргумент dts_package_name, необходимо ввести пароль.

  • [ @dts\_package\_location= ] 'dts_package_location'
    Указывает местоположение пакета. Аргумент dts_package_location имеет тип nvarchar(12) и значение по умолчанию DISTRIBUTOR. Пакет может находиться на распространителе или на подписчике.

  • [ @distribution\_job\_name= ] 'distribution_job_name'
    Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.

  • [ @publisher= ] 'publisher'
    Задает издателя, отличного от Microsoft SQL Server. Аргумент publisher имеет тип sysname и значение по умолчанию NULL.

    ПримечаниеПримечание

    Аргумент publisher не должен быть определен для издателя SQL Server.

  • [ @backupdevicetype= ] 'backupdevicetype'
    Задает тип устройства резервного копирования, используемого при инициализации подписчика из резервной копии. Аргумент backupdevicetype имеет тип nvarchar(20) и может принимать одно из следующих значений.

    Значение

    Описание

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

    Устройство резервного копирования является логическим устройством.

    disk

    Устройство резервного копирования является жестким диском.

    tape

    Устройство резервного копирования является накопителем на магнитной ленте.

    Параметр backupdevicetype используется, только если аргумент sync_method имеет значение initialize_with_backup.

  • [ @backupdevicename= ] 'backupdevicename'
    Указывает имя устройства, используемого при инициализации подписчика из резервной копии. Аргумент backupdevicename имеет тип nvarchar(1000) и значение по умолчанию NULL.

  • [ @mediapassword= ] 'mediapassword'
    Указывает пароль для набора носителей, если при форматировании носителя был задан пароль. Аргумент mediapassword имеет тип sysname и значение по умолчанию NULL.

    ПримечаниеПримечание

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

  • [ @password= ] 'password'
    Указывает пароль для резервной копии, если при создании резервной копии был задан пароль. Аргумент passwordимеет тип sysname и значение по умолчанию NULL.

  • [ @fileidhint= ] fileidhint
    Определяет порядковый номер восстанавливаемого резервного набора данных. Аргумент fileidhint имеет тип int и значение по умолчанию NULL.

  • [ @unload= ] unload
    Определяет, должно ли быть выгружено ленточное устройство резервного копирования после завершения инициализации из резервной копии. Аргумент unload имеет тип bit и значение по умолчанию 1. 1 указывает, что лента должна быть выгружена. unload используется только, если аргумент backupdevicetype имеет тип tape.

  • [ @subscriptionlsn= ] subscriptionlsn
    Задает регистрационный номер транзакции в журнале (LSN), начиная с которого подписка должна доставлять изменения на узел в одноранговой топологии репликации транзакций. Чтобы на новый узел были реплицированы все нужные транзакции, используйте в качестве аргумента initialize from lsn значение @sync\_type. Дополнительные сведения см. в разделе Одноранговая репликация транзакций.

  • [ @subscriptionstreams= ] subscriptionstreams
    Число соединений на каждого агента распространителя для параллельного применения пакетов изменений на подписчике при сохранении многих характеристик транзакций, имеющихся для однопоточного выполнения. Аргумент subscriptionstreams имеет тип tinyint и значение по умолчанию NULL. Поддерживаются значения в диапазоне от 1 до 64. Этот параметр не поддерживается для подписчиков, отличных от SQL Server, издателей Oracle или одноранговых подписок. При каждом использовании потоков подписки в таблицу msreplication_subscriptions добавляются дополнительные строки (по одной на поток) с параметром agent_id, установленным в значение NULL.

    ПримечаниеПримечание

    Потоки подписки не работают для статей, настроенных для доставки Transact-SQL. Для использования потоков подписки настройте в статьях доставку вызовов хранимых процедур.

  • [ @subscriber\_type=\] subscriber_type
    Тип подписчика. subscriber_type — это значение типа tinyint, которое может иметь одно из указанных значений.

    Значение

    Описание

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

    Подписчик SQL Server

    1

    Сервер источника данных ODBC

    2

    База данных Microsoft Jet

    3

    Поставщик OLE DB

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

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

Замечания

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

При выполнении процедуры sp_addsubscription членом предопределенной роли сервера sysadmin для создания принудительной подписки задание агента распространителя явно создается и запускается под учетной записью службы агента SQL Server. Рекомендуется выполнять процедуру sp_addpushsubscription_agent и указывать учетные данные @job\_login и @job\_password другой учетной записи Windows, специально выделенной для конкретного агента. Дополнительные сведения см. в разделе Модель безопасности агента репликации.

Процедура sp_addsubscription закрывает доступ для подписчиков ODBC и OLE DB к следующим публикациям.

  • Созданным с помощью собственного метода sync_method при вызове процедуры sp_addpublication.

  • Содержащим статьи, добавленные к публикации с помощью хранимой процедуры sp_addarticle, значение аргумента pre_creation_cmd которой равнялось 3 (усечение).

  • Пытающимся присвоить аргументу update_mode значение sync tran.

  • Имеющим статью, настроенную на использование параметризованных инструкций.

Кроме того, если аргумент allow_queued_tran публикации имеет значение true (что разрешает постановку изменений в очередь на подписчике до тех пор, пока они не будут выполнены на издателе), столбец отметок времени в статье записывается в скрипт с типом timestamp, и изменения этого столбца отправляются подписчику. Подписчик формирует и обновляет значение столбца отметок времени. Для подписчика ODBC или OLE DB процедура sp_addsubscription завершается неудачей, если попытка проводилась с целью подписаться на публикацию, у которой аргумент allow_queued_tran равен true и имеются статьи со столбцами отметок времени.

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

При выборе параметров sync_type replication support only, initialize with backup или initialize from lsn агент чтения журнала необходимо запустить после выполнения процедуры sp_addsubscription, чтобы скрипты установки были записаны в базу данных распространителя. Агент чтения журнала должен работать под учетной записью, которая является членом предопределенной роли сервера sysadmin. Если параметр sync_type установлен в значение Automatic, никаких специальных действий агента чтения журнала не требуется.

Разрешения

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

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2012Replica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks2012]
EXEC sp_addsubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @destination_db = @subscriptionDB, 
  @subscription_type = N'push';

--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

См. также

Справочник

sp_addpushsubscription_agent (Transact-SQL)

sp_changesubstatus (Transact-SQL)

sp_dropsubscription (Transact-SQL)

sp_helpsubscription (Transact-SQL)

Системные хранимые процедуры (Transact-SQL)

Основные понятия

Создание принудительной подписки

Создание подписки для подписчика, отличного от подписчика SQL Server

Подписка на публикации