sp_addsubscription (Transact-SQL)

Applies to:SQL ServerAzure SQL Database

Aggiunge una sottoscrizione a una pubblicazione e imposta lo stato del Sottoscrittore. Questa stored procedure viene eseguita nel database di pubblicazione del server di pubblicazione.

Convenzioni di sintassi Transact-SQL

Sintassi

sp_addsubscription
    [ @publication = ] N'publication'
    [ , [ @article = ] N'article' ]
    [ , [ @subscriber = ] N'subscriber' ]
    [ , [ @destination_db = ] N'destination_db' ]
    [ , [ @sync_type = ] N'sync_type' ]
    [ , [ @status = ] N'status' ]
    [ , [ @subscription_type = ] N'subscription_type' ]
    [ , [ @update_mode = ] N'update_mode' ]
    [ , [ @loopback_detection = ] N'loopback_detection' ]
    [ , [ @frequency_type = ] frequency_type ]
    [ , [ @frequency_interval = ] frequency_interval ]
    [ , [ @frequency_relative_interval = ] frequency_relative_interval ]
    [ , [ @frequency_recurrence_factor = ] frequency_recurrence_factor ]
    [ , [ @frequency_subday = ] frequency_subday ]
    [ , [ @frequency_subday_interval = ] frequency_subday_interval ]
    [ , [ @active_start_time_of_day = ] active_start_time_of_day ]
    [ , [ @active_end_time_of_day = ] active_end_time_of_day ]
    [ , [ @active_start_date = ] active_start_date ]
    [ , [ @active_end_date = ] active_end_date ]
    [ , [ @optional_command_line = ] N'optional_command_line' ]
    [ , [ @reserved = ] N'reserved' ]
    [ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
    [ , [ @offloadagent = ] offloadagent ]
    [ , [ @offloadserver = ] N'offloadserver' ]
    [ , [ @dts_package_name = ] N'dts_package_name' ]
    [ , [ @dts_package_password = ] N'dts_package_password' ]
    [ , [ @dts_package_location = ] N'dts_package_location' ]
    [ , [ @distribution_job_name = ] N'distribution_job_name' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @backupdevicetype = ] N'backupdevicetype' ]
    [ , [ @backupdevicename = ] N'backupdevicename' ]
    [ , [ @mediapassword = ] N'mediapassword' ]
    [ , [ @password = ] N'password' ]
    [ , [ @fileidhint = ] fileidhint ]
    [ , [ @unload = ] unload ]
    [ , [ @subscriptionlsn = ] subscriptionlsn ]
    [ , [ @subscriptionstreams = ] subscriptionstreams ]
    [ , [ @subscriber_type = ] subscriber_type ]
    [ , [ @memory_optimized = ] memory_optimized ]
[ ; ]

Argomenti

[ @publication = ] N'publication'

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

[ @article = ] N'article'

Articolo a cui viene sottoscritta la pubblicazione. @article è sysname, con un valore predefinito .all Se all, viene aggiunta una sottoscrizione a tutti gli articoli della pubblicazione. Solo i valori di o NULL sono supportati per i server di all pubblicazione Oracle.

[ @subscriber = ] N'subscriber'

Nome del Sottoscrittore. @subscriber è sysname, con il valore predefinito NULL.

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.

[ @destination_db = ] N'destination_db'

Nome del database di destinazione in cui inserire i dati replicati. @destination_db è sysname, con il valore predefinito NULL. Quando NULL, @destination_db è impostato sul nome del database di pubblicazione. Per i server di pubblicazione Oracle, è necessario specificare @destination_db . Per un Sottoscrittore non SQL Server, specificare il valore (destinazione predefinita) per @destination_db.

[ @sync_type = ] N'sync_type'

Tipo di sincronizzazione della sottoscrizione. @sync_type è nvarchar(255)e può essere uno dei valori seguenti:

