sp_addpullsubscription_agent (Transact-SQL)

Se aplica a:SQL ServerAzure SQL Managed Instance

Agrega un nuevo trabajo de agente programado utilizado para sincronizar una suscripción de extracción a una publicación transaccional. Este procedimiento almacenado se ejecuta en el suscriptor de la base de datos de suscripciones.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_addpullsubscription_agent
    [ @publisher = ] N'publisher'
    [ , [ @publisher_db = ] N'publisher_db' ]
    , [ @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' ]
    [ , [ @distributor = ] N'distributor' ]
    [ , [ @distribution_db = ] N'distribution_db' ]
    [ , [ @distributor_security_mode = ] distributor_security_mode ]
    [ , [ @distributor_login = ] N'distributor_login' ]
    [ , [ @distributor_password = ] N'distributor_password' ]
    [ , [ @optional_command_line = ] N'optional_command_line' ]
    [ , [ @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 ]
    [ , [ @distribution_jobid = ] distribution_jobid OUTPUT ]
    [ , [ @encrypted_distributor_password = ] encrypted_distributor_password ]
    [ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
    [ , [ @ftp_address = ] N'ftp_address' ]
    [ , [ @ftp_port = ] ftp_port ]
    [ , [ @ftp_login = ] N'ftp_login' ]
    [ , [ @ftp_password = ] N'ftp_password' ]
    [ , [ @alt_snapshot_folder = ] N'alt_snapshot_folder' ]
    [ , [ @working_directory = ] N'working_directory' ]
    [ , [ @use_ftp = ] N'use_ftp' ]
    [ , [ @publication_type = ] publication_type ]
    [ , [ @dts_package_name = ] N'dts_package_name' ]
    [ , [ @dts_package_password = ] N'dts_package_password' ]
    [ , [ @dts_package_location = ] N'dts_package_location' ]
    [ , [ @reserved = ] N'reserved' ]
    [ , [ @offloadagent = ] N'offloadagent' ]
    [ , [ @offloadserver = ] N'offloadserver' ]
    [ , [ @job_name = ] N'job_name' ]
    [ , [ @job_login = ] N'job_login' ]
    [ , [ @job_password = ] N'job_password' ]
[ ; ]

Argumentos

[ @publisher = ] N'publisher'

El nombre del publicador. @publisher es sysname, sin ningún valor predeterminado.

Nota:

El nombre del servidor se puede especificar como <Hostname>,<PortNumber>. 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.

[ @publisher_db = ] N'publisher_db'

Nombre de la base de datos del publicador. @publisher_db es sysname, con un valor predeterminado de NULL. los publicadores de Oracle omiten @publisher_db.

[ @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 está en un grupo de disponibilidad. @subscriber es sysname, con un valor predeterminado de NULL.

Nota:

Este parámetro está en desuso y se mantiene para la compatibilidad con versiones anteriores de los scripts.

Cuando se ejecuta sp_addpullsubscription_agent para un suscriptor que forma parte de un grupo de disponibilidad, establezca @subscriber en el nombre del agente de escucha del grupo de disponibilidad. Si ejecuta SQL Server 2016 (13.x) y versiones anteriores, o SQL Server 2017 (14.x) antes de CU 16, el procedimiento almacenado se ejecuta sin devolver un error, pero el parámetro @subscriber en el Agente de distribución de replicación no hace referencia al nombre del agente de escucha del grupo de disponibilidad; el parámetro se crea con el nombre del servidor de suscriptor en el que se ejecuta el comando. Para modificar este problema, actualice manualmente el Agente de distribución trabajo@subscriber parámetro con el valor del nombre del agente de escucha del grupo de disponibilidad.

[ @subscriber_db = ] N'subscriber_db'

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

Nota:

Este parámetro está en desuso y se mantiene para la compatibilidad con versiones anteriores de los scripts.

[ @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 int, con un valor predeterminado de NULL.

  • 0 especifica la autenticación de SQL Server.
  • 1especifica autenticación de Windows

Nota:

Este parámetro está en desuso y se mantiene para la compatibilidad con versiones anteriores de los scripts. El Agente de distribución siempre conecta con el suscriptor local mediante Autenticación de Windows. Si se especifica un valor distinto de NULL o 1 para este parámetro, se devuelve un mensaje de advertencia.

[ @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.

Nota:

Este parámetro está en desuso y se mantiene para la compatibilidad con versiones anteriores de los scripts. Si se especifica un valor para este parámetro, se devuelve un mensaje de advertencia, pero el valor se pasa por alto.

[ @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.

Nota:

Este parámetro está en desuso y se mantiene para la compatibilidad con versiones anteriores de los scripts. Si se especifica un valor para este parámetro, se devuelve un mensaje de advertencia, pero el valor se pasa por alto.

[ @distributor = ] N'distributor'

Nombre del distribuidor. @distributor es sysname, con un valor predeterminado del valor especificado por @publisher.

[ @distribution_db = ] N'distribution_db'

El nombre de la base de datos de distribución. @distribution_db es sysname, con un valor predeterminado de NULL.

[ @distributor_security_mode = ] distributor_security_mode

Nota:

El identificador de Microsoft Entra se conocía anteriormente como Azure Active Directory (Azure AD).

Modo de seguridad que se va a usar al conectarse a un distribuidor al sincronizar. @distributor_security_mode es int, 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

Siempre que sea posible, utilice la autenticación de Windows.

[ @distributor_login = ] N'distributor_login'

Inicio de sesión del distribuidor que se usará al conectarse a un distribuidor al sincronizar. @distributor_login es sysname, con un valor predeterminado de NULL. @distributor_login es necesario si @distributor_security_mode está establecido 0en .

[ @distributor_password = ] N'distributor_password'

Contraseña del distribuidor. distributor_password es necesario si distributor_security_mode está establecido 0en . @distributor_password es sysname, con un valor predeterminado de NULL.

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.

[ @optional_command_line = ] N'optional_command_line'

Símbolo del sistema opcional proporcionado al Agente de distribución. Por ejemplo, -DefinitionFile C:\Distdef.txt o -CommitBatchSize 10. @optional_command_line es nvarchar(4000) con un valor predeterminado de una cadena vacía.

[ @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 (valor predeterminado) A petición
4 Diario
8 Semanal
16 Mensual
32 Mensualmente relativa
64 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 1.

[ @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 (valor predeterminado) Una vez
2 Second
4 Minute
8 Hora

[ @frequency_subday_interval = ] frequency_subday_interval

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

[ @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 0.

[ @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 0.

[ @distribution_jobid = ] distribution_jobid OUTPUT

Identificador del Agente de distribución de este trabajo. @distribution_jobid es un parámetro OUTPUT de tipo binary(16), con un valor predeterminado de NULL.

[ @encrypted_distributor_password = ] encrypted_distributor_password

@encrypted_distributor_password es bit, con un valor predeterminado de 0.

Nota:

Ya no se admite la configuración de @encrypted_distributor_password . Si intenta establecer este parámetro 1 de bit en, se producirá un error.

[ @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.

[ @ftp_address = ] N'ftp_address'

Este parámetro está en desuso y se mantiene para la compatibilidad con versiones anteriores de los scripts.

[ @ftp_port = ] ftp_port

Este parámetro está en desuso y se mantiene para la compatibilidad con versiones anteriores de los scripts.

[ @ftp_login = ] N'ftp_login'

Este parámetro está en desuso y se mantiene para la compatibilidad con versiones anteriores de los scripts.

[ @ftp_password = ] N'ftp_password'

Este parámetro está en desuso y se mantiene para la compatibilidad con versiones anteriores de los scripts.

[ @alt_snapshot_folder = ] N'alt_snapshot_folder'

Especifica la ubicación de la carpeta alternativa de la instantánea. @alt_snapshot_folder es nvarchar(255), con un valor predeterminado de NULL.

[ @working_directory = ] N'working_directory'

Nombre del directorio de trabajo utilizado para almacenar archivos de datos y de esquema para la publicación. @working_directory es nvarchar(255), con un valor predeterminado de NULL. El nombre se debe especificar en el formato UNC.

[ @use_ftp = ] N'use_ftp'

Especifica que se utilizará FTP en lugar del protocolo regular para recuperar las instantáneas. @use_ftp es nvarchar(5), con un valor predeterminado de false.

[ @publication_type = ] publication_type

Especifica el tipo de replicación de la publicación. @publication_type es tinyint, con un valor predeterminado de 0.

  • Si 0es , publication es un tipo de transacción.
  • Si 1es , publication es un tipo de instantánea.
  • Si 2es , publication es un tipo de combinación.

[ @dts_package_name = ] N'dts_package_name'

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

[ @dts_package_password = ] N'dts_package_password'

Especifica la contraseña del paquete, si procede. @dts_package_password es sysname, con un valor predeterminado de NULL, lo que significa que una contraseña no está en el paquete.

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 subscriber. La ubicación del paquete puede ser distributor o subscriber.

[ @reserved = ] N'reserved'

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

[ @offloadagent = ] N'offloadagent'

Este parámetro está en desuso y se mantiene para la compatibilidad con versiones anteriores de los scripts. Si se especifica un valor para este parámetro, se devuelve un mensaje de advertencia, pero el valor se pasa por alto. Establecer @offloadagent en un valor distinto de false genera un error.

[ @offloadserver = ] N'offloadserver'

Este parámetro está en desuso y se mantiene para la compatibilidad con versiones anteriores de los scripts. Si se especifica un valor para este parámetro, se devuelve un mensaje de advertencia, pero el valor se pasa por alto. Establecer @offloadserver en un valor distinto de false genera un error.

[ @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 se sincroniza la suscripción con un trabajo existente en lugar de utilizar un trabajo recién creado (la opción predeterminada). Si no es miembro del rol fijo de servidor sysadmin , debe especificar @job_login y @job_password al especificar @job_name.

[ @job_login = ] N'job_login'

Inicio de sesión de la cuenta de Windows con la que se ejecuta el agente. @job_login es nvarchar(257), sin ningún valor predeterminado. Esta cuenta de Windows siempre se utiliza para las conexiones del agente con el suscriptor.

[ @job_password = ] N'job_password'

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

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.

Valores de código de retorno

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

Comentarios

sp_addpullsubscription_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".

-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2022';

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [AdventureWorks2022Replica]
EXEC sp_addpullsubscription 
  @publisher = @publisher, 
  @publication = @publication, 
  @publisher_db = @publicationDB;

-- Add an agent job to synchronize the pull subscription.
EXEC sp_addpullsubscription_agent 
  @publisher = @publisher, 
  @publisher_db = @publicationDB, 
  @publication = @publication, 
  @distributor = @publisher, 
  @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_addpullsubscription_agent.