Crear una suscripción actualizable en una publicación transaccional

Se aplica a:SQL Server

Nota:

Esta característica sigue siendo compatible con las versiones de SQL Server entre 2012 y 2016. 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.

La replicación transaccional permite que los cambios realizados en un Suscriptor se propaguen de vuelta al Publicador mediante suscripciones de actualización inmediata o en cola. Puede crear las suscripciones de actualización mediante programación usando procedimientos almacenados de replicación.

Configure las suscripciones actualizables en la página Suscripciones actualizables del Asistente para nueva suscripción. Esta página solo está disponible si ha habilitado una publicación transaccional para suscripciones actualizables. Para obtener más información sobre cómo habilitar las suscripciones actualizables, vea Habilitar suscripciones actualizables para publicaciones transaccionales.

Configuración de una suscripción actualizable desde el publicador

  1. Conéctese al publicador en Microsoft SQL Server Management Studio y, a continuación, expanda el nodo del servidor.

  2. Expanda la carpeta Replicación y, a continuación, expanda la carpeta Publicaciones locales .

  3. Haga clic con el botón derecho en una publicación transaccional habilitada para actualizar suscripciones y, a continuación, haga clic en Nuevas suscripciones.

  4. Siga las indicaciones del asistente para especificar opciones para la suscripción, por ejemplo dónde debe ejecutarse el Agente de distribución.

  5. En la página Suscripciones actualizables del Asistente para nuevas suscripciones, asegúrese de que Replicar está seleccionado.

  6. Selecciona una opción en la lista desplegable Commit at Publisher:

    • Para utilizar las suscripciones de actualización inmediata, seleccione Confirmar cambios simultáneamente. Si selecciona esta opción y la publicación permite suscripciones de actualización en cola (el valor predeterminado para suscripciones creadas con el Asistente para nueva publicación), la propiedad update_mode de la suscripción se establece en failover. Este modo le permite cambiar a la actualización en cola más adelante en caso necesario.

    • Para utilizar las suscripciones con actualización en cola, seleccione Poner en cola cambios y confirmar cuando sea posible. Si selecciona esta opción, y la publicación permite suscripciones de actualización inmediata (el valor predeterminado de las publicaciones creadas con el Asistente para nueva publicación), y el suscriptor ejecuta SQL Server 2005 o una versión posterior, la propiedad update_mode de la suscripción se establece en queued failover. Este modo le permite cambiar a la actualización inmediata más adelante en caso necesario.

    Para obtener más información sobre cómo cambiar los modos de actualización, consulte Cambiar entre modos de actualización para una suscripción transaccional actualizable.

  7. La página Inicio de sesión para suscripciones actualizables se muestra para las suscripciones que utilizan la actualización inmediata o tienen update_mode establecida en queued failover. En la página Inicio de sesión para suscripciones actualizables, especifique un servidor vinculado mediante el que se realicen las conexiones al publicador para las suscripciones de actualización inmediata. Las conexiones las utilizan los desencadenadores que se activan en el suscriptor y propagan los cambios al publicador. Seleccione una de las siguientes opciones:

    • Crear un servidor vinculado que se conecte mediante la autenticación de SQL Server. Seleccione esta opción si no ha definido un servidor remoto o un servidor vinculado entre el suscriptor y el publicador. La replicación crea un servidor vinculado automáticamente. La cuenta que especifique debe existir ya en el publicador.

    • Utilizar un servidor vinculado o un servidor remoto que ya está definido. Seleccione esta opción si ha definido un servidor remoto o un servidor vinculado entre el suscriptor y el publicador mediante sp_addserver (Transact-SQL), sp_addlinkedserver (Transact-SQL), SQL Server Management Studio u otro método.

    Para obtener información sobre los permisos requeridos por la cuenta del servidor vinculado, consulte las Suscripciones de Actualización en Cola de Proteger al Suscriptor.

  8. Finalice el asistente.

