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


sp_addpushsubscription_agent (Transact-SQL)

Область применения: SQL Server Управляемый экземпляр SQL Azure

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

Внимание

При настройке издателя с удаленным распространителем значения, предоставленные для всех параметров, включая @job_login и @job_password, отправляются распространителю в виде обычного текста. Прежде чем выполнять эту хранимую процедуру, необходимо зашифровать соединение между издателем и его удаленным распространителем. Дополнительные сведения см. в разделе "Настройка SQL Server ядро СУБД для шифрования подключений".

Соглашения о синтаксисе Transact-SQL

Синтаксис

sp_addpushsubscription_agent
    [ @publication = ] N'publication'
    [ , [ @subscriber = ] N'subscriber' ]
    [ , [ @subscriber_db = ] N'subscriber_db' ]
    [ , [ @subscriber_security_mode = ] subscriber_security_mode ]
    [ , [ @subscriber_login = ] N'subscriber_login' ]
    [ , [ @subscriber_password = ] N'subscriber_password' ]
    [ , [ @job_login = ] N'job_login' ]
    [ , [ @job_password = ] N'job_password' ]
    [ , [ @job_name = ] N'job_name' ]
    [ , [ @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 ]
    [ , [ @dts_package_name = ] N'dts_package_name' ]
    [ , [ @dts_package_password = ] N'dts_package_password' ]
    [ , [ @dts_package_location = ] N'dts_package_location' ]
    [ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
    [ , [ @distribution_job_name = ] N'distribution_job_name' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @subscriber_provider = ] N'subscriber_provider' ]
    [ , [ @subscriber_datasrc = ] N'subscriber_datasrc' ]
    [ , [ @subscriber_location = ] N'subscriber_location' ]
    [ , [ @subscriber_provider_string = ] N'subscriber_provider_string' ]
    [ , [ @subscriber_catalog = ] N'subscriber_catalog' ]
[ ; ]

Аргументы

[ @publication = ] N'publication'

Имя публикации. @publication — sysname без значения по умолчанию.

[ @subscriber = ] N'подписчик'

Имя экземпляра подписчика или имя прослушивателя группы доступности, если база данных подписчика является частью группы доступности. @subscriber — sysname с значением по умолчаниюNULL.

Примечание.

Имя сервера можно указать как <Hostname>,<PortNumber> для экземпляра по умолчанию или <Hostname>\<InstanceName>,<PortNumber> для именованного экземпляра. Укажите номер порта для подключения при развертывании SQL Server в Linux или Windows с пользовательским портом, а служба браузера отключена. Использование пользовательских номеров портов для удаленного распространителя применяется к SQL Server 2019 (15.x) и более поздним версиям.

[ @subscriber_db = ] N'subscriber_db'

Имя базы данных подписки. @subscriber_db — sysname с значением по умолчаниюNULL.

Для подписчика, отличного от SQL Server, укажите значение (назначение по умолчанию) для subscriber_db.

[ @subscriber_security_mode = ] subscriber_security_mode

Режим безопасности, используемый при подключении к подписчику при синхронизации. @subscriber_security_mode имеет небольшой размер с значением по умолчанию1. Следующие значения определяют режим безопасности:

  • 0 указывает проверку подлинности SQL Server.
  • 1указывает проверка подлинности Windows.
  • 2 указывает проверку подлинности паролей Microsoft Entra, начиная с SQL Server 2022 (16.x) CU 6.
  • 3 указывает встроенную проверку подлинности Microsoft Entra, начиная с SQL Server 2022 (16.x) CU 6.
  • 4 указывает проверку подлинности маркера Microsoft Entra, начиная с SQL Server 2022 (16.x) CU 6.

Внимание

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

[ @subscriber_login = ] N'subscriber_login'

Имя входа подписчика, используемое при подключении к подписчику при синхронизации. @subscriber_login — sysname с значением по умолчаниюNULL.

[ @subscriber_password = ] N'subscriber_password'

Пароль подписчика. subscriber_password требуется, если для subscriber_security_mode задано значение 0. @subscriber_password — sysname с значением по умолчаниюNULL. Если используется пароль подписчика, он автоматически шифруется.

Внимание

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

[ @job_login = ] N'job_login'

Имя входа для учетной записи, в которой выполняется агент. В Управляемый экземпляр SQL Azure используйте учетную запись SQL Server. @job_login — nvarchar(257) с значением по умолчаниюNULL. Эта учетная запись Windows всегда используется для подключений к распространителю средствами агентов и для подключений к подписчику в случае применения встроенных средств проверки подлинности Windows.

[ @job_password = ] N'job_password'

Пароль для учетной записи, в которой выполняется агент. @job_password — sysname, без значения по умолчанию.

Внимание

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

[ @job_name = ] N'job_name'

Имя существующего задания агента. @job_name — sysname с значением по умолчаниюNULL. Этот параметр указывается только в том случае, если подписка синхронизируется с использованием существующего задания, а не только что созданного задания (по умолчанию). Если вы не входите в предопределяемую роль сервера sysadmin , необходимо указать @job_login и @job_password при указании @job_name.

[ @frequency_type = ] frequency_type

Частота планирования агент распространения. @frequency_type является int и может быть одним из следующих значений.

значение Описание
1 Один раз.
2 по запросу
4 Ежедневно
8 Weekly (Еженедельно);
16 Ежемесячная
32 Ежемесячно с относительной датой
64 (по умолчанию) Автозапуск
128 Повторяющееся задание

Примечание.

Указание значения приводит к тому, 64 что агент распространения выполняться в непрерывном режиме. Это соответствует настройке -Continuous параметра для агента. Дополнительные сведения см. в статье Replication Distribution Agent.

[ @frequency_interval = ] frequency_interval

Значение, применяемое к частоте, заданной @frequency_type. @frequency_interval имеет значение int с значением по умолчанию1.

[ @frequency_relative_interval = ] frequency_relative_interval

Дата агент распространения. Этот параметр используется, если для frequency_type задано значение 32 (ежемесячное относительное). @frequency_relative_interval имеет значение int и может быть одним из следующих значений.

значение Описание
1 (по умолчанию) First
2 Second
4 Третья
8 Четвертая
16 Last

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

Коэффициент повторения, используемый @frequency_type. @frequency_recurrence_factor имеет значение int с значением по умолчанию0.

[ @frequency_subday = ] frequency_subday

Указывает частоту перепланирований в течение определенного периода. @frequency_subday имеет значение int и может быть одним из следующих значений.

значение Описание
1 Однократно
2 Second
4 (по умолчанию) Minute
8 Часы

[ @frequency_subday_interval = ] frequency_subday_interval

Интервал для @frequency_subday. @frequency_subday_interval имеет значение int с значением по умолчанию5.

[ @active_start_time_of_day = ] active_start_time_of_day

Время дня, когда агент распространения сначала запланировано, отформатировано как HHmmss. @active_start_time_of_day имеет значение int с значением по умолчанию0.

[ @active_end_time_of_day = ] active_end_time_of_day

Время дня, когда агент распространения перестает планироваться, форматируется как HHmmss. @active_end_time_of_day имеет значение int с значением по умолчанию235959.

[ @active_start_date = ] active_start_date

Дата, когда агент распространения впервые запланирована, отформатирована как yyyyMMdd. @active_start_date имеет значение int с значением по умолчанию0.

[ @active_end_date = ] active_end_date

Дата, когда агент распространения перестает планироваться, отформатирована как yyyyMMdd. @active_end_date имеет значение int с значением по умолчанию99991231.

[ @dts_package_name = ] N'dts_package_name'

Указывает имя пакета служб DTS. @dts_package_name — sysname с значением по умолчаниюNULL. Например, для задания имени пакета DTSPub_Package этот параметр должен иметь значение @dts_package_name = N'DTSPub_Package'.

[ @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. Расположение пакета может быть distributor или subscriber.

[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'

Указывает, может ли подписка быть синхронизирована с помощью Диспетчера синхронизации Майкрософт. @enabled_for_syncmgr — nvarchar(5) с значением по умолчаниюfalse.

  • Если falseподписка не зарегистрирована в диспетчере синхронизации.
  • Если trueподписка зарегистрирована в диспетчере синхронизации и может быть синхронизирована без запуска SQL Server Management Studio.

[ @distribution_job_name = ] N'distribution_job_name'

Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.

[ @publisher = ] N'publisher'

Имя издателя. @publisher — sysname с значением по умолчаниюNULL.

[ @subscriber_provider = ] N'subscriber_provider'

Уникальный программный идентификатор (PROGID), с помощью которого зарегистрирован поставщик OLE DB для источника данных, отличного от SQL Server. @subscriber_provider — sysname с значением по умолчаниюNULL. @subscriber_provider должен быть уникальным для поставщика OLE DB, установленного на распространителю. @subscriber_provider поддерживается только для подписчиков, отличных от SQL Server.

[ @subscriber_datasrc = ] N'subscriber_datasrc'

Имя источника данных, понятное поставщиком OLE DB.@subscriber_datasrc — nvarchar(4000) с значением по умолчаниюNULL. @subscriber_datasrc передается в качестве DBPROP_INIT_DATASOURCE свойства для инициализации поставщика OLE DB. @subscriber_datasrc поддерживается только для подписчиков, отличных от SQL Server.

[ @subscriber_location = ] N'subscriber_location'

Расположение базы данных, понятное поставщиком OLE DB. @subscriber_location — nvarchar(4000) с значением по умолчаниюNULL. @subscriber_location передается в качестве DBPROP_INIT_LOCATION свойства для инициализации поставщика OLE DB. @subscriber_location поддерживается только для подписчиков, отличных от SQL Server.

[ @subscriber_provider_string = ] N'subscriber_provider_string'

Поставщик OLE DB строка подключения, определяющий источник данных. @subscriber_provider_string — nvarchar(4000) с значением по умолчаниюNULL. @subscriber_provider_string передается в IDataInitialize или задается в качестве DBPROP_INIT_PROVIDERSTRING свойства для инициализации поставщика OLE DB. @subscriber_provider_string поддерживается только для подписчиков, отличных от SQL Server.

[ @subscriber_catalog = ] N'subscriber_catalog'

Каталог, используемый при подключении к поставщику OLE DB. @subscriber_catalog имеет имя sysname с значением по умолчаниюNULL. @subscriber_catalog передается в качестве DBPROP_INIT_CATALOG свойства для инициализации поставщика OLE DB. @subscriber_catalog поддерживается только для подписчиков, отличных от SQL Server.

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

0 (успешно) или 1 (сбой).

Замечания

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

Примеры

-- 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

Разрешения

Могут выполняться только члены предопределенных ролей сервера sysadmin или db_owner предопределенных ролей базы данных.sp_addpushsubscription_agent