sp_addsubscription (Transact-SQL)
Se aplica a: SQL Server Azure 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 all
es , 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>
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.
[ @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 | Descripción |
---|---|
none 1 |
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 only 2 |
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 backup 2 |
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 |
First |
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 false
es , la suscripción no se registra con el Administrador de sincronización de Windows. Si true
es , 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. |
url |
El dispositivo de copia de seguridad es una dirección URL |
@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 NULL
en .
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 only
de sync_type , initialize with backup
o 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 Automatic
en , 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
Contenido relacionado
- Crear una suscripción de inserción
- Crear una suscripción para un suscriptor que no sea de SQL Server
- Subscribe to Publications
- sp_addpushsubscription_agent (Transact-SQL)
- sp_changesubstatus (Transact-SQL)
- sp_dropsubscription (Transact-SQL)
- sp_helpsubscription (Transact-SQL)
- Procedimientos almacenados del sistema (Transact-SQL)