Cómo crear una suscripción actualizable en una publicación transaccional (programación de la replicación con Transact-SQL)

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.

La replicación transaccional permite que los cambios realizados en un suscriptor puedan volver a propagarse al publicador utilizando suscripciones de actualización inmediatas o en cola. Puede crear las suscripciones de actualización mediante programación usando procedimientos almacenados de replicación.

Para crear una suscripción de extracción de actualización inmediata

  1. En el publicador, compruebe que la publicación admita suscripciones de actualización inmediata mediante la ejecución de sp_helppublication.

  2. En el publicador, compruebe que la publicación admita suscripciones de extracción mediante la ejecución de sp_helppublication.

    • Si el valor de allow_pull en el conjunto de resultados es 1, la publicación admite las suscripciones de extracción.

    • Si el valor de allow_pull es 0, ejecute sp_changepublication y especifique allow_pull para @property y true para @value.

  3. En el suscriptor, ejecute sp_addpullsubscription. Especifique @publisher y @publication y uno de los valores siguientes para @ update_mode:

    • synctran - habilita la suscripción de actualización inmediata.

    • failover - permite la suscripción de actualización inmediata con la actualización en cola como opción de conmutación por error.

      Nota

      failover requiere que la publicación también esté habilitada para las suscripciones de actualización en cola.

  4. En el suscriptor, ejecute sp_addpullsubscription_agent. Especifique lo siguiente:

    • Los parámetros @publisher, @publisher_db y @publication.

    • Las credenciales de Microsoft Windows con las que se ejecuta el Agente de distribución en el suscriptor para @job_login y @job_password.

      Nota

      Las conexiones que se realicen con la autenticación integrada de Windows siempre usan las credenciales de Windows especificadas por @job_login y @job_password. El Agente de distribución siempre realiza la conexión local con el suscriptor mediante la autenticación integrada de Windows. De forma predeterminada, el agente se conecta al distribuidor usando la autenticación integrada de Windows.

    • (Opcional) El valor 0 para @distributor_security_mode y la información de inicio de sesión de Microsoft SQL Server para @distributor_login y @distributor_password, si necesita utilizar la autenticación de SQL Server al conectarse al distribuidor.

    • Una programación para el Agente de distribución para la suscripción. Para obtener más información, vea Cómo especificar programaciones de sincronización (programación de la replicación con Transact-SQL).

  5. En la base de datos de suscripciones del suscriptor, ejecute sp_link_publication. Especifique @publisher, @publication, el nombre de la base de datos de publicación para @ publisher_db y uno de los valores siguientes para @ security_mode:

    • 0 - se usa la autenticación de SQL Server al realizar las actualizaciones en el publicador. Esta opción le exige que especifique un inicio de sesión válido en el publicador para @login y @password.

    • 1 - utiliza el contexto de seguridad del usuario que realiza modificaciones en el suscriptor para conectarse al publicador. vea sp_link_publication para conocer las restricciones relacionadas con este modo de seguridad.

    • 2 - utiliza un inicio de sesión de servidor vinculado definido por el usuario ya existente y creado con sp_addlinkedserver.

  6. En el editor, ejecute sp_addsubscription especificando @publication, @subscriber, @destination_db, el valor pull para @subscription_type y el mismo valor que especificó en el paso 3 para @update_mode.

    Esto registra la suscripción de extracción en el publicador.

