sp_addpushsubscription_agent (Transact-SQL)

Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure

Adiciona um novo trabalho agendado de agente usado para sincronizar uma assinatura push com uma publicação transacional. Esse procedimento armazenado é executado no Publicador, no banco de dados publicador.

Importante

Ao configurar um Publicador com um Distribuidor remoto, os valores fornecidos para todos os parâmetros, incluindo @job_login e @job_password, são enviados ao Distribuidor como texto sem formatação. Você deve criptografar a conexão entre o Publicador e seu Distribuidor remoto antes de executar esse procedimento armazenado. Para obter mais informações, confira Configurar o Mecanismo de Banco de Dados do SQL Server para criptografia de conexões.

Convenções de sintaxe de Transact-SQL

Sintaxe

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' ]
[ ; ]

Argumentos

@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 do AG se o banco de dados do assinante fizer parte de um grupo de disponibilidade. @subscriber é sysname, com um padrão de NULL.

Observação

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 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 do banco de dados de assinatura. @subscriber_db é sysname, com um padrão de NULL.

Para um Assinante não-SQL Server, especifique um valor de (destino padrão) para subscriber_db.

@subscriber_security_mode [ = ] subscriber_security_mode

O modo de segurança a ser usado ao se conectar 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 a autenticação do SQL Server.
  • 1 especifica a autenticação do Windows.
  • 2 especifica a autenticação de senha do Microsoft Entra a partir do SQL Server 2022 (16.x) 6.
  • 3 especifica a autenticação integrada do Microsoft Entra a partir do SQL Server 2022 (16.x) 6.
  • 4 especifica a autenticação de token do Microsoft Entra a partir do SQL Server 2022 (16.x) 6.

Importante

Para assinaturas de atualização enfileiradas, use a Autenticação do SQL Server para conexões com Assinantes e especifique uma conta diferente para a conexão com cada Assinante. Para todas as outras assinaturas, use a Autenticação do Windows.

@subscriber_login [ = ] N'subscriber_login'

O login do Assinante a ser usado ao se conectar a um Assinante ao sincronizar. @subscriber_login é sysname, com um padrão de NULL.

@subscriber_password [ = ] N'subscriber_password'

A senha do assinante. subscriber_password é necessário se subscriber_security_mode estiver definido como 0. @subscriber_password é sysname, com um padrão de NULL. Se uma senha de assinante for usada, ela será criptografada automaticamente.

Importante

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

@job_login [ = ] N'job_login'

O logon da conta na qual o agente é executado. Na Instância Gerenciada de SQL do Azure, use uma conta do SQL Server. @job_login é nvarchar(257), com um padrão de NULL. Essa conta do Windows é sempre usada para conexões do agente com o Distribuidor e para conexões com o Assinante ao usar a autenticação integrada do Windows.

@job_password [ = ] N'job_password'

A senha da conta sob a qual o agente é executado. @job_password é sysname, sem padrão.

Importante

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

@job_name [ = ] N'job_name'

O nome de um trabalho de agente existente. @job_name é sysname, com um padrão de NULL. Esse parâmetro só é especificado quando a assinatura é sincronizada usando um trabalho existente, em vez de um trabalho recém-criado (o padrão). Se você não for membro da função de servidor fixa sysadmin , deverá especificar @job_login e @job_password ao especificar @job_name.

@frequency_type [ = ] frequency_type

A frequência com que o Agente de Distribuição deve ser agendado. @frequency_type é int e pode ser um dos seguintes valores.

Valor Descrição
1 Uma vez
2 Sob demanda
4 Diário
8 Semanal
16 Mensal
32 Relativo ao mês
64 (padrão) Iniciar automaticamente
128 Recorrente

Observação

Especificar um valor de 64 faz com que o Distribution Agent seja executado no modo contínuo. Isso corresponde à configuração do -Continuous parâmetro para o agente. Para obter mais informações, consulte Replication Distribution Agent.

@frequency_interval [ = ] frequency_interval

O valor a ser aplicado à 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. Esse parâmetro é usado quando frequency_type é definido como 32 (relativo mensal). @frequency_relative_interval é int e pode ser um dos seguintes valores.