Configuración de una suscripción actualizable desde el suscriptor

  1. Conéctese al suscriptor en SQL Server Management Studio y expanda el nodo de servidor.

  2. Expanda la carpeta Replicación .

  3. Haga clic con el botón secundario en la carpeta Suscripciones locales y, a continuación, haga clic en Nuevas suscripciones.

  4. En la página Publicación del Asistente para nueva suscripción, selecciona Buscar publicador de SQL Server de la lista desplegable Publicador.

  5. Conéctese al publicador en el cuadro de diálogo Conectar al servidor .

  6. Seleccione una publicación transaccional habilitada para actualizar suscripciones en la página Publicación.

  7. Siga las indicaciones del asistente para especificar opciones para la suscripción, por ejemplo dónde debe ejecutarse el Agente de distribución.

  8. En la página Suscripciones actualizables del Asistente para nuevas suscripciones, asegúrese de que Replicar está seleccionado.

  9. Selecciona una opción de la lista desplegable Commit at Publisher:

    • Para utilizar las suscripciones de actualización inmediata, seleccione Confirmar cambios simultáneamente. Si selecciona esta opción y la publicación permite suscripciones de actualización en cola (el valor predeterminado para suscripciones creadas con el Asistente para nueva publicación), la propiedad update_mode de la suscripción se establece en failover. Este modo le permite cambiar a la actualización en cola más adelante en caso necesario.

    • Para utilizar las suscripciones con actualización en cola, seleccione Poner en cola cambios y confirmar cuando sea posible. Si selecciona esta opción y la publicación permite suscripciones de actualización inmediata (el valor predeterminado para las publicaciones creadas con el Asistente para nueva publicación), y el Suscriptor ejecuta SQL Server 2005 o una versión posterior, la propiedad de suscripción update_mode se establece en queued failover. Este modo le permite cambiar a la actualización inmediata más adelante en caso necesario.

    Para obtener más información sobre cómo cambiar los modos de actualización, consulte Cambiar entre modos de actualización para una suscripción transaccional actualizable.

  10. La página Inicio de sesión para suscripciones actualizables se muestra para las suscripciones que utilizan la actualización inmediata o tienen update_mode establecida en queued failover. En la página Inicio de sesión para suscripciones actualizables, especifique un servidor vinculado mediante el que se realicen las conexiones al publicador para las suscripciones de actualización inmediata. Las conexiones las utilizan los desencadenadores que se activan en el suscriptor y propagan los cambios al publicador. Seleccione una de las siguientes opciones:

    • Crear un servidor vinculado que se conecte mediante la autenticación de SQL Server. Seleccione esta opción si no ha definido un servidor remoto o un servidor vinculado entre el suscriptor y el publicador. La replicación crea un servidor vinculado automáticamente. La cuenta que especifique debe existir ya en el publicador.

    • Utilizar un servidor vinculado o un servidor remoto que ya está definido. Seleccione esta opción si ha definido un servidor remoto o un servidor vinculado entre el suscriptor y el publicador mediante sp_addserver (Transact-SQL), sp_addlinkedserver (Transact-SQL), SQL Server Management Studio u otro método.

    Para obtener información sobre los permisos requeridos por la cuenta del servidor vinculado, consulte las Suscripciones de Actualización en Cola de Proteger al Suscriptor.

  11. Finalice el asistente.

