sys.sp_addpushsubscription_agent (Transact-SQL)

Aplica-se a: SQL ServerAzure SQL Managed Instance

Adiciona um novo trabalho agendado de agente usado para sincronizar uma subscrição push com uma publicação transacional. Este procedimento armazenado é executado no Publisher no banco de dados de publicação.

Importante

Ao configurar um Publisher com um Distribuidor remoto, os valores fornecidos para todos os parâmetros, incluindo @job_login e @job_password, são enviados ao Distribuidor em texto simples. Deve encriptar a ligação entre o Publisher e o seu Distribuidor remoto antes de executar este procedimento armazenado. Para obter mais informações, consulte Configurar o Mecanismo de Banco de Dados do SQL Server para criptografar conexões.

Transact-SQL convenções de sintaxe

Syntax

sys.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' ]
    [ , [ @job_security_mode = ] job_security_mode ]
[ ; ]

Arguments

[ @publication = ] N'publicação'

O nome da publicação. @publication é sysname, sem padrão.

[ @subscriber = ] N'assinante'

O nome da instância do assinante, ou o nome do ouvinte AG se a base de dados de assinantes fizer parte de um grupo de disponibilidade. @subscriber é sysname, com um padrão de NULL.

Note

O nome do servidor pode ser especificado como <Hostname>,<PortNumber> para uma instância padrão ou <Hostname>\<InstanceName>,<PortNumber> para uma instância nomeada. Especifique o número da porta para sua conexão quando o SQL Server for implantado no Linux ou no Windows com uma porta personalizada e o serviço do navegador estiver desabilitado. O uso de números de porta personalizados para distribuidor remoto se aplica ao SQL Server 2019 (15.x) e versões posteriores.

[ @subscriber_db = ] N'subscriber_db'

O nome da base de dados de subscrição. @subscriber_db é sysname, com um padrão de NULL.

Para um assinante não SQL Server, especifique um valor de (destino por defeito) para @subscriber_db.

[ @subscriber_security_mode = ] subscriber_security_mode

O modo de segurança a usar ao ligar-se a um Assinante durante a sincronização. @subscriber_security_mode é smallint, com um padrão de 1. Os seguintes valores definem o modo de segurança:

  • 0 especifica autenticação SQL Server.
  • 1 especifica autenticação do Windows.
  • 2especifica a autenticação por palavra-passe Microsoft Entra a partir do SQL Server 2022 (16.x) 6.
  • 3especifica a autenticação integrada Microsoft Entra a partir do SQL Server 2022 (16.x) 6.
  • 4especifica a autenticação do token Microsoft Entra a partir do SQL Server 2022 (16.x) 6.

Importante

Para subscrições de atualização em fila, use a Autenticação SQL Server para ligações aos Assinantes e especifique uma conta diferente para cada Assinante. Para todas as outras subscrições, use a Autenticação do Windows.

[ @subscriber_login = ] N'subscriber_login'

O login do Assinante para usar ao ligar-se a um Assinante durante a sincronização. @subscriber_login é sysname, com um padrão de NULL.

[ @subscriber_password = ] N'subscriber_password'

A palavra-passe do Subscritor. @subscriber_password é necessário se @subscriber_security_mode estiver definido para 0. @subscriber_password é sysname, com um padrão de NULL. Se for usada uma palavra-passe de assinante, ela é automaticamente encriptada.

Importante

Não utilize uma palavra-passe em branco. Use uma senha forte. Quando possível, solicite que os usuários insiram credenciais de segurança em tempo de execução. Se você precisar armazenar credenciais em um arquivo de script, deverá proteger o arquivo para impedir o acesso não autorizado.

[ @job_login = ] N'job_login'

O login da conta com a qual o agente opera. No Azure SQL Managed Instance, use uma conta SQL Server. @job_login é nvarchar(257), com um padrão de NULL. Esta conta do Windows é sempre usada para ligações de agentes ao Distribuidor e para ligações ao Assinante quando utilizam autenticação integrada do Windows.

[ @job_password = ] N'job_password'

A palavra-passe da conta com a qual o agente opera. @job_password é sysname, sem padrão.

Importante

Quando possível, solicite que os usuários insiram credenciais de segurança em tempo de execução. Se você precisar armazenar credenciais em um arquivo de script, deverá proteger o arquivo para impedir o acesso não autorizado.

[ @job_name = ] N'job_name'

O nome de um agente já existente. @job_name é sysname, com o padrão de NULL. Este parâmetro só é especificado quando a subscrição é sincronizada usando um trabalho existente, em vez de um trabalho recém-criado (o padrão). Se não fores membro do servidor fixo de sysadmin , deves especificar @job_login e @job_password quando especificares @job_name.

[ @frequency_type = ] frequency_type

A frequência com que agendar o Distribution Agent. @frequency_type é int, e pode ser um dos seguintes valores.

Value Description
1 Uma vez
2 A pedido
4 Diariamente
8 Semanalmente
16 Monthly
32 Parente mensal
64 (padrão) Arranque automático
128 Recorrente

Note

Especificar um valor de 64 faz com que o Distribution Agent funcione em modo contínuo. Isto corresponde a definir o -Continuous parâmetro para o agente. Para obter mais informações, consulte Replication Distribution Agent.

[ @frequency_interval = ] frequency_interval

O valor a aplicar à frequência definida por @frequency_type. @frequency_interval é int, com um padrão de 1.

[ @frequency_relative_interval = ] frequency_relative_interval

A data do Agente de Distribuição. Este parâmetro é usado quando @frequency_type está definido como 32 (relativo mensal). @frequency_relative_interval é int, e pode ser um dos seguintes valores.