Valore Description
none1 Il Sottoscrittore dispone già dello schema e dei dati iniziali per le tabelle pubblicate.
automatic (predefinito) Lo schema e i dati iniziali per le tabelle pubblicate vengono trasferiti per primi nel Sottoscrittore.
replication support only2 Esegue nel Sottoscrittore la generazione automatica di stored procedure e trigger personalizzati degli articoli che supportano l'aggiornamento delle sottoscrizioni, se appropriato. Presuppone che nel Sottoscrittore siano già disponibili lo schema e i dati iniziali per le tabelle pubblicate. Durante la configurazione di una topologia di replica transazionale peer-to-peer, assicurarsi che i dati in tutti i nodi della topologia siano identici. Per altre informazioni, vedere Peer-to-Peer - Replica transazionale.
initialize with backup2 Lo schema e i dati iniziali per le tabelle pubblicate vengono recuperati da un backup del database di pubblicazione. Si presuppone che il Sottoscrittore abbia accesso a un backup del database di pubblicazione. Il percorso del tipo di backup e del supporto per il backup viene specificato da @backupdevicename e @backupdevicetype. Se si utilizza questa opzione, non sarà necessario mettere in stato di inattività la topologia di replica transazionale peer-to-peer durante la configurazione.
initialize from lsn Usato quando si aggiunge un nodo a una topologia di replica transazionale peer-to-peer. Utilizzato con @subscriptionlsn perché tutte le transazioni pertinenti vengano replicate nel nuovo nodo. Presuppone che nel Sottoscrittore siano già disponibili lo schema e i dati iniziali per le tabelle pubblicate. Per altre informazioni, vedere Peer-to-Peer - Replica transazionale.

1 Questa opzione è stata deprecata. In alternativa, utilizzare il valore replication support only.

2 Non supportato per le sottoscrizioni a pubblicazioni non SQL Server.

Nota

Le tabelle e i dati di sistema vengono sempre trasferiti.

[ @status = ] N'status'

Stato della sottoscrizione. @status è sysname, con un valore predefinito .NULL Quando questo parametro non è impostato in modo esplicito, la replica lo imposta automaticamente su uno di questi valori.

Valore Descrizione
active La sottoscrizione è inizializzata e in grado di accettare modifiche. Questa opzione viene impostata quando il valore di @sync_type non è nessuno, inizializzare con il backup o solo il supporto della replica.
subscribed La sottoscrizione deve essere inizializzata. Questa opzione viene impostata quando il valore di @sync_type è automatico.

[ @subscription_type = ] N'subscription_type'

Tipo di sottoscrizione @subscription_type è nvarchar(4), con il valore predefinito push. Può essere push o pull. Le agente di distribuzione di sottoscrizioni push risiedono nel server di distribuzione e le agente di distribuzione di sottoscrizioni pull risiedono nel Sottoscrittore. @subscription_type possibile pull creare una sottoscrizione pull denominata nota al server di pubblicazione. Per altre informazioni, vedere Sottoscrivere le pubblicazioni.

Nota

Le sottoscrizioni anonime non devono usare questa stored procedure.

[ @update_mode = ] N'update_mode'

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

Valore Descrizione
read only (predefinito) La sottoscrizione è di sola lettura. Le modifiche nel Sottoscrittore non vengono inviate al server di pubblicazione.
sync tran Abilita il supporto per sottoscrizioni ad aggiornamento immediato. Questa proprietà non è supportata per server di pubblicazione Oracle.
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. Questa proprietà non è supportata per server di pubblicazione Oracle.
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, è possibile modificare la modalità di aggiornamento in modo che le modifiche apportate ai dati nel Sottoscrittore vengano archiviate in una coda finché il Sottoscrittore e il server di pubblicazione non vengono riconnessi. Questa proprietà non è supportata per server di pubblicazione Oracle.
queued failover 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. Questa proprietà non è supportata per server di pubblicazione Oracle.

I valori sync tran e queued tran non sono consentiti se la pubblicazione sottoscritta consente DTS.

[ @loopback_detection = ] N'loopback_detection'

Indica se l'agente di distribuzione reinvia al Sottoscrittore le transazioni generate nel Sottoscrittore stesso. @loopback_detection è nvarchar(5) e può essere uno di questi valori.

