sp_addpushsubscription_agent (Transact-SQL)

Se aplica a: SQL Server Azure SQL Managed Instance

Agrega un nuevo trabajo del agente programado que se utiliza para sincronizar una suscripción de inserción con una publicación transaccional. Este procedimiento almacenado se ejecuta en el publicador de la base de datos de publicación.

Importante

Al configurar un publicador con un distribuidor remoto, los valores proporcionados para todos los parámetros, incluidos @job_login y @job_password, se envían al distribuidor como texto sin formato. Antes de ejecutar este procedimiento almacenado, se recomienda cifrar la conexión entre el publicador y su distribuidor remoto. Para más información, consulte Configuración del Motor de base de datos de SQL Server para el cifrado de las conexiones.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Nombre de la publicación. @publication es sysname, sin ningún valor predeterminado.

[ @subscriber = ] N'subscriber'

El nombre de la instancia del suscriptor o el nombre del agente de escucha del grupo de disponibilidad si la base de datos del suscriptor forma parte de un grupo de disponibilidad. @subscriber es sysname, con un valor predeterminado de NULL.

Nota:

El nombre del servidor se puede especificar como <Hostname>,<PortNumber> para una instancia predeterminada o <Hostname>\<InstanceName>,<PortNumber> para una instancia con nombre. Especifique el número de puerto de la conexión cuando SQL Server se implemente en Linux o Windows con un puerto personalizado y el servicio del explorador esté deshabilitado. El uso de números de puerto personalizados para el distribuidor remoto se aplica a SQL Server 2019 (15.x) y versiones posteriores.

[ @subscriber_db = ] N'subscriber_db'

Nombre de la base de datos de suscripciones. @subscriber_db es sysname, con un valor predeterminado de NULL.

Para un suscriptor que no es de SQL Server, especifique un valor de (destino predeterminado) para subscriber_db.

[ @subscriber_security_mode = ] subscriber_security_mode

Modo de seguridad que se va a usar al conectarse a un suscriptor al sincronizar. @subscriber_security_mode es smallint, con un valor predeterminado de 1. Los valores siguientes definen el modo de seguridad:

  • 0 especifica la autenticación de SQL Server.
  • 1especifica autenticación de Windows.
  • 2 especifica la autenticación con contraseña de Microsoft Entra a partir de SQL Server 2022 (16.x) CU 6.
  • 3 especifica la autenticación integrada de Microsoft Entra a partir de SQL Server 2022 (16.x) CU 6.
  • 4 especifica la autenticación de tokens de Microsoft Entra a partir de SQL Server 2022 (16.x) CU 6.

Importante

Para las suscripciones de actualización en cola, use la autenticación de SQL Server para las conexiones a los suscriptores y especifique una cuenta diferente para la conexión a cada suscriptor. Para el resto de las suscripciones, utilice la autenticación de Windows.

[ @subscriber_login = ] N'subscriber_login'

Inicio de sesión del suscriptor que se usará al conectarse a un suscriptor al sincronizar. @subscriber_login es sysname, con un valor predeterminado de NULL.

[ @subscriber_password = ] N'subscriber_password'

Contraseña del suscriptor. subscriber_password es necesario si subscriber_security_mode está establecido 0en . @subscriber_password es sysname, con un valor predeterminado de NULL. Si se usa una contraseña de suscriptor, se cifra automáticamente.

Importante

No utilice una contraseña en blanco. Utilice una contraseña segura. Cuando sea posible, pida a los usuarios que proporcionen credenciales de seguridad en tiempo de ejecución. Si debe almacenar las credenciales en un archivo de script, proteja el archivo para evitar el acceso no autorizado.

[ @job_login = ] N'job_login'

Inicio de sesión de la cuenta con la que se ejecuta el agente. En Azure SQL Instancia administrada, use una cuenta de SQL Server. @job_login es nvarchar(257), con un valor predeterminado de NULL. Esta cuenta de Windows se utiliza siempre para las conexiones del agente con el distribuidor y para las conexiones con el suscriptor al utilizar la Autenticación de Windows integrada.

[ @job_password = ] N'job_password'

Contraseña de la cuenta con la que se ejecuta el agente. @job_password es sysname, sin ningún valor predeterminado.

Importante

Cuando sea posible, pida a los usuarios que proporcionen credenciales de seguridad en tiempo de ejecución. Si debe almacenar las credenciales en un archivo de script, proteja el archivo para evitar el acceso no autorizado.

[ @job_name = ] N'job_name'

Nombre de un trabajo de agente existente. @job_name es sysname, con un valor predeterminado de NULL. Este parámetro solo se especifica cuando la suscripción se sincroniza con un trabajo existente, en lugar de un trabajo recién creado (valor predeterminado). Si no es miembro del rol fijo de servidor sysadmin , debe especificar @job_login y @job_password al especificar @job_name.

[ @frequency_type = ] frequency_type

Frecuencia con la que programar el Agente de distribución. @frequency_type es int y puede ser uno de los siguientes valores.

Valor Descripción
1 Una vez
2 A petición
4 Diario
8 Semanal
16 Mensual
32 Mensualmente relativa
64 (valor predeterminado) Iniciar automáticamente
128 Periódico

Nota:

Especificar un valor de 64 hace que el Agente de distribución se ejecute en modo continuo. Esto corresponde a establecer el -Continuous parámetro para el agente. Para más información, consulte Replication Distribution Agent.

[ @frequency_interval = ] frequency_interval

Valor que se va a aplicar a la frecuencia establecida por @frequency_type. @frequency_interval es int, con un valor predeterminado de 1.

[ @frequency_relative_interval = ] frequency_relative_interval

