sp_addpullsubscription (Transact-SQL)

Se aplica a:SQL ServerAzure SQL Managed Instance

Agrega una suscripción de extracción a una publicación de instantáneas o transaccional. Este procedimiento almacenado se ejecuta en el suscriptor de la base de datos donde se va a crear la suscripción de extracción.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_addpullsubscription
    [ @publisher = ] N'publisher'
    [ , [ @publisher_db = ] N'publisher_db' ]
    , [ @publication = ] N'publication'
    [ , [ @independent_agent = ] N'independent_agent' ]
    [ , [ @subscription_type = ] N'subscription_type' ]
    [ , [ @description = ] N'description' ]
    [ , [ @update_mode = ] N'update_mode' ]
    [ , [ @immediate_sync = ] immediate_sync ]
[ ; ]

Argumentos

[ @publisher = ] N'publisher'

El nombre del publicador. @publisher es sysname, sin ningún valor predeterminado.

Nota:

El nombre del servidor se puede especificar como <Hostname>,<PortNumber>. 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.

[ @publisher_db = ] N'publisher_db'

Nombre de la base de datos del publicador. @publisher_db es sysname, con un valor predeterminado de NULL. los publicadores de Oracle omiten @publisher_db.

[ @publication = ] N'publication'

Nombre de la publicación. @publication es sysname, sin ningún valor predeterminado.

[ @independent_agent = ] N'independent_agent'

Especifica si hay un Agente de distribución independiente para esta publicación. @independent_agent es nvarchar(5), con un valor predeterminado de true.

  • Si truees , hay una Agente de distribución independiente para esta publicación.
  • Si falsees , hay una Agente de distribución para cada par de base de datos o suscriptor del publicador.

@independent_agent es una propiedad de la publicación y debe tener el mismo valor que el publicador.

[ @subscription_type = ] N'subscription_type'

Tipo de suscripción. @subscription_type es nvarchar(9), con un valor predeterminado de anonymous. Debe especificar un valor de pull para @subscription_type, a menos que desee crear una suscripción sin registrar la suscripción en el publicador. En este caso, debe especificar un valor de anonymous. Esto es necesario para los casos en los que no se puede establecer una conexión de SQL Server con el publicador durante la configuración de la suscripción.

[ @description = ] N'description'

Descripción de la publicación. @description es nvarchar(100), con un valor predeterminado de NULL.

[ @update_mode = ] N'update_mode'

El tipo de actualización. @update_mode es nvarchar(30) y puede ser uno de los valores siguientes.

Value Descripción
read only (valor predeterminado) La suscripción es de solo lectura. Los cambios en el suscriptor no se devuelven al publicador. Debe usarse cuando no se realicen actualizaciones en el suscriptor.
synctran Habilita la compatibilidad con las suscripciones de actualización inmediata.
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.
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, las modificaciones de datos realizadas en el suscriptor se pueden almacenar en una cola hasta que el suscriptor y el publicador se vuelvan a conectar.
queued failover Nota: No se admite para publicadores de Oracle.

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.

[ @immediate_sync = ] immediate_sync

Especifica si los archivos de sincronización se crean o se vuelven a crear cada vez que se ejecuta el Agente de instantáneas. @immediate_sync es bit, con un valor predeterminado de 1y debe establecerse en el mismo valor que @immediate_sync en sp_addpublication (Transact-SQL). @immediate_sync es una propiedad de la publicación y debe tener el mismo valor que el publicador.

Valores de código de retorno

0 (correcto) o 1 (erróneo).

Comentarios

sp_addpullsubscription se usa en la replicación de instantáneas y la replicación transaccional.

Importante

Para las suscripciones de actualización en cola, use la autenticación de SQL Server para las conexiones a los suscriptores y especifique una cuenta diferente para la conexión a cada suscriptor. Al crear una suscripción de extracción que admita la actualización en cola, la replicación siempre establece la conexión para usar la autenticación de Windows (para las suscripciones de extracción, la replicación no puede acceder a los metadatos en el suscriptor necesario para usar la autenticación de SQL Server). En este caso, debe ejecutar sp_changesubscription para cambiar la conexión para usar la autenticación de SQL Server después de configurar la suscripción.

Si la tabla MSreplication_subscriptions (Transact-SQL) no existe en el suscriptor, sp_addpullsubscription la crea. También agrega una fila a la tabla MSreplication_subscriptions (Transact-SQL). En el caso de las suscripciones de extracción, primero se debe llamar a sp_addsubscription (Transact-SQL) en el publicador.

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

-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2022';

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [AdventureWorks2022Replica]
EXEC sp_addpullsubscription 
  @publisher = @publisher, 
  @publication = @publication, 
  @publisher_db = @publicationDB;

-- Add an agent job to synchronize the pull subscription.
EXEC sp_addpullsubscription_agent 
  @publisher = @publisher, 
  @publisher_db = @publicationDB, 
  @publication = @publication, 
  @distributor = @publisher, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

Permisos

Solo los miembros del rol fijo de servidor sysadmin o db_owner rol fijo de base de datos pueden ejecutar sp_addpullsubscription.