Valor Descrição
1 (padrão) Primeiro
2 Segundo
4 Terceiro
8 Quarto
16 Last

@frequency_recurrence_factor [ = ] frequency_recurrence_factor

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

@frequency_subday [ = ] frequency_subday

Especifica a frequência de reprogramação durante o período definido. @frequency_subday é int e pode ser um dos valores a seguir.

Valor Descrição
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 Distribution Agent é 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 Distribution Agent deixa de ser agendado, formatado 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 Distribution Agent é agendado pela primeira vez, formatado como yyyyMMdd. @active_start_date é int, com um padrão de 0.

@active_end_date [ = ] active_end_date

A data em que o Distribution Agent deixa de ser agendado, formatado como yyyyMMdd. @active_end_date é int, com um padrão de 99991231.

@dts_package_name [ = ] N'dts_package_name'

Especifica o nome do pacote DTS (Data Transformation Services). @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 senha 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 senha.

Observação

Você deve especificar uma senha se @dts_package_name for especificado.

@dts_package_location [ = ] N'dts_package_location'

Especifica o local do pacote. @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 assinatura pode ser sincronizada por meio do Gerenciador de Sincronização da Microsoft. @enabled_for_syncmgr é nvarchar(5), com um padrão de false.

  • Se false, a assinatura não está registrada no Gerenciador de Sincronização.
  • Se true, a assinatura é registrada no Gerenciador de Sincronização e pode ser sincronizada sem iniciar o SQL Server Management Studio.

@distribution_job_name [ = ] N'distribution_job_name'

Identificado apenas para fins informativos. Não há suporte. A compatibilidade futura não está garantida.

@publisher [ = ] N'editor'

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

@subscriber_provider [ = ] N'subscriber_provider'

O PROGID (identificador programático exclusivo) com o qual o provedor OLE DB para a fonte de dados não SQL Server está registrado. @subscriber_provider é sysname, com um padrão de NULL. @subscriber_provider deve ser exclusivo para o provedor OLE DB instalado no Distribuidor. @subscriber_provider só tem suporte para Assinantes não SQL Server.

@subscriber_datasrc [ = ] N'subscriber_datasrc'

O nome da fonte de dados conforme entendido pelo provedor OLE DB.@subscriber_datasrc é nvarchar(4000), com um padrão de NULL. @subscriber_datasrc é passado como a DBPROP_INIT_DATASOURCE propriedade para inicializar o provedor OLE DB. @subscriber_datasrc só tem suporte para Assinantes não SQL Server.

@subscriber_location [ = ] N'subscriber_location'

O local do banco de dados conforme entendido pelo provedor OLE DB. @subscriber_location é nvarchar(4000), com um padrão de NULL. @subscriber_location é passado como a DBPROP_INIT_LOCATION propriedade para inicializar o provedor OLE DB. @subscriber_location só tem suporte para Assinantes não SQL Server.

@subscriber_provider_string [ = ] N'subscriber_provider_string'

A cadeia de conexão específica do provedor OLE DB que identifica a fonte de dados. @subscriber_provider_string é nvarchar(4000), com um padrão de NULL. @subscriber_provider_string é passado para IDataInitialize ou definido como a DBPROP_INIT_PROVIDERSTRING propriedade para inicializar o provedor OLE DB. @subscriber_provider_string só tem suporte para Assinantes não SQL Server.

@subscriber_catalog [ = ] N'subscriber_catalog'

O catálogo a ser usado ao fazer uma conexão com o provedor OLE DB. @subscriber_catalog é sysname, com um padrão de NULL. @subscriber_catalog é passado como a DBPROP_INIT_CATALOG propriedade para inicializar o provedor OLE DB. @subscriber_catalog só tem suporte para Assinantes não SQL Server.

Valores do código de retorno

0 (sucesso) ou 1 (falha).

Comentários

sp_addpushsubscription_agent é usado na replicação de instantâneo 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

Permissões

Somente membros da função de servidor fixa sysadmin ou db_owner função de banco de dados fixa podem executar sp_addpushsubscription_agent.