sp_addsubscription (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
Предоставляет автоматическое создание на подписчике статьи хранимой процедуры и триггеров, которые поддерживают обновляемые подписки, если это подходит. Предполагает, что подписчик уже имеет схему и начальные данные для опубликованных таблиц. При настройке одноранговой топологии репликации транзакций убедитесь, что данные во всех узлах топологии идентичны. Дополнительные сведения см. в разделе Как настроить одноранговую репликацию транзакций (программирование репликации на языке Transact-SQL).
Не поддерживается для подписок на публикации, отличные от SQL Server.
initialize with backup
Схема и начальные данные для опубликованных таблиц извлекаются из резервной копии базы данных публикации. Предполагает, что подписчик имеет доступ к резервной копии базы данных публикации. Местоположение резервной копии и тип носителя для резервной копии указаны в backupdevicename и backupdevicetype. При использовании этого аргумента одноранговая топология репликации транзакций должна быть зафиксирована во время настройки.
Не поддерживается для подписок на публикации, отличные от SQL Server.
initialize from lsn
Используется при добавлении узла к топологии одноранговой репликации транзакций. Чтобы убедиться в том, что с новым узлом реплицированы все нужные транзакции, используется значение @subscriptionlsn. Предполагает, что подписчик уже имеет схему и начальные данные для опубликованных таблиц. Дополнительные сведения см. в разделе Как настроить одноранговую репликацию транзакций (программирование репликации на языке Transact-SQL).
Примечание Системные таблицы и данные переносятся всегда.
[ @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.
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.Примечание Этот аргумент является устаревшим и сохраняется только для поддержки обратной совместимости.
[ @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'
Задает издатель, отличный от MicrosoftSQL 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, означающее, что ленточное устройство должно быть выгружено. Аргумент unload используется только в том случае, если аргумент backupdevicetype установлен в значение tape.[ @subscriptionlsn= ] subscriptionlsn
Задает регистрационный номер транзакции в журнале (LSN), начиная с которого подписка должна доставлять изменения на узел в одноранговой топологии репликации транзакций. Для уверенности в том, что на новый узел реплицированы все нужные транзакции, используйте в качестве аргумента @subscriptionlsn начальное значение lsn. Дополнительные сведения см. в разделе Как настроить одноранговую репликацию транзакций (программирование репликации на языке Transact-SQL).[ @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, указывая в качестве аргументов @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, необходимо создать две разные публикации: одну для каждого типа подписки.
Пример
-- 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_addsubscription могут выполнять только члены предопределенной роли сервера sysadmin или предопределенной роли базы данных db_owner. Для подписок по запросу пользователи, имеющие имена входа в списке доступа к публикации, могут выполнять процедуру sp_addsubscription.
См. также