sp_addsubscription (Transact-SQL)
Область применения: SQL Server База данных SQL Azure
Добавляет подписку на публикацию и устанавливает состояние подписчика. Эта хранимая процедура выполняется на издателе в базе данных публикации.
Соглашения о синтаксисе Transact-SQL
Синтаксис
sp_addsubscription
[ @publication = ] N'publication'
[ , [ @article = ] N'article' ]
[ , [ @subscriber = ] N'subscriber' ]
[ , [ @destination_db = ] N'destination_db' ]
[ , [ @sync_type = ] N'sync_type' ]
[ , [ @status = ] N'status' ]
[ , [ @subscription_type = ] N'subscription_type' ]
[ , [ @update_mode = ] N'update_mode' ]
[ , [ @loopback_detection = ] N'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 = ] N'optional_command_line' ]
[ , [ @reserved = ] N'reserved' ]
[ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
[ , [ @offloadagent = ] offloadagent ]
[ , [ @offloadserver = ] N'offloadserver' ]
[ , [ @dts_package_name = ] N'dts_package_name' ]
[ , [ @dts_package_password = ] N'dts_package_password' ]
[ , [ @dts_package_location = ] N'dts_package_location' ]
[ , [ @distribution_job_name = ] N'distribution_job_name' ]
[ , [ @publisher = ] N'publisher' ]
[ , [ @backupdevicetype = ] N'backupdevicetype' ]
[ , [ @backupdevicename = ] N'backupdevicename' ]
[ , [ @mediapassword = ] N'mediapassword' ]
[ , [ @password = ] N'password' ]
[ , [ @fileidhint = ] fileidhint ]
[ , [ @unload = ] unload ]
[ , [ @subscriptionlsn = ] subscriptionlsn ]
[ , [ @subscriptionstreams = ] subscriptionstreams ]
[ , [ @subscriber_type = ] subscriber_type ]
[ , [ @memory_optimized = ] memory_optimized ]
[ ; ]
Аргументы
[ @publication = ] N'publication'
Имя публикации. @publication — sysname без значения по умолчанию.
[ @article = ] N'article'
Статья, на которую подписана публикация. @article — sysname с значением по умолчаниюall
. Если all
подписка добавляется ко всем статьям в этой публикации. Только значения all
или NULL
поддерживаются для издателей Oracle.
[ @subscriber = ] N'подписчик'
Имя подписчика. @subscriber — sysname с значением по умолчаниюNULL
.
Примечание.
Имя сервера можно указать как <Hostname>,<PortNumber>
для экземпляра по умолчанию или <Hostname>\<InstanceName>,<PortNumber>
для именованного экземпляра. Укажите номер порта для подключения при развертывании SQL Server в Linux или Windows с пользовательским портом, а служба браузера отключена. Использование пользовательских номеров портов для удаленного распространителя применяется к SQL Server 2019 (15.x) и более поздним версиям.
[ @destination_db = ] N'destination_db'
Имя целевой базы данных, в которой будут размещаться реплицированные данные. @destination_db имеет имя sysname с значением по умолчаниюNULL
. Если NULL
@destination_db задано имя базы данных публикации. Для издателей Oracle необходимо указать @destination_db . Для подписчика, отличного от SQL Server, укажите значение (назначение по умолчанию) для @destination_db.
[ @sync_type = ] N'sync_type'
Тип синхронизации подписки. @sync_type — nvarchar(255) и может быть одним из следующих значений:
значение | Описание |
---|---|
none 1 |
Подписчик уже имеет схему и начальные данные для опубликованных таблиц. |
automatic (по умолчанию) |
Схема и начальные данные для опубликованных таблиц вначале передаются подписчику. |
replication support only 2 |
Предоставляет автоматическое создание на подписчике статьи хранимой процедуры и триггеров, которые поддерживают обновляемые подписки, если это подходит. Предполагает, что подписчик уже имеет схему и начальные данные для опубликованных таблиц. При настройке топологии одноранговой репликации транзакций убедитесь, что данные во всех узлах топологии идентичны. Дополнительные сведения см. в разделе одноранговая репликация транзакций. |
initialize with backup 2 |
Схема и начальные данные для опубликованных таблиц извлекаются из резервной копии базы данных публикации. Предполагает, что подписчик имеет доступ к резервной копии базы данных публикации. Расположение резервного копирования и типа носителя для резервной копии указывается @backupdevicename и @backupdevicetype. При использовании этого аргумента топология одноранговой репликации транзакций должна быть зафиксирована во время настройки. |
initialize from lsn |
Используется при добавлении узла в топологию одноранговой репликации транзакций. Используется с @subscriptionlsn, чтобы убедиться в том, что все нужные транзакции реплецированы на новый узел. Предполагает, что подписчик уже имеет схему и начальные данные для опубликованных таблиц. Дополнительные сведения см. в разделе одноранговая репликация транзакций. |
1 Этот параметр не рекомендуется. Вместо этого используйте значение «replication support only».
2 Не поддерживается для подписок на публикации, отличные от SQL Server.
Примечание.
Системные таблицы и данные переносятся всегда.
[ @status = ] N'status'
Состояние подписки. @status — sysname с значением по умолчаниюNULL
. Если этот параметр не задан явным образом, репликация автоматически устанавливает его в одно из этих значений.
значение | Описание |
---|---|
active |
Подписка инициализирована и готова к принятию изменений. Этот параметр устанавливается, если значение @sync_type отсутствует, инициализируется только с поддержкой резервного копирования или репликации. |
subscribed |
Требуется инициализация подписки. Этот параметр устанавливается при автоматическом значении @sync_type . |
[ @subscription_type = ] N'subscription_type'
Тип подписки. @subscription_type — nvarchar(4) с значением по умолчаниюpush
. Может иметь значение push
или pull
. Агент распространения push-подписок находятся на распространителю, а агент распространения подписки на вытягивание находятся на подписчике. @subscription_type можно pull
создать именованную подписку на вытягивание, которая известна издателю. Дополнительные сведения см. в статье Подписка на публикации.
Примечание.
Анонимные подписки не должны использовать эту хранимую процедуру.
[ @update_mode = ] N'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 = ] N'loopback_detection'
Определяет, отправляет ли агент распространителя транзакции, изначально созданные на подписчике, обратно подписчику. @loopback_detection — nvarchar(5) и может быть одним из этих значений.
значение | Описание |
---|---|
true |
агент распространения не отправляет транзакции, поступающие на подписчик обратно на подписчик. Используется с двунаправленной репликацией транзакций. Дополнительные сведения см. в статье Bidirectional Transactional Replication. |
false |
Агент распространителя отправляет транзакции, изначально созданные у подписчика, обратно. |
NULL (по умолчанию) |
Автоматически устанавливается значение true для подписчика SQL Server и false для подписчика, отличного от SQL Server. |
[ @frequency_type = ] frequency_type
Частота планирования задачи распространения. @frequency_type является int и может быть одним из этих значений.
значение | Описание |
---|---|
1 |
Один раз. |
2 |
по запросу |
4 |
Ежедневно |
8 |
Weekly (Еженедельно); |
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 |
First |
2 |
Second |
4 |
Третья |
8 |
Четвертая |
16 |
Last |
NULL (по умолчанию) |
[ @frequency_recurrence_factor = ] frequency_recurrence_factor
Коэффициент повторения, используемый @frequency_type. @frequency_recurrence_factor имеет значение int с значением по умолчаниюNULL
.
[ @frequency_subday = ] frequency_subday
Как часто, в минутах, перепланировать его в течение определенного периода. @frequency_subday является int и может быть одним из этих значений.
значение | Описание |
---|---|
1 |
Однократно |
2 |
Second |
4 |
Minute |
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
Время дня, когда агент распространения сначала запланировано, отформатировано как HHmmss
. @active_start_time_of_day имеет значение int с значением по умолчаниюNULL
.
[ @active_end_time_of_day = ] active_end_time_of_day
Время дня, когда агент распространения перестает планироваться, форматируется как HHmmss
. @active_end_time_of_day имеет значение int с значением по умолчаниюNULL
.
[ @active_start_date = ] active_start_date
Дата, когда агент распространения впервые запланирована, отформатирована как yyyyMMdd
. @active_start_date имеет значение int с значением по умолчаниюNULL
.
[ @active_end_date = ] active_end_date
Дата, когда агент распространения перестает планироваться, отформатирована как yyyyMMdd
. @active_end_date имеет значение int с значением по умолчаниюNULL
.
[ @optional_command_line = ] N'optional_command_line'
Необязательная командная строка для выполнения. @optional_command_line — nvarchar(4000) с значением по умолчаниюNULL
.
[ @reserved = ] N'reserved'
Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.
[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'
Можно ли синхронизировать подписку с помощью диспетчера синхронизации Windows. @enabled_for_syncmgr — nvarchar(5) с значением по умолчанию, которое совпадает с значением false
по умолчаниюNULL
. Если false
подписка не зарегистрирована в диспетчере синхронизации Windows. Если true
подписка зарегистрирована в диспетчере синхронизации Windows и может быть синхронизирована без запуска SQL Server Management Studio. Не поддерживается для издателей Oracle.
[ @offloadagent = ] offloadagent
Указывает на то, что агент может быть активирован удаленно. @offloadagent бит с значением по умолчанию0
.
Примечание.
Этот аргумент является устаревшим и сохраняется только для поддержки обратной совместимости скриптов.
[ @offloadserver = ] N'offloadserver'
Указывает сетевое имя сервера, используемого для удаленной активации. @offloadserver имеет имя sysname с значением по умолчаниюNULL
.
[ @dts_package_name = ] N'dts_package_name'
Указывает имя пакета служб DTS. @dts_package_name — sysname с значением по умолчаниюNULL
. Например, для задания пакета DTSPub_Package
параметр должен быть равен @dts_package_name = N'DTSPub_Package'
. Этот аргумент доступен для принудительных подписок. Чтобы добавить сведения о пакете DTS в подписку на вытягивание, используйте sp_addpullsubscription_agent
.
[ @dts_package_password = ] N'dts_package_password'
Указывает пароль в пакете, если он есть. @dts_package_password имеет имя sysname с значением по умолчаниюNULL
.
Примечание.
Если указан @dts_package_name, необходимо указать пароль.
[ @dts_package_location = ] N'dts_package_location'
Указывает местоположение пакета. @dts_package_location — nvarchar(12), с значением по умолчанию, которое совпадает с значением distributor
по умолчаниюNULL
. Расположение пакета может быть distributor
или subscriber
.
[ @distribution_job_name = ] N'distribution_job_name'
Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.
[ @publisher = ] N'publisher'
Указывает издатель, отличный от SQL Server. @publisher — sysname с значением по умолчаниюNULL
.
Примечание.
@publisher не следует указывать для издателя SQL Server.
[ @backupdevicetype = ] N'backupdevicetype'
Задает тип устройства резервного копирования, используемого при инициализации подписчика из резервной копии. @backupdevicetype — nvarchar(20) и может быть одним из следующих значений:
значение | Описание |
---|---|
logical (по умолчанию) |
Устройство резервного копирования — это логическое устройство |
disk |
Устройство резервного копирования — диск |
tape |
Устройство резервного копирования является накопителем на магнитной ленте. |
url |
Устройство резервного копирования — это URL-адрес |
@backupdevicetype используется только в том случае, если для @sync_method задано значение initialize_with_backup.
[ @backupdevicename = ] N'backupdevicename'
Указывает имя устройства, используемого при инициализации подписчика из резервной копии. @backupdevicename — nvarchar(1000) с значением по умолчаниюNULL
.
[ @mediapassword = ] N'mediapassword'
Указывает пароль для набора носителей, если при форматировании носителя был задан пароль. @mediapassword — sysname с значением по умолчаниюNULL
.
Примечание.
Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.
[ @password = ] N'password'
Указывает пароль для резервной копии, если при создании резервной копии был задан пароль. @password — sysname с значением по умолчаниюNULL
.
[ @fileidhint = ] fileidhint
Определяет порядковый номер восстанавливаемого резервного набора данных. @fileidhint имеет значение int с значением по умолчаниюNULL
.
[ @unload = ] выгрузка
Определяет, должно ли быть выгружено ленточное устройство резервного копирования после завершения инициализации из резервной копии. @unload имеет значение по умолчанию1
, указывающее, что лента должна быть выгружена. @unload используется только в том случае, если @backupdevicetypetape
.
[ @subscriptionlsn = ] subscriptionlsn
Задает регистрационный номер транзакции в журнале (LSN), начиная с которого подписка должна доставлять изменения на узел в одноранговой топологии репликации транзакций. @subscriptionlsn — binary(10), с значением по умолчаниюNULL
. Используется с @sync_type значением initialize from lsn
, чтобы убедиться, что все соответствующие транзакции реплицируются на новый узел. Дополнительные сведения см. в разделе одноранговая репликация транзакций.
[ @subscriptionstreams = ] подписок
Количество подключений, разрешенных для каждого агент распространения применять пакеты изменений параллельно подписчику, сохраняя при использовании одного потока множество характеристик транзакций. @subscriptionstreams крошечный, с по умолчанию NULL
. Поддерживается диапазон значений от 1
до 64
. Этот параметр не поддерживается для подписчиков, отличных от SQL Server, издателей Oracle или одноранговых подписок. Каждый раз, когда используется @subscriptionstreams, в таблицу добавляются msreplication_subscriptions
дополнительные строки (одна строка на поток) с набором agent_id
NULL
.
Примечание.
Потоки подписок не работают для статей, настроенных для доставки Transact-SQL. Чтобы использовать потоки подписок, настройте статьи для доставки вызовов хранимой процедуры.
[ @subscriber_type = ] subscriber_type
Тип подписчика. @subscriber_type крошечный и может быть одним из этих значений.
значение | Описание |
---|---|
0 (по умолчанию) |
Подписчик SQL Server |
1 |
Сервер источника данных ODBC |
2 |
База данных Microsoft Jet |
3 |
Поставщик OLE DB |
[ @memory_optimized = ] memory_optimized
Указывает, что подписка поддерживает оптимизированные для памяти таблицы. @memory_optimized бит с значением по умолчанию 0
(false). 1
(true) означает, что подписка поддерживает оптимизированные для памяти таблицы.
Значения кода возврата
0
(успешно) или 1
(сбой).
Замечания
sp_addsubscription
используется в репликации моментальных снимков и репликации транзакций.
При sp_addsubscription
выполнении членом предопределенной роли сервера sysadmin для создания принудительной подписки задание агент распространения неявно создается и выполняется в учетной записи службы агент SQL Server. Рекомендуется выполнить sp_addpushsubscription_agent и указать учетные данные другой учетной записи @job_login Windows для агента и @job_password. Дополнительные сведения см. в статье Replication Agent Security Model.
sp_addsubscription
Запрещает подписчикам ODBC и OLE DB доступ к публикациям, которые:
Были созданы с помощью собственного @sync_method в вызове sp_addpublication.
Содержит статьи, которые были добавлены в публикацию с хранимой процедурой sp_addarticle, которая имела значение параметра @pre_creation_cmd 3 (усечение).
Попытка задать для @update_mode
sync tran
значение .Имеющим статью, настроенную на использование параметризованных инструкций.
Кроме того, если в публикации задано значение true @allow_queued_tran (что позволяет очереди изменений на подписчике, пока они не будут применены на издателе), столбец метки времени в статье будет написан как метка времени и изменения в этом столбце отправляются подписчику. Подписчик формирует и обновляет значение столбца отметок времени. Для подписчика 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
, специальные действия агента чтения журналов не требуются.
Разрешения
Могут выполняться только члены предопределенных ролей сервера 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'AdventureWorks2022Replica';
--Add a push subscription to a transactional publication.
USE [AdventureWorks2022]
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
Связанный контент
- Создание принудительной подписки
- Создание подписки для подписчика, отличного от подписчика SQL Server
- Subscribe to Publications
- sp_addpushsubscription_agent (Transact-SQL)
- sp_changesubstatus (Transact-SQL)
- sp_dropsubscription (Transact-SQL)
- sp_helpsubscription (Transact-SQL)
- Системные хранимые процедуры (Transact-SQL)