Value Description
1 (padrão) First
2 Second
4 Third
8 Fourth
16 Último

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

O fator de recorrência utilizado por @frequency_type. @frequency_recurrence_factor é int, com um padrão de 0.

[ @frequency_subday = ] frequency_subday

Especifica com que frequência reagendar durante o período definido. @frequency_subday é int, e pode ser um dos seguintes valores.

Value Description
1 Uma vez
2 Second
4 (padrão) Minuto
8 Hora

[ @frequency_subday_interval = ] frequency_subday_interval

O intervalo para @frequency_subday. @frequency_subday_interval é int, com um padrão de 5.

[ @active_start_time_of_day = ] active_start_time_of_day

A hora do dia em que o Agente de Distribuição é agendado pela primeira vez, formatado como HHmmss. @active_start_time_of_day é int, com um padrão de 0.

[ @active_end_time_of_day = ] active_end_time_of_day

A hora do dia em que o Agente de Distribuição deixa de ser agendado, formatada como HHmmss. @active_end_time_of_day é int, com um padrão de 235959.

[ @active_start_date = ] active_start_date

A data em que o Agente de Distribuição é agendado pela primeira vez, formatada como yyyyMMdd. @active_start_date é int, com um padrão de 0.

[ @active_end_date = ] active_end_date

A data em que o Agente de Distribuição deixa de ser agendado, formatada como yyyyMMdd. @active_end_date é int, com um padrão de 99991231.

[ @dts_package_name = ] N'dts_package_name'

Especifica o nome do pacote Data Transformation Services (DTS). @dts_package_name é sysname, com um padrão de NULL. Por exemplo, para especificar um nome de pacote de DTSPub_Package, o parâmetro seria @dts_package_name = N'DTSPub_Package'.

[ @dts_package_password = ] N'dts_package_password'

Especifica a palavra-passe necessária para executar o pacote. @dts_package_password é sysname, com um padrão de NULL, o que significa que o pacote não tem palavra-passe.

Note

Deve especificar uma palavra-passe se @dts_package_name for especificada.

[ @dts_package_location = ] N'dts_package_location'

Especifica a localização da encomenda. @dts_package_location é nvarchar(12), com um padrão de distributor. A localização do pacote pode ser distributor ou subscriber.

[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'

Especifica se a subscrição pode ser sincronizada através do Microsoft Synchronization Manager. @enabled_for_syncmgr é nvarchar(5), com um padrão de false.

  • Se false, a subscrição não está registada no Gestor de Sincronização.
  • Se truefor , a subscrição está registada no Gestor de Sincronização e pode ser sincronizada sem necessidade de iniciar o SQL Server Management Studio.

[ @distribution_job_name = ] N'distribution_job_name'

Identificado apenas para fins informativos. Não suportado. A compatibilidade futura não é garantida.

@publisher [ = ] N'editor'

O nome do Editor. @publisher é sysname, com um padrão de NULL.

[ @subscriber_provider = ] N'subscriber_provider'

O identificador programático único (PROGID) com o qual o fornecedor OLE DB para a fonte de dados não-SQL Server está registado. @subscriber_provider é sysname, com um padrão de NULL. @subscriber_provider deve ser único para o fornecedor OLE DB instalado no Distribuidor. @subscriber_provider é suportado apenas para subscritores não SQL Server.

[ @subscriber_datasrc = ] N'subscriber_datasrc'

O nome da fonte de dados conforme entendido pelo fornecedor OLE DB. @subscriber_datasrc é nvarchar(4000), com um padrão de NULL. @subscriber_datasrc é passado como a DBPROP_INIT_DATASOURCE propriedade para inicializar o fornecedor OLE DB. @subscriber_datasrc é suportado apenas para subscritores não SQL Server.

[ @subscriber_location = ] N'subscriber_location'

A localização da base de dados conforme compreendida pelo fornecedor OLE DB. @subscriber_location é nvarchar(4000), com um padrão de NULL. @subscriber_location é passado como a DBPROP_INIT_LOCATION propriedade para inicializar o fornecedor OLE DB. @subscriber_location é suportado apenas por subscritores não SQL Server.

[ @subscriber_provider_string = ] N'subscriber_provider_string'

O cadeia de ligação específico do fornecedor do OLE DB que identifica a fonte de dados. @subscriber_provider_string é nvarchar(4000), com um padrão de NULL. @subscriber_provider_string é passado para o IDataInitialize ou definido como propriedade DBPROP_INIT_PROVIDERSTRING para inicializar o fornecedor OLE DB. @subscriber_provider_string é suportado apenas para subscritores não SQL Server.

[ @subscriber_catalog = ] N'subscriber_catalog'

O catálogo a ser usado ao estabelecer uma ligação ao fornecedor OLE DB. @subscriber_catalog é sysname, com o padrão de NULL. @subscriber_catalog é passado como propriedade DBPROP_INIT_CATALOG para inicializar o fornecedor OLE DB. @subscriber_catalog é suportado apenas para subscritores que não SQL Server.

[ @job_security_mode = ] job_security_mode

Identificado apenas para fins informativos. Não suportado. A compatibilidade futura não é garantida.

Valores de código de retorno

0 (sucesso) ou 1 (fracasso).

Remarks

sp_addpushsubscription_agent é usado na replicação instantânea e na replicação transacional.

Exemplos

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

Permissions

Apenas os membros do papel fixo de servidor administrador do sistema ou db_owner papel fixo de base de dados podem executar sp_addpushsubscription_agent.