Para crear una suscripción de inserción de actualización inmediata

  1. En el publicador, compruebe que la publicación admita suscripciones de actualización inmediata mediante la ejecución de sp_helppublication.

  2. En el publicador, compruebe que la publicación admita suscripciones de inserción mediante la ejecución de sp_helppublication.

    • Si el valor de allow_push en el conjunto de resultados es 1, la publicación admite las suscripciones de inserción.

    • Si el valor de allow_push es 0, ejecute sp_changepublication y especifique allow_push para @property y true para @value.

  3. En el publicador, ejecute sp_addsubscription. Especifique @publication, @subscriber, @destination_db y uno de los valores siguientes para @ update_mode:

    • synctran - habilita la actualización inmediata.

    • failover - permite la actualización inmediata con la actualización en cola como opción de conmutación por error.

      Nota

      failover requiere que la publicación también esté habilitada para las suscripciones de actualización en cola.

  4. En el publicador, ejecute sp_addpushsubscription_agent. Especifique los parámetros siguientes:

    • Especifique @subscriber, @subscriber_db y @publication.

    • Las credenciales de Windows con las que se ejecuta el Agente de distribución en el distribuidor para @job_login y @job_password.

      Nota

      Las conexiones que se realicen con la autenticación integrada de Windows siempre usan las credenciales de Windows especificadas por @job_login y @job_password. El Agente de distribución siempre realiza la conexión local con el distribuidor mediante la autenticación integrada de Windows. De forma predeterminada, el agente se conectará con el suscriptor mediante la autenticación integrada de Windows.

    • (Opcional) El valor 0 para @subscriber_security_mode y la información de inicio de sesión de SQL Server para @subscriber_login y @subscriber_password, si necesita utilizar autenticación de SQL Server al conectarse al suscriptor.

    • Una programación para el Agente de distribución de esta suscripción. Para obtener más información, vea Cómo especificar programaciones de sincronización (programación de la replicación con Transact-SQL).

  5. En la base de datos de suscripciones del suscriptor, ejecute sp_link_publication. Especifique @publisher, @publication, el nombre de la base de datos de publicación para @publisher_db y uno de los valores siguientes para @security_mode:

    • 0 - se usa la autenticación de SQL Server al realizar las actualizaciones en el publicador. Esta opción le exige que especifique un inicio de sesión válido en el publicador para @login y @password.

    • 1 - utiliza el contexto de seguridad del usuario que realiza modificaciones en el suscriptor para conectarse al publicador. vea sp_link_publication para conocer las restricciones relacionadas con este modo de seguridad.

    • 2 - utiliza un inicio de sesión de servidor vinculado definido por el usuario ya existente y creado con sp_addlinkedserver.

Para crear una suscripción de extracción de la actualización en cola

  1. En el publicador, compruebe que la publicación admita suscripciones de actualización en cola mediante la ejecución de sp_helppublication.

  2. En el publicador, compruebe que la publicación admita suscripciones de extracción mediante la ejecución de sp_helppublication.

    • Si el valor de allow_pull en el conjunto de resultados es 1, la publicación admite las suscripciones de extracción.

    • Si el valor de allow_pull es 0, ejecute sp_changepublication y especifique allow_pull para @property y true para @value.

  3. En el suscriptor, ejecute sp_addpullsubscription. Especifique @publisher y @publication y uno de los valores siguientes para @ update_mode:

    • queued tran - permite la actualización en cola de la suscripción.

    • queued failover - habilita la actualización en cola con actualización inmediata como una opción de conmutación por error.

      Nota

      queued failover requiere que la publicación también esté habilitada para las suscripción de actualización inmediatas. Para conmutar a la actualización inmediata, debe utilizar sp_link_publication para definir las credenciales con las que se replican en el publicador los cambios realizados en el suscriptor.

  4. En el suscriptor, ejecute sp_addpullsubscription_agent. Especifique los parámetros siguientes:

    • @publisher, @publisher_db y @publication.

    • Las credenciales de Windows con las que se ejecuta el Agente de distribución en el suscriptor para @job_login y @job_password.

      Nota

      Las conexiones que se realicen con la autenticación integrada de Windows siempre usan las credenciales de Windows especificadas por @job_login y @job_password. El Agente de distribución siempre realiza la conexión local con el suscriptor mediante la autenticación integrada de Windows. De forma predeterminada, el agente se conecta al distribuidor usando la autenticación integrada de Windows.

    • (Opcional) El valor 0 para @distributor_security_mode y la información de inicio de sesión de SQL Server para @distributor_login y @distributor_password, si necesita utilizar la autenticación de SQL Server al conectarse al distribuidor.

    • Una programación para el Agente de distribución para la suscripción. Para obtener más información, vea Cómo especificar programaciones de sincronización (programación de la replicación con Transact-SQL).

  5. En el publicador, ejecute sp_addsubscriber (Transact-SQL) para registrar el suscriptor en el publicador.

    En el publicador, ejecute sp_addsubscription especificando @publication, @subscriber, @destination_db, el valor pull para @subscription_type y el mismo valor que especificó en el paso 3 para @update_mode.

    Esto registra la suscripción de extracción en el publicador.

