Cómo crear una suscripción de inserción (programación de la replicación con Transact-SQL)

Las suscripciones de inserción pueden crearse mediante programación con procedimientos almacenados de replicación. Los procedimientos almacenados que se usen dependerán del tipo de publicación a la que corresponda la suscripción.

Nota de seguridadNota de seguridad

Cuando sea posible, pida a los usuarios que proporcionen credenciales de seguridad en tiempo de ejecución. Si debe almacenar las credenciales en un archivo de script, proteja el archivo para evitar el acceso no autorizado.

Para crear una suscripción de inserción para una publicación de instantáneas o transaccional

  1. En el publicador de la base de datos de publicaciones, compruebe que la publicación admita suscripciones de inserción mediante la ejecución de sp_helppublication.

    • Si el valor de allow_push es 1, se admiten 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.

  2. En el publicador de la base de datos de publicaciones, ejecute sp_addsubscription. Especifique @publication, @subscriber y @destination_db. Especifique un valor push para @subscription_type. Para obtener información acerca de cómo actualizar suscripciones, vea Cómo crear una suscripción actualizable en una publicación transaccional (programación de la replicación con Transact-SQL).

  3. En el publicador de la base de datos de publicaciones, ejecute sp_addpushsubscription_agent. Especifique lo siguiente:

    • Los parámetros @subscriber, @subscriber_db y @publication.

    • Las credenciales de Microsoft 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 MicrosoftSQL Server para @subscriber_login y @subscriber_password. Especifique estos parámetros si necesita usar 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).

    Nota de seguridadNota de seguridad

    Al crear una suscripción de inserción en un publicador con un distribuidor remoto, los valores suministrados para todos los parámetros, incluidos job_login y job_password, se envían al distribuidor como texto sin formato. Debe cifrar la conexión entre el publicador y su distribuidor remoto antes de ejecutar este procedimiento almacenado. Para obtener más información, vea Cifrar conexiones a SQL Server.

Para crear una suscripción de inserción en una publicación de mezcla

  1. En el publicador de la base de datos de publicaciones, compruebe que la publicación admita suscripciones de inserción mediante la ejecución de sp_helpmergepublication.

    • Si el valor de allow_push es 1, la publicación admite operaciones de inserción.

    • Si el valor de allow_push no es 1, ejecute sp_changemergepublication, y especifique allow_push para @property y true para @value.

  2. En el publicador de la base de datos de publicaciones, ejecute sp_addmergesubscription y especifique los siguientes parámetros:

    • @publication. Éste es el nombre de la publicación.

    • @subscriber_type. Para una suscripción de cliente, especifique local y para una suscripción de servidor, especifique global.

    • @subscription_priority. Para una suscripción de servidor, especifique una prioridad para la suscripción (de 0,00 a 99,99).

      Para obtener más información, vea Detección y resolución de conflictos de replicación de mezcla avanzada.

  3. En el publicador de la base de datos de publicaciones, ejecute sp_addmergepushsubscription_agent. Especifique lo siguiente:

    • Los parámetros @subscriber, @subscriber_db y @publication.

    • Las credenciales de Windows con las que se ejecuta el Agente de mezcla 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 mezcla 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. Especifique estos parámetros si necesita usar Autenticación de SQL Server al conectarse al suscriptor.

    • (Opcional) El valor 0 para @publisher_security_mode y la información de inicio de sesión de SQL Server para @publisher_login y @publisher_password. Especifique estos valores si necesita usar Autenticación de SQL Server al conectarse al publicador.

    • Una programación para el Agente de mezcla 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).

    Nota de seguridadNota de seguridad

    Al crear una suscripción de inserción en un publicador con un distribuidor remoto, los valores suministrados para todos los parámetros, incluidos job_login y job_password, se envían al distribuidor como texto sin formato. Debe cifrar la conexión entre el publicador y su distribuidor remoto antes de ejecutar este procedimiento almacenado. Para obtener más información, vea Cifrar conexiones a SQL Server.

Ejemplo

El siguiente ejemplo crea una suscripción de inserción en una publicación de mezcla. 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".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';

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

El siguiente ejemplo crea una suscripción de inserción en una publicación de mezcla. 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".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica'; 
SET @hostname = N'adventure-works\david8'

-- Add a push subscription to a merge publication.
USE [AdventureWorks]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'push',
  @hostname = @hostname;

--Add an agent job to synchronize the push subscription.
EXEC sp_addmergepushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO