sp_addpullsubscription (Transact-SQL)

Si applica a:SQL Server Istanza gestita di SQL di Azure

Aggiunge una sottoscrizione pull a una pubblicazione snapshot o transazionale. Questa stored procedure viene eseguita nel Sottoscrittore nel database in cui deve essere creata la sottoscrizione pull.

Convenzioni di sintassi Transact-SQL

Sintassi

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 ]
[ ; ]

Argomenti

[ @publisher = ] N'publisher'

Nome del server di pubblicazione. @publisher è sysname, senza impostazione predefinita.

Nota

Il nome del server può essere specificato come <Hostname>,<PortNumber>. Specificare il numero di porta per la connessione quando SQL Server viene distribuito in Linux o Windows con una porta personalizzata e il servizio browser è disabilitato. L'uso di numeri di porta personalizzati per il server di distribuzione remoto si applica a SQL Server 2019 (15.x) e versioni successive.

[ @publisher_db = ] N'publisher_db'

Nome del database del server di pubblicazione. @publisher_db è sysname, con il valore predefinito NULL. @publisher_db viene ignorato dai server di pubblicazione Oracle.

[ @publication = ] N'publication'

Nome della pubblicazione. @publication è sysname, senza impostazione predefinita.

[ @independent_agent = ] N'independent_agent'

Specifica se è presente un agente di distribuzione autonomo per la pubblicazione. @independent_agent è nvarchar(5), con il valore predefinito true.

  • Se true, è presente un agente di distribuzione autonomo per la pubblicazione.
  • Se false, è presente un agente di distribuzione per ogni coppia di database del server di pubblicazione/database sottoscrittore.

@independent_agent è una proprietà della pubblicazione e deve avere lo stesso valore del server di pubblicazione.

[ @subscription_type = ] N'subscription_type'

Tipo di sottoscrizione @subscription_type è nvarchar(9), con il valore predefinito anonymous. È necessario specificare il valore per pull@subscription_type, a meno che non si voglia creare una sottoscrizione senza registrare la sottoscrizione nel server di pubblicazione. In questo caso, è necessario specificare il valore .anonymous Questa operazione è necessaria per i casi in cui non è possibile stabilire una connessione DI SQL Server al server di pubblicazione durante la configurazione della sottoscrizione.

[ @description = ] N'description'

Descrizione della pubblicazione. @description è nvarchar(100), con un valore predefinito .NULL

[ @update_mode = ] N'update_mode'

Tipo di aggiornamento. @update_mode è nvarchar(30)e può essere uno dei valori seguenti.

Valore Descrizione
read only (predefinito) La sottoscrizione è di sola lettura. Le modifiche apportate al Sottoscrittore non vengono inviate al server di pubblicazione. Deve essere usato quando gli aggiornamenti non vengono eseguiti nel Sottoscrittore.
synctran Abilita il supporto per sottoscrizioni ad aggiornamento immediato.
queued tran Abilita la sottoscrizione per l'aggiornamento in coda. Le modifiche dei dati possono essere apportate nel Sottoscrittore, archiviate in una coda e quindi distribuite al server di pubblicazione.
failover Abilita la sottoscrizione per l'aggiornamento immediato sostituito dall'aggiornamento in coda in caso di failover. Le modifiche dei dati possono essere apportate nel Sottoscrittore e distribuite immediatamente al server di pubblicazione. Se il server di pubblicazione e il Sottoscrittore non sono connessi, le modifiche apportate ai dati nel Sottoscrittore possono essere archiviate in una coda fino a quando il Sottoscrittore e il server di pubblicazione non vengono riconnessi.
queued failover Nota: non supportato per i server di pubblicazione Oracle.

Abilita la sottoscrizione come sottoscrizione con aggiornamento in coda con la possibilità di passare alla modalità di aggiornamento immediato. Le modifiche ai dati possono essere apportate nel Sottoscrittore e archiviate in una coda fino alla riconnessione del Sottoscrittore e del server di pubblicazione. Quando viene ristabilita una connessione continua, la modalità di aggiornamento può essere modificata nella modalità di aggiornamento immediato.

[ @immediate_sync = ] immediate_sync

Specifica se i file di sincronizzazione vengono creati o ricreati ogni volta che viene eseguita la agente di snapshot. @immediate_sync è bit, con un valore predefinito , 1e deve essere impostato sullo stesso valore di @immediate_sync in sp_addpublication (Transact-SQL). @immediate_sync è una proprietà della pubblicazione e deve avere lo stesso valore del server di pubblicazione.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Osservazioni:

sp_addpullsubscription viene usato nella replica snapshot e nella replica transazionale.

Importante

Per le sottoscrizioni ad aggiornamento in coda, usare l'autenticazione di SQL Server per le connessioni ai Sottoscrittori e specificare un account diverso per la connessione a ogni Sottoscrittore. Quando si crea una sottoscrizione pull che supporta l'aggiornamento in coda, la replica imposta sempre la connessione per l'uso dell'autenticazione di Windows (per le sottoscrizioni pull, la replica non può accedere ai metadati nel Sottoscrittore necessario per usare l'autenticazione di SQL Server). In questo caso, è necessario eseguire sp_changesubscription per modificare la connessione per usare l'autenticazione di SQL Server dopo la configurazione della sottoscrizione.

Se la tabella MSreplication_subscriptions (Transact-SQL) non esiste nel Sottoscrittore, sp_addpullsubscription la crea. Aggiunge anche una riga alla tabella MSreplication_subscriptions (Transact-SQL). Per le sottoscrizioni pull, è necessario chiamare prima sp_addsubscription (Transact-SQL) nel server di pubblicazione.

Esempi

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

Autorizzazioni

Solo i membri del ruolo predefinito del server sysadmin o db_owner ruolo predefinito del database possono eseguire sp_addpullsubscription.