Para crear una suscripción de inserción de la actualización en cola

  1. En el publicador, compruebe que la publicación admita suscripciones de actualización en cola mediante la ejecución de sp_helppublication.

  2. En el publicador, compruebe que la publicación admita suscripciones de inserción mediante la ejecución de sp_helppublication.

    • Si el valor de allow_push en el conjunto de resultados es 1, la publicación admite las suscripciones de inserción.

    • Si el valor de allow_push es 0, ejecute sp_changepublication y especifique allow_push para @property y true para @value.

  3. En el publicador, ejecute sp_addsubscription. Especifique @publication, @subscriber, @destination_db y uno de los valores siguientes para @ update_mode:

    • queued tran - permite la actualización en cola de la suscripción.

    • queued failover - habilita la actualización en cola con actualización inmediata como una opción de conmutación por error.

      Nota

      La opción queued failover requiere que la publicación también esté habilitada para las suscripciones de actualización inmediatas. Para conmutar a la actualización inmediata, debe utilizar sp_link_publication para definir las credenciales bajo las que se replican en el publicador los cambios realizados en el suscriptor.

  4. En el publicador, ejecute sp_addpushsubscription_agent. Especifique los parámetros siguientes:

    • Especifique @subscriber, @subscriber_db y @publication.

    • Las credenciales de Windows con las que se ejecuta el Agente de distribución en el distribuidor para @job_login y @job_password.

      Nota

      Las conexiones que se realicen con la autenticación integrada de Windows siempre usan las credenciales de Windows especificadas por @job_login y @job_password. El Agente de distribución siempre realiza la conexión local con el distribuidor mediante la autenticación integrada de Windows. De forma predeterminada, el agente se conecta al suscriptor usando la autenticación integrada de Windows.

    • (Opcional) El valor 0 para @subscriber_security_mode y la información de inicio de sesión de SQL Server para @subscriber_login y @subscriber_password, si necesita utilizar autenticación de SQL Server al conectarse al suscriptor.

    • Una programación para el Agente de distribución para la suscripción. Para obtener más información, vea Cómo especificar programaciones de sincronización (programación de la replicación con Transact-SQL).

Ejemplo

Este ejemplo crea una suscripción de extracción de actualización inmediata a una publicación que admite suscripciones de actualización inmediatas. Los valores de inicio de sesión y contraseña se proporcionan en tiempo de ejecución mediante variables de scripts de sqlcmd.

-- 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 @publicationDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS nvarchar(512);
SET @publication = N'AdvWorksProductTran';
SET @publicationDB = N'AdventureWorks2008R2';
SET @publisher = $(PubServer);
SET @login = $(Login);
SET @password = $(Password);

-- At the subscription database, create a pull subscription to a transactional 
-- publication using immediate updating with queued updating as a failover.
EXEC sp_addpullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB, 
    @update_mode = N'failover', 
    @subscription_type = N'pull';

-- Add an agent job to synchronize the pull subscription, 
-- which uses Windows Authentication when connecting to the Distributor.
EXEC sp_addpullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication,
    @job_login = @login,
    @job_password = @password; 

-- Add a Windows Authentication-based linked server that enables the 
-- Subscriber-side triggers to make updates at the Publisher. 
EXEC sp_link_publication 
    @publisher = @publisher, 
    @publication = @publication,
    @publisher_db = @publicationDB, 
    @security_mode = 0,
    @login = @login,
    @password = @password;
GO

USE AdventureWorks2008R2;
GO

-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @subscriber AS sysname;
SET @publication = N'AdvWorksProductTran'; 
SET @subscriptionDB = N'AdventureWorks2008R2Replica'; 
SET @subscriber = $(SubServer);

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks2008R2]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'pull', 
    @update_mode = N'failover';
GO