Cree una suscripción de tipo extracción con actualización inmediata

  1. En el Publicador, compruebe que la publicación admite suscripciones de actualización inmediata ejecutando sp_helppublication.

    • Si el valor de allow_sync_tran en el conjunto de resultados es 1, la publicación admite las suscripciones de actualización inmediata.
    • Si el valor de allow_sync_tran en el conjunto de resultados es 0, la publicación se debe volver a crear con suscripciones de actualización inmediata habilitadas.
  2. En el publicador, ejecute sp_helppublicationpara comprobar que la publicación admite las suscripciones de extracción.

    • 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_changepublicationy especifique allow_pull para @property y true para @value.
  3. En el suscriptor, ejecute sp_addpullsubscription. Especifique @publisher , @publicationy uno de los valores siguientes para @update_mode:

    • sync tran : habilita la suscripción de actualización inmediata.
    • failover - habilita la suscripción a actualizaciones inmediatas, con actualizaciones en cola como opción de respaldo.

    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_dby @publication .
    • Las credenciales de Microsoft Windows bajo 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) Un valor de 0 para @distributor_security_mode y la información de inicio de sesión de Microsoft SQL Server para @distributor_login y @distributor_password, en caso de que necesite usar Autenticación de SQL Server cuando se conecte al distribuidor.
    • La programación del trabajo del Agente de distribución para esta suscripción.
  5. En el Suscriptor, en la base de datos de suscripción, ejecute sp_link_publication. Especifique @publisher, @publication, el nombre de la base de datos de publicación para @publisher_dby uno de los valores siguientes para @security_mode:

    • 0 - Use la autenticación de SQL Server al realizar 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 - Use el contexto de seguridad del usuario que realiza los cambios en el Suscriptor al conectarse al Publicador. Consulte sp_link_publication para conocer las restricciones relacionadas con este modo de seguridad.
    • 2 - Use un inicio de sesión de servidor vinculado definido por el usuario ya creado mediante sp_addlinkedserver.
  6. En el publicador, ejecute sp_addsubscription y especifique @publication, @subscriber, @destination_db, un valor de extracción para @subscription_typey el mismo valor que especificó en el paso 3 para @update_mode. Esto registra la suscripción de tipo pull en el Publisher.

Cree una suscripción push con actualización inmediata

  1. En el Publicador, compruebe que la publicación admite suscripciones de actualización inmediata ejecutando sp_helppublication.

    • Si el valor de allow_sync_tran en el conjunto de resultados es 1, la publicación admite las suscripciones de actualización inmediata.
    • Si el valor de allow_sync_tran en el conjunto de resultados es 0, la publicación se debe volver a crear con suscripciones de actualización inmediata habilitadas.
  2. En el publicador, compruebe que la publicación admite suscripciones push ejecutando sp_helppublication.

    • Si el valor de allow_push en el conjunto de resultados es 1, la publicación admite suscripciones push.
    • Si el valor de allow_push es 0, ejecute sp_changepublicationy especifique allow_push para @property y true para @value.
  3. En el publicador, ejecute sp_addsubscription. Especifique @publication, @subscriber, @destination_dby uno de los valores siguientes para @update_mode:

    • sync tran - permite la actualización inmediata.
    • failover - habilita las actualizaciones inmediatas 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:

    • @subscriber, @subscriber_dby @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) Un valor de 0 para @subscriber_security_mode y la información de inicio de sesión de SQL Server para @subscriber_login y @subscriber_password, en caso de que necesite usar Autenticación de SQL Server cuando se conecte al suscriptor.
    • La programación del trabajo del Agente de distribución para esta suscripción.
  5. En el Suscriptor, en la base de datos de suscripción, ejecute sp_link_publication. Especifique @publisher, @publication, el nombre de la base de datos de publicación para @publisher_dby uno de los valores siguientes para @security_mode:

    • 0 - Use la autenticación de SQL Server al realizar 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 - Use el contexto de seguridad del usuario que realiza los cambios en el Suscriptor al conectarse al Publicador. Consulte sp_link_publication para conocer las restricciones relacionadas con este modo de seguridad.
    • 2 - Use un inicio de sesión de servidor vinculado definido por el usuario ya creado mediante sp_addlinkedserver.