Fecha del Agente de distribución. Este parámetro se usa cuando frequency_type se establece 32 en (relativo mensual). @frequency_relative_interval es int y puede ser uno de los siguientes valores.

Valor Descripción
1 (valor predeterminado) Primero
2 Segundo
4 Tercero
8 Cuarta
16 Último

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

Factor de periodicidad utilizado por @frequency_type. @frequency_recurrence_factor es int, con un valor predeterminado de 0.

[ @frequency_subday = ] frequency_subday

Especifica la frecuencia con la que se vuelve a programar durante el período definido. @frequency_subday es int y puede ser uno de los siguientes valores.

Valor Descripción
1 Una vez
2 Second
4 (valor predeterminado) Minute
8 Hora

[ @frequency_subday_interval = ] frequency_subday_interval

Intervalo de @frequency_subday. @frequency_subday_interval es int, con un valor predeterminado de 5.

[ @active_start_time_of_day = ] active_start_time_of_day

Hora del día en que la Agente de distribución se programa por primera vez, con el formato HHmmss. @active_start_time_of_day es int, con un valor predeterminado de 0.

[ @active_end_time_of_day = ] active_end_time_of_day

Hora del día en que el Agente de distribución deja de programarse, con el formato HHmmss. @active_end_time_of_day es int, con un valor predeterminado de 235959.

[ @active_start_date = ] active_start_date

Fecha en la que el Agente de distribución se programa por primera vez, con el formato yyyyMMdd. @active_start_date es int, con un valor predeterminado de 0.

[ @active_end_date = ] active_end_date

Fecha en la que el Agente de distribución deja de programarse, con el formato yyyyMMdd. @active_end_date es int, con un valor predeterminado de 99991231.

[ @dts_package_name = ] N'dts_package_name'

Especifica el nombre del paquete de Servicios de transformación de datos (DTS). @dts_package_name es sysname, con un valor predeterminado de NULL. Por ejemplo, para especificar el nombre de paquete DTSPub_Package, el parámetro sería @dts_package_name = N'DTSPub_Package'.

[ @dts_package_password = ] N'dts_package_password'

Especifica la contraseña necesaria para ejecutar el paquete. @dts_package_password es sysname, con un valor predeterminado de NULL, lo que significa que el paquete no tiene contraseña.

Nota:

Debe especificar una contraseña si se especifica @dts_package_name .

[ @dts_package_location = ] N'dts_package_location'

Especifica la ubicación del paquete. @dts_package_location es nvarchar(12), con un valor predeterminado de distributor. La ubicación del paquete puede ser distributor o subscriber.

[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'

Especifica si la suscripción se puede sincronizar a través del Administrador de sincronización de Microsoft. @enabled_for_syncmgr es nvarchar(5), con un valor predeterminado de false.

  • Si falsees , la suscripción no se registra con el Administrador de sincronización.
  • Si truees , la suscripción se registra con el Administrador de sincronización y se puede sincronizar sin iniciar SQL Server Management Studio.

[ @distribution_job_name = ] N'distribution_job_name'

Solamente se identifica con fines informativos. No compatible. La compatibilidad con versiones posteriores no está garantizada.

[ @publisher = ] N'publisher'

El nombre del publicador. @publisher es sysname, con un valor predeterminado de NULL.

[ @subscriber_provider = ] N'subscriber_provider'

Identificador de programación único (PROGID) con el que se registra el proveedor OLE DB para el origen de datos que no es de SQL Server. @subscriber_provider es sysname, con un valor predeterminado de NULL. @subscriber_provider debe ser único para el proveedor OLE DB instalado en el distribuidor. @subscriber_provider solo se admite para suscriptores que no son de SQL Server.

[ @subscriber_datasrc = ] N'subscriber_datasrc'

Nombre del origen de datos tal como lo entiende el proveedor OLE DB.@subscriber_datasrc es nvarchar(4000), con un valor predeterminado de NULL. @subscriber_datasrc se pasa como propiedad DBPROP_INIT_DATASOURCE para inicializar el proveedor OLE DB. @subscriber_datasrc solo se admite para suscriptores que no son de SQL Server.

[ @subscriber_location = ] N'subscriber_location'

La ubicación de la base de datos tal como lo entiende el proveedor OLE DB. @subscriber_location es nvarchar(4000), con un valor predeterminado de NULL. @subscriber_location se pasa como propiedad DBPROP_INIT_LOCATION para inicializar el proveedor OLE DB. @subscriber_location solo se admite para suscriptores que no son de SQL Server.

[ @subscriber_provider_string = ] N'subscriber_provider_string'

La cadena de conexión específica del proveedor OLE DB que identifica el origen de datos. @subscriber_provider_string es nvarchar(4000), con un valor predeterminado de NULL. @subscriber_provider_string se pasa a IDataInitialize o se establece como la DBPROP_INIT_PROVIDERSTRING propiedad para inicializar el proveedor OLE DB. @subscriber_provider_string solo se admite para suscriptores que no son de SQL Server.

[ @subscriber_catalog = ] N'subscriber_catalog'

Catálogo que se va a usar al realizar una conexión con el proveedor OLE DB. @subscriber_catalog es sysname, con un valor predeterminado de NULL. @subscriber_catalog se pasa como propiedad DBPROP_INIT_CATALOG para inicializar el proveedor OLE DB. @subscriber_catalog solo se admite para suscriptores que no son de SQL Server.

Valores de código de retorno

0 (correcto) o 1 (erróneo).

Comentarios

sp_addpushsubscription_agent se usa en la replicación de instantáneas y la replicación transaccional.

Ejemplos

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

Permisos

Solo los miembros del rol fijo de servidor sysadmin o db_owner rol fijo de base de datos pueden ejecutar sp_addpushsubscription_agent.