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


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, то подписка добавляется всем статьям в данной публикации. Только значения all или NULL поддерживаются издателями Oracle.
  • [ @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) и может принимать одно из следующих значений.

    Значение

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

    Значение Описание

    active

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

    subscribed

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

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

    ms181702.note(ru-ru,SQL.90).gifПримечание.
    Анонимные подписки не нуждаются в использовании этой хранимой процедуры.
  • [ @update_mode=] 'update_mode'
    Тип обновления*. Аргумент* update_mode имеет тип nvarchar(30) и может принимать одно из следующих значений.

    Значение Описание

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

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

    sync tran

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

    queued tran

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

    failover

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

    queued failover

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

    Обратите внимание, что значения sync tran и 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.

    ms181702.note(ru-ru,SQL.90).gifПримечание.
    Этот аргумент является устаревшим и сохраняется только для поддержки обратной совместимости.
  • [ @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.

    ms181702.note(ru-ru,SQL.90).gifПримечание.
    Если аргумент 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.

    ms181702.note(ru-ru,SQL.90).gifПримечание.
    Аргумент 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.
  • [ @password= ] 'password'
    Задает пароль для резервной копии, если был задан пароль при создании резервной копии. Аргумент password имеет тип sysname и значение по умолчанию NULL.
  • [ @fileidhint= ] fileidhint
    Определяет порядковый номер восстанавливаемого резервного набора данных. Аргумент fileidhint имеет тип int и значение по умолчанию NULL.
  • [ @unload= ] unload
    Указывает на то, должно ли быть выгружено ленточное устройство резервного копирования после завершения инициализации из резервной копии. Аргумент unload имеет тип bit и значение по умолчанию 1. 1 указывает на то, что лента должна быть выгружена. unload используется, только если аргумент backupdevicetype установлен в значение tape.
  • [ @subscriptionlsn= ] subscriptionlsn
    Только для внутреннего использования.
  • [ @subscriptionstreams= ] subscriptionstreams
    Разрешенное число соединений, приходящихся на один агент распространителя, для параллельного применения пакетов изменений к подписчику, при этом сохраняется много транзакционных характеристик, характерных для случая использования одного потока. Аргумент subscriptionstreams имеет тип tinyint и значение по умолчанию NULL. Поддерживаются значения в диапазоне от 1 до 64. Этот аргумент не поддерживается для подписчиков, отличных от SQL Server, издателей Oracle или одноранговых подписок.
  • [ @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 и указывать учетные данные другой определенной для агента учетной записи Windows для аргументов @job_login и @job_password. Дополнительные сведения см. в разделе Модель безопасности агента репликации.

Процедура 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, необходимо создать две разные публикации: одну для каждого типа подписки.

Разрешения

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

--Add a push subscription to a transactional publication.
USE [AdventureWorks]
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)

Другие ресурсы

Как создавать принудительные подписки (программирование репликации на языке Transact-SQL)
How to: Create a Subscription for a Non-SQL Server Subscriber (Replication Transact-SQL Programming)
Подписка на публикации

Справка и поддержка

Получение помощи по SQL Server 2005