Valore Descrizione
true agente di distribuzione non invia le transazioni originate dal Sottoscrittore al Sottoscrittore. Utilizzato con la replica transazionale bidirezionale. Per altre informazioni, vedere Bidirectional Transactional Replication.
false L'agente di distribuzione reinvia le transazioni generate nel Sottoscrittore al Sottoscrittore.
NULL (predefinito) Impostare automaticamente su true per un Sottoscrittore di SQL Server e false per un Sottoscrittore non SQL Server.

[ @frequency_type = ] frequency_type

Frequenza con cui pianificare l'attività di distribuzione. @frequency_type è int e può essere uno di questi valori.

Valore Descrizione
1 Singola occorrenza
2 Su richiesta
4 Ogni giorno
8 Settimanale
16 Mensile
32 Mensile relativa
64 (predefinito) Avvio automatico
128 Ricorrente

[ @frequency_interval = ] frequency_interval

Valore da applicare alla frequenza impostata da @frequency_type. @frequency_interval è int, con il valore predefinito NULL.

[ @frequency_relative_interval = ] frequency_relative_interval

Data del agente di distribuzione. Questo parametro viene usato quando @frequency_type è impostato su 32 (relativo mensile). @frequency_relative_interval è int e può essere uno di questi valori.

Valore Descrizione
1 First
2 Secondo
4 Terza
8 Quarta
16 Last
NULL (predefinito)

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

Fattore di ricorrenza utilizzato da @frequency_type. @frequency_recurrence_factor è int, con un valore predefinito .NULL

[ @frequency_subday = ] frequency_subday

Frequenza, espressa in minuti, per riprogrammare durante il periodo definito. @frequency_subday è int e può essere uno di questi valori.

Valore Descrizione
1 Una sola volta
2 Secondo
4 Minute
8 Ore
NULL

[ @frequency_subday_interval = ] frequency_subday_interval

Intervallo per @frequency_subday. @frequency_subday_interval è int, con il valore predefinito NULL.

[ @active_start_time_of_day = ] active_start_time_of_day

Ora del giorno in cui il agente di distribuzione viene pianificato per la prima volta, formattato come HHmmss. @active_start_time_of_day è int, con il valore predefinito NULL.

[ @active_end_time_of_day = ] active_end_time_of_day

Ora del giorno in cui il agente di distribuzione smette di essere pianificato, formattato come HHmmss. @active_end_time_of_day è int, con il valore predefinito .NULL

[ @active_start_date = ] active_start_date

Data in cui il agente di distribuzione viene pianificato per la prima volta, formattato come yyyyMMdd. @active_start_date è int, con un valore predefinito .NULL

[ @active_end_date = ] active_end_date

Data in cui il agente di distribuzione smette di essere pianificato, formattato come yyyyMMdd. @active_end_date è int, con un valore predefinito .NULL

[ @optional_command_line = ] N'optional_command_line'

Prompt dei comandi facoltativo da eseguire. @optional_command_line è nvarchar(4000), con il valore predefinito NULL.

[ @reserved = ] N'reserved'

Identificato solo a scopo informativo. Non supportato. Non è garantita la compatibilità con le versioni future.