Crear una suscripción de tipo extracción con actualización en cola

  1. En el publicador, ejecute sp_helppublicationpara comprobar que la publicación admite suscripciones de actualización en cola.

    • Si el valor de allow_queued_tran en el conjunto de resultados es 1, la publicación admite las suscripciones de actualización inmediata.
    • Si el valor de allow_queued_tran en el conjunto de resultados es 0, la publicación debe volver a crearse con las suscripciones de actualización en cola habilitadas.
  2. En el publicador, ejecute sp_helppublicationpara comprobar que la publicación admite las suscripciones de extracción.

    • 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_changepublicationy especifique allow_pull para @property y true para @value.
  3. En el suscriptor, ejecute sp_addpullsubscription. Especifique @publisher , @publicationy uno de los valores siguientes para @update_mode:

    • queued tran : habilita la suscripción para actualización en cola.
    • queued failover - permite la actualización en cola con la actualización inmediata como opción de respaldo.

    Nota:

    queued failover requiere que la publicación también esté habilitada para suscripciones de actualización inmediata. Para realizar la conmutación por error a la actualización inmediata, debe usar sp_link_publication para definir las credenciales con las que los cambios realizados en el Suscriptor se replican en el Publicador.

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

    • @publisher, @publisher_dby @publication.
    • Las credenciales de Windows bajo 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) Un valor de 0 para @distributor_security_mode y la información de inicio de sesión de SQL Server para @distributor_login y @distributor_password, en caso de que necesite usar Autenticación de SQL Server cuando se conecte al distribuidor.
    • La programación del trabajo del Agente de distribución para esta suscripción.
  5. En el publicador, ejecute sp_addsubscriber para registrar el suscriptor en el publicador y especifique @publication, @subscriber, @destination_db, un valor de extracción para @subscription_typey el mismo valor que especificó en el paso 3 para @update_mode. Esto registra la suscripción de tipo pull en el Publisher.

Crear una suscripción push de actualización en cola

  1. En el publicador, ejecute sp_helppublicationpara comprobar que la publicación admite suscripciones de actualización en cola.

    • Si el valor de allow_queued_tran en el conjunto de resultados es 1, la publicación admite suscripciones de actualización inmediata.
    • Si el valor de allow_queued_tran en el conjunto de resultados es 0, la publicación debe volver a crearse con las suscripciones de actualización en cola habilitadas. Para obtener más información, vea Cómo: Habilitar la actualización de suscripciones para publicaciones transaccionales (Programación de replicación Transact-SQL).
  2. En el publicador, compruebe que la publicación admite suscripciones push ejecutando sp_helppublication.

    • Si el valor de allow_push en el conjunto de resultados es 1, la publicación admite suscripciones push.
    • Si el valor de allow_push es 0, ejecute sp_changepublicationy especifiqueallow_push para @property y true para @value.
  3. En el publicador, ejecute sp_addsubscription. Especifique @publication, @subscriber, @destination_dby uno de los valores siguientes para @update_mode:

    • queued tran : habilita la suscripción para actualización en cola.
    • queued failover - permite la actualización en cola con la actualización inmediata como opción de respaldo.

    Nota:

    La opción de conmutación por error en cola requiere que la publicación también esté habilitada para las suscripciones de actualización inmediata. Para realizar la conmutación por error a la actualización inmediata, debe usar sp_link_publication para definir las credenciales con las que los cambios realizados en el Suscriptor se replican en el Publicador.

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

    • @subscriber, @subscriber_dby @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) Un valor de 0 para @subscriber_security_mode y la información de inicio de sesión de SQL Server para @subscriber_login y @subscriber_password, en caso de que necesite usar Autenticación de SQL Server cuando se conecte al suscriptor.
    • La programación del trabajo del Agente de distribución para esta suscripción.

Establecer opciones de resolución de conflictos para actualizaciones en cola

Establezca las opciones de resolución de conflictos para las publicaciones que admiten suscripciones de actualización en cola en la página Opciones de suscripción del cuadro de diálogo Propiedades de la publicación: <Publicación>. Para obtener más información sobre el acceso a este cuadro de diálogo, vea View and Modify Publication Properties.

  1. En la página Opciones de suscripción, del cuadro de diálogo Propiedades de la publicación: <Publicación>, seleccione uno de los siguientes valores para la opción Directiva de resolución de conflictos:

    • Mantener el cambio del publicador
    • Mantener el cambio de abonado
    • Reinicializar la suscripción

Ejemplo

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

Nota:

Este script usa variables de scripting de sqlcmd. Estas variables tienen el formato $(MyVariable). Para obtener información sobre cómo usar las variables de script en la línea de comandos y en SQL Server Management Studio, consulte la sección Ejecución de scripts de replicación del tema Conceptos de procedimientos almacenados del sistema de replicación.

-- 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'AdventureWorks2022';
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 AdventureWorks2022;
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'AdventureWorks2022Replica';
SET @subscriber = $(SubServer);

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