sp_addsubscription (Transact-SQL)

Se aplica a:SQL ServerAzure SQL Database

Agrega una suscripción a una publicación y define el estado del suscriptor. Este procedimiento almacenado se ejecuta en el publicador de la base de datos de publicación.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_addsubscription
    [ @publication = ] N'publication'
    [ , [ @article = ] N'article' ]
    [ , [ @subscriber = ] N'subscriber' ]
    [ , [ @destination_db = ] N'destination_db' ]
    [ , [ @sync_type = ] N'sync_type' ]
    [ , [ @status = ] N'status' ]
    [ , [ @subscription_type = ] N'subscription_type' ]
    [ , [ @update_mode = ] N'update_mode' ]
    [ , [ @loopback_detection = ] N'loopback_detection' ]
    [ , [ @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 ]
    [ , [ @optional_command_line = ] N'optional_command_line' ]
    [ , [ @reserved = ] N'reserved' ]
    [ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
    [ , [ @offloadagent = ] offloadagent ]
    [ , [ @offloadserver = ] N'offloadserver' ]
    [ , [ @dts_package_name = ] N'dts_package_name' ]
    [ , [ @dts_package_password = ] N'dts_package_password' ]
    [ , [ @dts_package_location = ] N'dts_package_location' ]
    [ , [ @distribution_job_name = ] N'distribution_job_name' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @backupdevicetype = ] N'backupdevicetype' ]
    [ , [ @backupdevicename = ] N'backupdevicename' ]
    [ , [ @mediapassword = ] N'mediapassword' ]
    [ , [ @password = ] N'password' ]
    [ , [ @fileidhint = ] fileidhint ]
    [ , [ @unload = ] unload ]
    [ , [ @subscriptionlsn = ] subscriptionlsn ]
    [ , [ @subscriptionstreams = ] subscriptionstreams ]
    [ , [ @subscriber_type = ] subscriber_type ]
    [ , [ @memory_optimized = ] memory_optimized ]
[ ; ]

Argumentos

[ @publication = ] N'publication'

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

[ @article = ] N'article'

Artículo al que se suscribe la publicación. @article es sysname, con un valor predeterminado de all. Si alles , se agrega una suscripción a todos los artículos de esa publicación. Solo se admiten valores de all o NULL para publicadores de Oracle.

[ @subscriber = ] N'subscriber'

Nombre del suscriptor. @subscriber es sysname, con un valor predeterminado de NULL.

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.

[ @destination_db = ] N'destination_db'

Nombre de la base de datos de destino en la que se van a colocar los datos replicados. @destination_db es sysname, con un valor predeterminado de NULL. Cuando NULL, @destination_db se establece en el nombre de la base de datos de publicación. En el caso de los publicadores de Oracle, se debe especificar @destination_db . Para un suscriptor que no es de SQL Server, especifique un valor de (destino predeterminado) para @destination_db.

[ @sync_type = ] N'sync_type'

Tipo de sincronización de suscripciones. @sync_type es nvarchar(255) y puede ser uno de los siguientes valores:

Valor Description
none1 El suscriptor tiene ya el esquema y los datos iniciales de las tablas publicadas.
automatic (valor predeterminado) El esquema y los datos iniciales de las tablas publicadas se transfieren primero al suscriptor.
replication support only2 Proporciona la generación automática en el suscriptor de los desencadenadores y procedimientos almacenados personalizados de artículos que admiten las suscripciones de actualización, si es apropiado. Supone que el suscriptor tiene ya el esquema y los datos iniciales de las tablas publicadas. Al configurar una topología de replicación transaccional punto a punto, asegúrese de que los datos de todos los nodos de la topología son idénticos. Para obtener más información, consulte Replicación transaccional punto a punto.
initialize with backup2 El esquema y los datos iniciales de las tablas publicadas se obtienen de una copia de seguridad de la base de datos de publicaciones. Se da por supuesto que el suscriptor tiene acceso a una copia de seguridad de la base de datos de publicaciones. La ubicación del tipo de copia de seguridad y medios de la copia de seguridad se especifica mediante @backupdevicename y @backupdevicetype. Cuando se utiliza esta opción, la topología de replicación transaccional punto a punto no debe detenerse durante la configuración.
initialize from lsn Se usa al agregar un nodo a una topología de replicación transaccional punto a punto. Se usa con @subscriptionlsn para asegurarse de que todas las transacciones pertinentes se repliquen en el nuevo nodo. Supone que el suscriptor tiene ya el esquema y los datos iniciales de las tablas publicadas. Para obtener más información, consulte Replicación transaccional punto a punto.

1 Esta opción ha quedado en desuso. En su lugar, utilice replication support only.

2 No se admite para suscripciones a publicaciones que no son de SQL Server.

Nota:

Las tablas y los datos del sistema se transfieren siempre.

[ @status = ] N'status'

Estado de la suscripción. @status es sysname, con un valor predeterminado de NULL. Cuando este parámetro no se establece explícitamente, la replicación la establece automáticamente en uno de estos valores.

Valor Descripción
active La suscripción está inicializada y lista para aceptar cambios. Esta opción se establece cuando el valor de @sync_type no es ninguno, inicializa con copia de seguridad o solo admite la replicación.
subscribed La suscripción debe inicializarse. Esta opción se establece cuando el valor de @sync_type es automático.

[ @subscription_type = ] N'subscription_type'

Tipo de suscripción. @subscription_type es nvarchar(4), con un valor predeterminado de push. Puede ser push o pull. Los Agente de distribución de suscripciones de inserción residen en el distribuidor y los Agente de distribución de las suscripciones de extracción residen en el suscriptor. @subscription_type puede ser pull para crear una suscripción de extracción con nombre conocida para el publicador. Para obtener más información, vea Suscribirse a publicaciones.

Nota:

Las suscripciones anónimas no necesitan usar este procedimiento almacenado.

[ @update_mode = ] N'update_mode'

El tipo de actualización. @update_mode es nvarchar(30) y puede ser uno de estos valores.

Valor Descripción
read only (valor predeterminado) La suscripción es de solo lectura. Los cambios en el suscriptor no se envían al publicador.
sync tran Habilita la compatibilidad con las suscripciones de actualización inmediata. No es compatible con publicadores de Oracle.
queued tran Permite la actualización en cola de la suscripción. Las modificaciones de los datos se realizan en el suscriptor, se almacenan en una cola y después se propagan al publicador. No es compatible con publicadores de Oracle.
failover Permite la actualización inmediata de las suscripciones con la actualización en cola como conmutación por error. Las modificaciones de los datos se pueden realizar en el suscriptor y propagarse inmediatamente al publicador. Si el publicador y el suscriptor no están conectados, el modo de actualización se puede cambiar para que las modificaciones de datos realizadas en el suscriptor se almacenen en una cola hasta que se vuelva a conectar el suscriptor y el publicador. No es compatible con publicadores de Oracle.
queued failover Habilita la suscripción como una suscripción de actualización en cola con la capacidad de cambiar al modo de actualización inmediata. Las modificaciones de los datos se pueden realizar en el suscriptor y almacenarse en una cola hasta que se establezca una conexión entre el suscriptor y el publicador. Cuando se establece una conexión continua, el modo de actualización puede cambiar a actualización inmediata. No es compatible con publicadores de Oracle.

Los valores sync tran y queued tran no se permiten si la publicación a la que se suscribe permite DTS.

[ @loopback_detection = ] N'loopback_detection'

Especifica si el agente de distribución envía transacciones originadas en el suscriptor al mismo suscriptor. @loopback_detection es nvarchar(5) y puede ser uno de estos valores.

Valor Descripción
true Agente de distribución no envía transacciones originadas en el suscriptor al suscriptor. Se utilizan con replicación transaccional bidireccional. Para más información, consulte Bidirectional Transactional Replication.
false El Agente de distribución envía las transacciones originadas en el suscriptor al mismo suscriptor.
NULL (valor predeterminado) Se establece automáticamente en true para un suscriptor de SQL Server y false para un suscriptor que no es de SQL Server.

[ @frequency_type = ] frequency_type

Frecuencia con la que se programa la tarea de distribución. @frequency_type es int y puede ser uno de estos 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

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

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

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

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

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

[ @frequency_subday = ] frequency_subday

Frecuencia, en minutos, para volver a programar durante el período definido. @frequency_subday es int y puede ser uno de estos valores.

Valor Descripción
1 Una vez
2 Second
4 Minute
8 Hora
NULL

[ @frequency_subday_interval = ] frequency_subday_interval

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

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

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

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

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

[ @optional_command_line = ] N'optional_command_line'

Símbolo del sistema opcional que se va a ejecutar. @optional_command_line es nvarchar(4000), con un valor predeterminado de NULL.

[ @reserved = ] N'reserved'

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

[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'

Si la suscripción se puede sincronizar a través del Administrador de sincronización de Windows. @enabled_for_syncmgr es nvarchar(5), con un valor predeterminado de NULL, que es el mismo que false. Si falsees , la suscripción no se registra con el Administrador de sincronización de Windows. Si truees , la suscripción se registra con el Administrador de sincronización de Windows y se puede sincronizar sin iniciar SQL Server Management Studio. No es compatible con publicadores de Oracle.

[ @offloadagent = ] offloadagent

Especifica que el agente puede activarse de manera remota. @offloadagent es bit, con un valor predeterminado de 0.

Nota:

Este parámetro ha quedado desusado y solamente se mantiene por compatibilidad con versiones anteriores de scripts.

[ @offloadserver = ] N'offloadserver'

Especifica el nombre de red del servidor que se utilizará en la activación remota. @offloadserver es sysname, con un valor predeterminado de NULL.

[ @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 un paquete de DTSPub_Package, el parámetro sería @dts_package_name = N'DTSPub_Package'. Este parámetro está disponible para suscripciones de inserción. Para agregar información del paquete DTS a una suscripción de extracción, use sp_addpullsubscription_agent.

[ @dts_package_password = ] N'dts_package_password'

Especifica la contraseña del paquete, si hay una. @dts_package_password es sysname, con un valor predeterminado de NULL.

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 NULL, que es el mismo que distributor. La ubicación del paquete puede ser distributor o subscriber.

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

Especifica un publicador que no es de SQL Server. @publisher es sysname, con un valor predeterminado de NULL.

Nota:

@publisher no se debe especificar para un publicador de SQL Server.

[ @backupdevicetype = ] N'backupdevicetype'

Especifica el tipo de dispositivo de copia de seguridad utilizado al inicializar un suscriptor a partir una copia de seguridad. @backupdevicetype es nvarchar(20) y puede ser uno de estos valores:

Valor Descripción
logical (valor predeterminado) El dispositivo de copia de seguridad es un dispositivo lógico.
disk El dispositivo de copia de seguridad es una unidad de disco
tape El dispositivo de copia de seguridad es una unidad de cinta.

@backupdevicetype solo se usa cuando @sync_method se establece en initialize_with_backup.

[ @backupdevicename = ] N'backupdevicename'

Especifica el nombre del dispositivo utilizado al inicializar un suscriptor a partir de una copia de seguridad. @backupdevicename es nvarchar(1000), con un valor predeterminado de NULL.

[ @mediapassword = ] N'mediapassword'

Especifica una contraseña para el conjunto de medios si esta se estableció al dar formato a los medios. @mediapassword es sysname, con un valor predeterminado de NULL.

Nota:

Esta característica se quitará en una versión futura de SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

[ @password = ] N'password'

Especifica una contraseña para la copia de seguridad si esta se estableció al crear la copia de seguridad. @password es sysname, con un valor predeterminado de NULL.

[ @fileidhint = ] fileidhint

Identifica un valor ordinal del conjunto de copia de seguridad que se va a restaurar. @fileidhint es int, con un valor predeterminado de NULL.

[ @unload = ] descargar

Especifica si un dispositivo de copia de seguridad en cinta se debe descargar una vez completada la inicialización a partir de la copia de seguridad. @unload es bit, con un valor predeterminado de 1, que especifica que la cinta debe descargarse. @unload solo se usa cuando @backupdevicetype es tape.

[ @subscriptionlsn = ] subscriptionlsn

Especifica el número de flujo de registro (LSN) en el que una suscripción debería empezar a entregar cambios a un nodo en una topología de replicación transaccional punto a punto. @subscriptionlsn es binary(10), con un valor predeterminado de NULL. Se usa con un @sync_type valor de para asegurarse de initialize from lsn que todas las transacciones pertinentes se replican en un nuevo nodo. Para obtener más información, consulte Replicación transaccional punto a punto.

[ @subscriptionstreams = ] subscriptionstreams

Número de conexiones permitidas por Agente de distribución para aplicar lotes de cambios en paralelo a un suscriptor, a la vez que se mantienen muchas de las características transaccionales presentes al usar un único subproceso. @subscriptionstreams es tinyint, con un valor predeterminado de NULL. Se admite un intervalo de valores de 1 a 64 . Este parámetro no se admite para suscriptores que no son de SQL Server, publicadores de Oracle ni suscripciones punto a punto. Cada vez que se usa @subscriptionstreams , se agregan filas adicionales en la msreplication_subscriptions tabla (una fila por secuencia) con un agent_id valor establecido NULLen .

Nota:

Las secuencias de suscripción no funcionan para los artículos configurados para entregar Transact-SQL. Para usar flujos de suscripción, configure artículos para entregar llamadas a procedimientos almacenados en su lugar.

[ @subscriber_type = ] subscriber_type

Tipo de suscriptor. @subscriber_type es tinyint y puede ser uno de estos valores.

Valor Descripción
0 (valor predeterminado) Suscriptor de SQL Server
1 Servidor del origen de datos ODBC
2 Base de datos de Microsoft Jet
3 Proveedor OLE DB

[ @memory_optimized = ] memory_optimized

Indica que la suscripción admite tablas optimizadas para memoria. @memory_optimized es bit, con un valor predeterminado de 0 (false). 1 (true) significa que la suscripción admite tablas optimizadas para memoria.

Valores de código de retorno

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

Comentarios

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

Cuando sp_addsubscription un miembro del rol fijo de servidor sysadmin ejecuta para crear una suscripción de inserción, el trabajo de Agente de distribución se crea implícitamente y se ejecuta en la cuenta de servicio de Agente SQL Server. Se recomienda ejecutar sp_addpushsubscription_agent y especificar las credenciales de una cuenta de Windows específica del agente diferente para @job_login y @job_password. Para más información, consulte Modelo de seguridad del agente de replicación.

sp_addsubscription impide que los suscriptores ODBC y OLE DB accedan a publicaciones que:

  • Se crearon con el @sync_method nativo en la llamada a sp_addpublication.

  • Contiene artículos que se agregaron a la publicación con el procedimiento almacenado sp_addarticle que tenía un valor de parámetro @pre_creation_cmd de 3 (truncar).

  • Intente establecer @update_mode en sync tran.

  • Tengan un artículo configurado para utilizar instrucciones con parámetros.

Además, si una publicación tiene la opción @allow_queued_tran establecida en true (lo que permite poner en cola los cambios en el suscriptor hasta que se puedan aplicar en el publicador), la columna timestamp de un artículo se genera como una marca de tiempo y los cambios en esa columna se envían al suscriptor. El suscriptor genera y actualiza el valor de la columna timestamp. En el caso de un suscriptor ODBC o OLE DB, sp_addsubscription se produce un error si se intenta suscribir a una publicación que tiene @allow_queued_tran establecido en true y artículos con columnas de marca de tiempo en ella.

Si una suscripción no usa un paquete DTS, no se puede suscribir a una publicación establecida en @allow_transformable_subscriptions. Si la tabla de la publicación debe replicarse en una suscripción DTS y una suscripción no DTS, deben crearse dos publicaciones independientes: una para cada tipo de suscripción.

Al seleccionar las opciones replication support onlyde sync_type , initialize with backupo initialize from lsn, el agente de registro del log debe ejecutarse después de ejecutar sp_addsubscription, de modo que los scripts de configuración se escriban en la base de datos de distribución. El agente de registro del LOG se debe ejecutar con una cuenta que sea miembro del rol fijo de servidor sysadmin . Cuando la opción @sync_type está establecida Automaticen , no se requieren acciones especiales del agente de registro del log.

Permisos

Solo los miembros del rol fijo de servidor sysadmin o db_owner rol fijo de base de datos pueden ejecutar sp_addsubscription. Para las suscripciones de extracción, los usuarios con inicios de sesión en la lista de acceso a la publicación pueden ejecutar sp_addsubscription.

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