[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'

Indica se la sottoscrizione può essere sincronizzata tramite Gestione sincronizzazione Windows. @enabled_for_syncmgr è nvarchar(5), con un valore predefinito , NULLche corrisponde a false. Se false, la sottoscrizione non è registrata con Gestione sincronizzazione Windows. Se true, la sottoscrizione viene registrata con Gestione sincronizzazione Windows e può essere sincronizzata senza avviare SQL Server Management Studio. Questa proprietà non è supportata per server di pubblicazione Oracle.

[ @offloadagent = ] offloadagent

Specifica se è possibile o meno attivare l'agente in remoto. @offloadagent è bit, con il valore predefinito 0.

Nota

Questo parametro è deprecato ed è ancora disponibile per compatibilità con gli script di versioni precedenti.

[ @offloadserver = ] N'offloadserver'

Specifica il nome di rete del server da utilizzare per l'attivazione remota. @offloadserver è sysname, con il valore predefinito NULL.

[ @dts_package_name = ] N'dts_package_name'

Specifica il nome del pacchetto Data Transformation Services (DTS). @dts_package_name è sysname, con un valore predefinito .NULL Per specificare, ad esempio, il nome di pacchetto DTSPub_Package, il parametro deve essere @dts_package_name = N'DTSPub_Package'. Questo parametro è disponibile per sottoscrizioni push. Per aggiungere informazioni sul pacchetto DTS a una sottoscrizione pull, usare sp_addpullsubscription_agent.

[ @dts_package_password = ] N'dts_package_password'

Specifica la password nel pacchetto, se presente. @dts_package_password è sysname, con il valore predefinito NULL.

Nota

È necessario specificare una password se si specifica @dts_package_name .

[ @dts_package_location = ] N'dts_package_location'

Specifica la posizione del pacchetto. @dts_package_location è nvarchar(12), con un valore predefinito , NULLche corrisponde a distributor. Il percorso del pacchetto può essere distributor o subscriber.

[ @distribution_job_name = ] N'distribution_job_name'

Identificato solo a scopo informativo. Non supportato. Non è garantita la compatibilità con le versioni future.

[ @publisher = ] N'publisher'

Specifica un server di pubblicazione non SQL Server. @publisher è sysname, con un valore predefinito .NULL

Nota

@publisher non deve essere specificato per un server di pubblicazione di SQL Server.

[ @backupdevicetype = ] N'backupdevicetype'

Specifica il tipo di dispositivo di backup utilizzato durante l'inizializzazione di un Sottoscrittore da un backup. @backupdevicetype è nvarchar(20)e può essere uno di questi valori:

Valore Descrizione
logical (predefinito) Il dispositivo di backup è un dispositivo logico
disk Il dispositivo di backup è un'unità disco
tape Il dispositivo di backup è l'unità nastro.

@backupdevicetype viene utilizzato solo quando @sync_method è impostato su initialize_with_backup.

[ @backupdevicename = ] N'backupdevicename'

Specifica il nome del dispositivo utilizzato durante l'inizializzazione di un Sottoscrittore da un backup. @backupdevicename è nvarchar(1000), con il valore predefinito NULL.

[ @mediapassword = ] N'mediapassword'

Specifica una password per il set di supporti se durante la formattazione dei supporti è stata impostata una password. @mediapassword è sysname, con il valore predefinito NULL.

Nota

Questa funzionalità verrà rimossa nelle versioni future di SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

[ @password = ] N'password'

Specifica una password per il backup se durante la creazione del backup è stata impostata una password. @password è sysname, con un valore predefinito .NULL

[ @fileidhint = ] fileidhint

Identifica un valore ordinale del set di backup da ripristinare. @fileidhint è int, con il valore predefinito NULL.

[ @unload = ] scaricare

Specifica se è necessario scaricare un dispositivo di backup su nastro dopo il completamento dell'inizializzazione dal backup. @unload è bit, con un valore predefinito 1, che specifica che il nastro deve essere scaricato. @unload viene usato solo quando @backupdevicetype è tape.

[ @subscriptionlsn = ] subscriptionlsn

Specifica il numero di sequenza del file di log (LSN) al quale una sottoscrizione deve iniziare a recapitare le modifiche a un nodo in una topologia di replica transazionale peer-to-peer. @subscriptionlsn è binary(10), con il valore predefinito NULL. Usato con un valore @sync_type di initialize from lsn per assicurarsi che tutte le transazioni pertinenti vengano replicate in un nuovo nodo. Per altre informazioni, vedere Peer-to-Peer - Replica transazionale.

[ @subscriptionstreams = ] subscriptionstreams

Numero di connessioni consentite per agente di distribuzione di applicare batch di modifiche in parallelo a un Sottoscrittore, mantenendo al tempo stesso molte delle caratteristiche transazionali presenti quando si usa un singolo thread. @subscriptionstreams è tinyint, con un valore predefinito .NULL È supportato un intervallo di valori da 1 a 64 . Questo parametro non è supportato per sottoscrittori non SQL Server, server di pubblicazione Oracle o sottoscrizioni peer-to-peer. Ogni volta che si usa @subscriptionstreams , nella msreplication_subscriptions tabella vengono aggiunte righe aggiuntive (una riga per flusso) con un agent_id valore impostato su NULL.

Nota

I flussi di sottoscrizione non funzionano per gli articoli configurati per il recapito di Transact-SQL. Per usare i flussi di sottoscrizione, configurare gli articoli per recapitare invece chiamate a stored procedure.

[ @subscriber_type = ] subscriber_type

Tipo di Sottoscrittore. @subscriber_type è tinyint e può essere uno di questi valori.

Valore Descrizione
0 (predefinito) Sottoscrittore di SQL Server
1 Server dell'origine dei dati ODBC.
2 Database Microsoft Jet
3 Provider OLE DB

[ @memory_optimized = ] memory_optimized

Indica che la sottoscrizione supporta tabelle ottimizzate per la memoria. @memory_optimized è bit, con un valore predefinito (0false). 1 (true) indica che la sottoscrizione supporta le tabelle ottimizzate per la memoria.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Osservazioni:

sp_addsubscription viene usato nella replica snapshot e nella replica transazionale.

Quando sp_addsubscription viene eseguito da un membro del ruolo predefinito del server sysadmin per creare una sottoscrizione push, il processo agente di distribuzione viene creato in modo implicito ed eseguito con l'account del servizio SQL Server Agent. È consigliabile eseguire sp_addpushsubscription_agent e specificare le credenziali di un account Windows diverso specifico dell'agente per @job_login e @job_password. Per altre informazioni, vedere Modello di sicurezza dell'agente di replica.

sp_addsubscription impedisce ai Sottoscrittori ODBC e OLE DB di accedere alle pubblicazioni che:

  • Sono stati creati con il @sync_method nativo nella chiamata a sp_addpublication.

  • Contiene articoli aggiunti alla pubblicazione con la stored procedure sp_addarticle con un valore di parametro @pre_creation_cmd pari a 3 (troncamento).

  • Tentare di impostare @update_mode su sync tran.

  • Pubblicazioni che includono un articolo configurato per l'utilizzo di istruzioni con parametri.

Inoltre, se per una pubblicazione è impostata l'opzione @allow_queued_tran su true (che consente l'accodamento delle modifiche nel Sottoscrittore fino a quando non possono essere applicate nel server di pubblicazione), la colonna timestamp in un articolo viene inserita nello script come timestamp e le modifiche apportate a tale colonna vengono inviate al Sottoscrittore. Nel Sottoscrittore viene quindi generato e aggiornato il valore della colonna timestamp. Per un Sottoscrittore ODBC o OLE DB, sp_addsubscription non riesce se si tenta di sottoscrivere una pubblicazione con @allow_queued_tran impostata su true e gli articoli con colonne timestamp.

Se una sottoscrizione non usa un pacchetto DTS, non può sottoscrivere una pubblicazione impostata su @allow_transformable_subscriptions. Se la tabella della pubblicazione deve essere replicata sia come sottoscrizione DTS che come sottoscrizione non DTS, è necessario creare due pubblicazioni distinte, una per ogni tipo di sottoscrizione.

Quando si selezionano le opzioni replication support onlydi sync_type , initialize with backupo initialize from lsn, l'agente di lettura log deve essere eseguito dopo l'esecuzione sp_addsubscriptiondi , in modo che gli script di configurazione vengano scritti nel database di distribuzione. L'agente di lettura log deve essere in esecuzione con un account membro del ruolo predefinito del server sysadmin . Quando l'opzione @sync_type è impostata su Automatic, non sono necessarie azioni speciali dell'agente di lettura log.

Autorizzazioni

Solo i membri del ruolo predefinito del server sysadmin o db_owner ruolo predefinito del database possono eseguire sp_addsubscription. Per le sottoscrizioni pull, gli utenti con account di accesso nell'elenco di accesso alla pubblicazione possono eseguire sp_addsubscription.

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

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

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