sp_addsubscription (Transact-SQL)

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

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

  • [ @publication=\] 'publication'
    Es el nombre de la publicación. publication es de tipo sysname y no tiene ningún valor predeterminado.

  • [ @article=\] 'article'
    Es el artículo al que está suscrita la publicación. article es de tipo sysname y su valor predeterminado es all. Si el valor es all, se agrega una suscripción a todos los artículos de esa publicación. Los publicadores de Oracle solo admiten los valores all o NULL.

  • [ @subscriber=\] 'subscriber'
    Es el nombre del suscriptor. subscriber es de tipo sysname y su valor predeterminado es NULL.

  • [ @destination\_db=\] 'destination_db'
    Es el nombre de la base de datos de destino en la que se colocan los datos replicados. destination_db es de tipo sysname y su valor predeterminado es NULL. Cuando el valor es NULL, destination_db se establece en el nombre de la base de datos de publicaciones. En los publicadores de Oracle, debe especificarse destination_db. Especifique un valor de (destino predeterminado) para destination_db en un suscriptor que no sea de SQL Server.

  • [ @sync\_type=\] 'sync_type'
    Es el tipo de sincronización de suscripción. sync_type es de tipo nvarchar(255) y puede tener uno de los valores siguientes:

    Valor

    Descripción

    none

    El suscriptor tiene ya el esquema y los datos iniciales de las tablas publicadas.

    [!NOTA]

    Esta opción ha quedado desusada. Use replication support only en su lugar.

    automatic (valor predeterminado)

    El esquema y los datos iniciales de las tablas publicadas se transfieren primero al suscriptor.

    replication support only

    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, vea Replicación transaccional punto a punto.

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

    initialize with backup

    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 de la copia de seguridad y el tipo de medio para la copia de seguridad vienen especificados por 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.

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

    initialize from lsn

    Se utiliza cuando se agrega un nodo a una topología de replicación transaccional punto a punto. Se usa con @subscriptionlsn para asegurarse de que todas las transacciones relevantes se replican 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, vea Replicación transaccional punto a punto.

    [!NOTA]

    Las tablas y los datos del sistema se transfieren siempre.

  • [ @status=\] 'status'
    Es el estado de la suscripción. status es de tipo sysname y su valor predeterminado es NULL. Si este parámetro no se establece de forma explícita, la replicación lo 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 es none, initialize with backup o replication support only..

    subscribed

    La suscripción debe inicializarse. Esta opción se establece cuando el valor de sync_type es automatic.

  • [ @subscription\_type=\] 'subscription_type'
    Es el tipo de suscripción. subscription_type es de tipo nvarchar(4) y su valor predeterminado es push. Puede ser de inserción o de extracción. Los Agentes de distribución de suscripciones de inserción (push) residen en el distribuidor; los Agentes de distribución de suscripciones de extracción (pull) residen en el suscriptor. subscription_type puede tener el valor 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 utilizar este procedimiento almacenado.

  • [ @update\_mode=\] 'update_mode'
    Es el tipo de actualización.update_mode es nvarchar(30) y puede ser uno de estos valores.

    Valor

    Descripción

    read only (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 se admite para los 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 se admite para los 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 los datos realizadas en el suscriptor se almacenen en una cola hasta que el suscriptor y el publicador vuelvan a conectarse. No se admite para los 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 se admite para los publicadores de Oracle.

    Observe que los valores sync tran y queued tran no se permiten si la publicación a la que se está suscribiendo permite DTS.

  • [ @loopback\_detection=\] 'loopback_detection'
    Especifica si el agente de distribución envía transacciones originadas en el suscriptor al mismo suscriptor. loopback_detection es de tipo nvarchar(5) y puede tener uno de estos valores.

    Valor

    Descripción

    true

    El Agente de distribución no envía las transacciones originadas en el suscriptor al mismo suscriptor. Se utiliza para configurar la replicación transaccional bidireccional. Para obtener más información, vea Replicación transaccional bidireccional.

    false

    El Agente de distribución envía las transacciones originadas en el suscriptor al mismo suscriptor.

    NULL (predeterminado)

    Se establece automáticamente en true para un suscriptor de SQL Server y en false para un suscriptor que no sea de SQL Server.

  • [ @frequency\_type=\] frequency_type
    Es la frecuencia con que se programa la tarea de distribución. frequency_type es de tipo int y puede tener uno de estos valores.

    Valor

    Descripción

    1

    Una vez

    2

    A petición

    4

    Diariamente

    8

    Semanalmente

    16

    Mensualmente

    32

    Mensualmente relativa

    64 (predeterminado)

    Iniciar automáticamente

    128

    Periódica

  • [ @frequency\_interval=\] frequency_interval
    Es el valor que se va a aplicar a la frecuencia establecida por frequency_type. frequency_interval es de tipo int y su valor predeterminado es NULL.

  • [ @frequency\_relative\_interval=\] frequency_relative_interval
    Es la fecha del Agente de distribución. Este parámetro se utiliza cuando frequency_type se establece en 32 (mensualmente relativa). frequency_relative_interval es de tipo int y puede tener uno de estos valores.

    Valor

    Descripción

    1

    Primero

    2

    Segundo

    4

    Tercero

    8

    Cuarto

    16

    Último

    NULL (valor predeterminado)

     

  • [ @frequency\_recurrence\_factor=\] frequency_recurrence_factor
    Es el factor de repetición que se utiliza en frequency_type. frequency_recurrence_factor es de tipo int y su valor predeterminado es NULL.

  • [ @frequency\_subday=\] frequency_subday
    Indica la frecuencia, en minutos, con que se reprograma durante el período definido. frequency_subday es de tipo int y puede tener uno de estos valores.

    Valor

    Descripción

    1

    Una vez

    2

    Segundo

    4

    Minute

    8

    Hour

    NULL

     

  • [ @frequency\_subday\_interval=\] frequency_subday_interval
    Es el intervalo de frequency_subday. frequency_subday_interval es de tipo int y su valor predeterminado es NULL.

  • [ @active\_start\_time\_of\_day=\] active_start_time_of_day
    Es la hora del día en que el agente de distribución se programa por primera vez, con el formato HHMMSS. active_start_time_of_day es de tipo int y su valor predeterminado es NULL.

  • [ @active\_end\_time\_of\_day=\] active_end_time_of_day
    Es la hora del día en que el agente de distribución deja de estar programado, con el formato HHMMSS. active_end_time_of_day es de tipo int y su valor predeterminado es NULL.

  • [ @active\_start\_date=\] active_start_date
    Es la fecha en que el agente de distribución se programa por primera vez, con el formato AAAAMMDD. active_start_date es de tipo int y su valor predeterminado es NULL.

  • [ @active\_end\_date=\] active_end_date
    Es la fecha en la que el agente de distribución deja de estar programado, con el formato AAAAMMDD. active_end_date es de tipo int y su valor predeterminado es NULL.

  • [ @optional\_command\_line=\] 'optional_command_line'
    Es el símbolo del sistema opcional que se va a ejecutar. optional_command_line es de tipo nvarchar(4000) y su valor predeterminado es NULL.

  • [ @reserved=\] 'reserved'
    Solamente se identifica con fines informativos. No compatible. La compatibilidad con versiones posteriores no está garantizada.

  • [ @enabled\_for\_syncmgr=\] 'enabled_for_syncmgr'
    Indica si la suscripción se puede sincronizar mediante el Administrador de sincronización de Microsoft Windows. enabled_for_syncmgr es nvarchar(5) y su valor predeterminado es FALSE. Si el valor es false, la suscripción no se registra con el Administrador de sincronización de Windows. Si el valor es true, la suscripción se registra con el Administrador de sincronización de Windows y se puede sincronizar sin iniciar SQL Server Management Studio. No se admite para los publicadores de Oracle.

  • [ @offloadagent= ] 'remote_agent_activation'
    Especifica que el agente puede activarse de manera remota. remote_agent_activation es de tipo bit y su valor predeterminado es 0.

    [!NOTA]

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

  • [ @offloadserver= ] 'remote_agent_server_name'
    Especifica el nombre de red del servidor que se utilizará en la activación remota. remote_agent_server_namees de tipo sysname y su valor predeterminado es NULL.

  • [ @dts\_package\_name= ] 'dts_package_name'
    Especifica el nombre del paquete de Servicios de transformación de datos (DTS). dts_package_name es de tipo sysname y su valor predeterminado es NULL. Por ejemplo, para especificar un paquete 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 de un paquete DTS a una suscripción de extracción, utilice sp_addpullsubscription_agent.

  • [ @dts\_package\_password= ] 'dts_package_password'
    Especifica la contraseña del paquete, si procede. dts_package_password es de tipo sysname y su valor predeterminado es NULL.

    [!NOTA]

    Si se especifica el parámetro dts_package_name, es necesario especificar una contraseña.

  • [ @dts\_package\_location= ] 'dts_package_location'
    Especifica la ubicación del paquete. dts_package_location es de tipo nvarchar(12) y su valor predeterminado es DISTRIBUTOR. La ubicación del paquete puede ser distributor o subscriber.

  • [ @distribution\_job\_name= ] 'distribution_job_name'
    Solamente se identifica con fines informativos. No compatible. La compatibilidad con versiones posteriores no está garantizada.

  • [ @publisher= ] 'publisher'
    Especifica un publicador que no es de Microsoft SQL Server. publisher es de tipo sysname y su valor predeterminado es NULL.

    [!NOTA]

    No se debe especificar publisher con un publicador de SQL Server.

  • [ @backupdevicetype= ] 'backupdevicetype'
    Especifica el tipo de dispositivo de copia de seguridad utilizado al inicializar un suscriptor a partir una copia de seguridad. backupdevicetype es de tipo nvarchar(20) y puede tener 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 solamente se utiliza cuando sync_methodestá establecido en initialize_with_backup.

  • [ @backupdevicename= ] 'backupdevicename'
    Especifica el nombre del dispositivo utilizado al inicializar un suscriptor a partir de una copia de seguridad. backupdevicename es de tipo nvarchar(1000) y su valor predeterminado es NULL.

  • [ @mediapassword= ] 'mediapassword'
    Especifica una contraseña para el conjunto de medios si esta se estableció al dar formato a los medios. mediapassword es de tipo sysname y su valor predeterminado es NULL.

    [!NOTA]

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

  • [ @password= ] 'password'
    Especifica una contraseña para la copia de seguridad si esta se estableció al crear la copia de seguridad. passwordes de tipo sysname y su valor predeterminado es NULL.

  • [ @fileidhint= ] fileidhint
    Identifica un valor ordinal del conjunto de copia de seguridad que se va a restaurar. fileidhint es de tipo int y su valor predeterminado es NULL.

  • [ @unload= ] unload
    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 de tipo bit y su valor predeterminado es 1. 1 especifica que la cinta se debe descargar. unload se utiliza solamente 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. Se utiliza con un valor @sync\_type de initialize from lsn para asegurarse de que todas las transacciones pertinentes se replican en un nuevo nodo. Para obtener más información, vea Replicación transaccional punto a punto.

  • [ @subscriptionstreams= ] subscriptionstreams
    Es el número de conexiones permitidas por el agente de distribución para aplicar lotes de cambios en paralelo a un suscriptor, aunque manteniendo muchas de las características transaccionales presentes al utilizar un único subproceso. subscriptionstreams es de tipo tinyint y su valor predeterminado es NULL. Se admite un intervalo de valores de 1 a 64. Este parámetro no se admite para los suscriptores que no sean de SQL Server, los publicadores de Oracle ni las suscripciones punto a punto. Cada vez que se usan flujos de suscripción, se agregan filas adicionales en la tabla msreplication_subscriptions (una por cada flujo) con un agent_id establecido en NULL.

    [!NOTA]

    Los flujos de suscripción no funcionan en los artículos configurados para entregar Transact-SQL. Para usar flujos de suscripción, configure en su lugar los artículos para que entreguen llamadas de procedimiento almacenado.

  • [ @subscriber\_type=\] subscriber_type
    Es el tipo de suscriptor. subscriber_type es de tipo tinyint y puede tener uno de estos valores.

    Valor

    Descripción

    0 (predeterminado)

    Suscriptor de SQL Server

    1

    Servidor del origen de datos ODBC

    2

    Base de datos Microsoft Jet

    3

    proveedor OLE DB

Valores de código de retorno

0 (correcto) o 1 (error)

Comentarios

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

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

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

  • Hayan sido creadas con sync_method nativo en la llamada a sp_addpublication.

  • Contengan artículos que se hayan agregado a la publicación mediante un procedimiento almacenado sp_addarticle con un valor del 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 (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 automatizará como timestamp y los cambios de esa columna se enviarán al suscriptor. El suscriptor genera y actualiza el valor de la columna timestamp. Para un suscriptor ODBC u OLE DB, sp_addsubscription dará error si se intenta una suscripción a una publicación que tiene allow_queued_tran establecido en true y artículos con columnas timestamp.

Si una suscripción no utiliza un paquete DTS, no puede suscribirse a una publicación que esté 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, initialize with backup o initialize from lsnde sync_type, el agente de registro del LOG se debe ejecutar después de ejecutar sp_addsubscription, de modo que los scripts de instalació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 se establece en Automatic, no se requiere ninguna acción especial del agente de registro del LOG.

Permisos

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

Ejemplo

-- 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'AdventureWorks2012Replica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks2012]
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

Vea también

Referencia

sp_addpushsubscription_agent (Transact-SQL)

sp_changesubstatus (Transact-SQL)

sp_dropsubscription (Transact-SQL)

sp_helpsubscription (Transact-SQL)

Procedimientos almacenados del sistema (Transact-SQL)

Conceptos

Crear una suscripción de inserción

Crear una suscripción para un suscriptor que no sea de SQL Server

Suscribirse a publicaciones