sp_addsubscription (Transact-SQL)
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.
Sintassi
sp_addsubscription [ @publication = ] 'publication'
[ , [ @article = ] 'article']
[ , [ @subscriber = ] 'subscriber' ]
[ , [ @destination_db = ] 'destination_db' ]
[ , [ @sync_type = ] 'sync_type' ]
[ , [ @status = ] 'status'
[ , [ @subscription_type = ] 'subscription_type' ]
[ , [ @update_mode = ] 'update_mode' ]
[ , [ @loopback_detection = ] '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 = ] 'optional_command_line' ]
[ , [ @reserved = ] 'reserved' ]
[ , [ @enabled_for_syncmgr= ] 'enabled_for_syncmgr' ]
[ , [ @offloadagent= ] remote_agent_activation]
[ , [ @offloadserver= ] 'remote_agent_server_name' ]
[ , [ @dts_package_name= ] 'dts_package_name' ]
[ , [ @dts_package_password= ] 'dts_package_password' ]
[ , [ @dts_package_location= ] 'dts_package_location' ]
[ , [ @distribution_job_name= ] 'distribution_job_name' ]
[ , [ @publisher = ] 'publisher' ]
[ , [ @backupdevicetype = ] 'backupdevicetype' ]
[ , [ @backupdevicename = ] 'backupdevicename' ]
[ , [ @mediapassword = ] 'mediapassword' ]
[ , [ @password = ] 'password' ]
[ , [ @fileidhint = ] fileidhint ]
[ , [ @unload = ] unload ]
[ , [ @subscriptionlsn = ] subscriptionlsn ]
[ , [ @subscriptionstreams = ] subscriptionstreams ]
[ , [ @subscriber_type = ] subscriber_type ]
Argomenti
[ @publication=\] 'publication'
Nome della pubblicazione. publication è di tipo sysname e non prevede alcun valore predefinito.[ @article=\] 'article'
Articolo in cui viene sottoscritta la pubblicazione. article è di tipo sysname e il valore predefinito è all. Se si specifica all, viene aggiunta una sottoscrizione a tutti gli articoli della pubblicazione specificata. Per i server di pubblicazione Oracle sono supportati solo i valori all o NULL.[ @subscriber=\] 'subscriber'
Nome del Sottoscrittore. subscriber è di tipo sysname e il valore predefinito è NULL.[ @destination_db=\] 'destination_db'
Nome del database di destinazione in cui verranno inseriti i dati replicati. destination_db è di tipo sysname e il valore predefinito è NULL. Se si specifica NULL, destination_db viene impostato sul nome del database di pubblicazione. È necessario specificare destination_db per i server di pubblicazione Oracle. Per un Sottoscrittore non SQL Server, specificare un valore di (destinazione predefinita) per destination_db.[ @sync_type=\] 'sync_type'
Tipo di sincronizzazione della sottoscrizione. sync_type è di tipo nvarchar(255). I possibili valori sono i seguenti:Valore
Descrizione
none
Il Sottoscrittore dispone già dello schema e dei dati iniziali per le tabelle pubblicate.
NotaQuesta opzione è obsoleta. In alternativa, utilizzare il valore replication support only.automatic (predefinito)
Vengono innanzitutto trasferiti nel Sottoscrittore lo schema e i dati iniziali per le tabelle pubblicate.
replication support only
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 ulteriori informazioni, vedere Procedura: Configurazione della replica transazionale peer-to-peer (programmazione Transact-SQL della replica).
Non supportato per le sottoscrizioni a pubblicazioni non SQL Server.
initialize with backup
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. La posizione del backup e il tipo di supporto per il backup vengono specificati 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.
Non supportato per le sottoscrizioni a pubblicazioni non SQL Server.
initialize from lsn
Utilizzato quando si aggiunge un nodo a una topologia di replica transazionale peer-to-peer. Utilizzato con @subscriptionlsn per assicurarsi che 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 ulteriori informazioni, vedere Procedura: Configurazione della replica transazionale peer-to-peer (programmazione Transact-SQL della replica).
Nota
Le tabelle e i dati di sistema vengono sempre trasferiti.
[ @status=\] 'status'
Stato della sottoscrizione. status è di tipo sysname e il valore predefinito è NULL. Se non è impostato in modo esplicito, questo parametro viene impostato automaticamente dalla replica su uno dei valori seguenti.Valore
Descrizione
active
La sottoscrizione è inizializzata e in grado di accettare modifiche. Questa opzione viene impostata quando il valore di sync_type è none, initialize with backup o replication support only.
subscribed
La sottoscrizione deve essere inizializzata. Questa opzione viene impostata quando il valore di sync_type è automatic.
[ @subscription_type=\] 'subscription_type'
Tipo di sottoscrizione. subscription_type è di tipo nvarchar(4) e il valore predefinito è push. I possibili valori sono push o pull. Gli agenti di distribuzione delle sottoscrizioni push si trovano nel server di distribuzione, mentre gli agenti di distribuzione delle sottoscrizioni pull si trovano nel Sottoscrittore. Se subscription_type è pull, viene creata una sottoscrizione pull denominata nota al server di pubblicazione. Per ulteriori informazioni, vedere Sottoscrizione delle pubblicazioni.Nota
Con le sottoscrizioni anonime non è necessario utilizzare questa stored procedure.
[ @update_mode=\] 'update_mode'
Tipo di aggiornamento.update_mode è di tipo nvarchar(30). I possibili valori sono i seguenti:Valore
Descrizione
read only (predefinito)
La sottoscrizione è di sola lettura. Le modifiche apportate nel Sottoscrittore non vengono ritrasmesse al server di pubblicazione.
sync tran
Abilita il supporto per sottoscrizioni ad aggiornamento immediato. Non supportato per i 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. Non supportato per i 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, la modalità di aggiornamento può essere modificata in modo tale che le modifiche apportate ai dati nel Sottoscrittore vengano archiviate in una coda fino alla riconnessione del Sottoscrittore e del server di pubblicazione. Non supportato per i 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. Non supportato per i server di pubblicazione Oracle.
Si noti che i valori sync tran e queued tran non sono consentiti se la pubblicazione da sottoscrivere supporta DTS.
[ @loopback_detection=\] 'loopback_detection'
Indica se l'agente di distribuzione reinvia al Sottoscrittore le transazioni generate nel Sottoscrittore stesso. loopback_detection è di tipo nvarchar(5). I possibili valori sono i seguenti:Valore
Descrizione
true
L'agente di distribuzione non reinvia le transazioni generate nel Sottoscrittore al Sottoscrittore. Utilizzato con la replica transazionale bidirezionale. Per ulteriori informazioni, vedere Replica transazionale bidirezionale.
false
L'agente di distribuzione reinvia le transazioni generate nel Sottoscrittore al Sottoscrittore.
NULL (predefinito)
Impostato automaticamente su true per un Sottoscrittore SQL Server e su false per un Sottoscrittore non SQL Server.
[ @frequency_type=\] frequency_type
Frequenza di esecuzione dell'attività di distribuzione pianificata. frequency_type è di tipo int. I possibili valori sono i seguenti:Valore
Descrizione
1
Una volta
2
Su richiesta
4
Giornaliera
8
Settimanale
16
Mensile
32
Mensile con condizioni
64 (predefinito)
Avvio automatico
128
Periodica
[ @frequency_interval=\] frequency_interval
Valore da applicare alla frequenza impostata da frequency_type. frequency_interval è di tipo int e il valore predefinito è NULL.[ @frequency_relative_interval=\] frequency_relative_interval
Data dell'agente di distribuzione. Questo parametro viene utilizzato quando frequency_type è impostato su 32 (frequenza mensile relativa). frequency_relative_interval è di tipo int. I possibili valori sono i seguenti:Valore
Descrizione
1
Primo
2
Secondo
4
Terzo
8
Quarto
16
Ultimo
NULL (predefinito)
[ @frequency_recurrence_factor=\] frequency_recurrence_factor
Fattore di ricorrenza utilizzato da frequency_type. frequency_recurrence_factor è di tipo int e il valore predefinito è NULL.[ @frequency_subday=\] frequency_subday
Frequenza di ripianificazione in minuti durante il periodo definito. frequency_subday è di tipo int. I possibili valori sono i seguenti:Valore
Descrizione
1
Una volta
2
Secondo
4
Minuto
8
Ora
NULL
[ @frequency_subday_interval=\] frequency_subday_interval
Intervallo per frequency_subday. frequency_subday_interval è di tipo int e il valore predefinito è NULL.[ @active_start_time_of_day=\] active_start_time_of_day
Ora del giorno della prima esecuzione pianificata dell'agente di distribuzione, nel formato HHMMSS. active_start_time_of_day è di tipo int e il valore predefinito è NULL.[ @active_end_time_of_day=\] active_end_time_of_day
Ora del giorno dell'ultima esecuzione pianificata dell'agente di distribuzione, nel formato HHMMSS. active_end_time_of_day è di tipo int e il valore predefinito è NULL.[ @active_start_date=\] active_start_date
Data della prima esecuzione pianificata dell'agente di distribuzione, nel formato AAAAMMGG. active_start_date è di tipo int e il valore predefinito è NULL.[ @active_end_date=\] active_end_date
Data dell'ultima esecuzione pianificata dell'agente di distribuzione, nel formato AAAAMMGG. active_end_date è di tipo int e il valore predefinito è NULL.[ @optional_command_line=\] 'optional_command_line'
Prompt dei comandi facoltativo da eseguire. optional_command_line è di tipo nvarchar(4000) e il valore predefinito è NULL.[ @reserved=\] 'reserved'
Identificato solo a scopo informativo. Non supportato. Non è garantita la compatibilità con le versioni future.[ @enabled_for_syncmgr=\] 'enabled_for_syncmgr'
Indica se è possibile sincronizzare o meno la sottoscrizione tramite Gestione sincronizzazione Microsoft Windows. enabled_for_syncmgr è di tipo nvarchar(5) e il valore predefinito è FALSE. Se il valore è false, la sottoscrizione non viene registrata con Gestione sincronizzazione Microsoft Windows. Se il valore è true, la sottoscrizione viene registrata con Gestione sincronizzazione Microsoft Windows e può essere sincronizzata senza avviare SQL Server Management Studio. Non supportato per i server di pubblicazione Oracle.[ @offloadagent= ] 'remote_agent_activation'
Specifica che l'agente può essere attivato in remoto. remote_agent_activation è di tipo bit e il valore predefinito è 0.Nota
Questo parametro è obsoleto ed è disponibile solo per compatibilità con gli script di versioni precedenti.
[ @offloadserver= ] 'remote_agent_server_name'
Specifica il nome di rete del server da utilizzare per l'attivazione remota. remote_agent_server_name è di tipo sysname e il valore predefinito è NULL.[ @dts_package_name= ] 'dts_package_name'
Specifica il nome del pacchetto DTS (Data Transformation Services). dts_package_name è di tipo sysname e il valore predefinito è NULL. Ad esempio, per specificare il 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, utilizzare sp_addpullsubscription_agent.[ @dts_package_password= ] 'dts_package_password'
Specifica la password del pacchetto, se ne esiste una. dts_package_password è di tipo sysname e il valore predefinito è NULL.Nota
Se viene specificato dts_package_name, è necessario impostare una password.
[ @dts_package_location= ] 'dts_package_location'
Specifica la posizione del pacchetto. dts_package_location è di tipo nvarchar(12) e il valore predefinito è DISTRIBUTOR. Per la posizione del pacchetto è possibile specificare distributor o subscriber.[ @distribution_job_name= ] 'distribution_job_name'
Identificato solo a scopo informativo. Non supportato. Non è garantita la compatibilità con le versioni future.[ @publisher= ] 'publisher'
Specifica un server di pubblicazione non Microsoft SQL Server. publisher è di tipo sysname e il valore predefinito è NULL.Nota
publisher non deve essere specificato per un server di pubblicazione di SQL Server.
[ @backupdevicetype= ] 'backupdevicetype'
Specifica il tipo di dispositivo di backup utilizzato durante l'inizializzazione di un Sottoscrittore da un backup. backupdevicetype è di tipo nvarchar(20). I possibili valori sono i seguenti:Valore
Descrizione
logical (predefinito)
Il dispositivo di backup è un dispositivo logico.
disk
Il dispositivo di backup è l'unità disco.
tape
Il dispositivo di backup è l'unità nastro.
backupdevicetype viene utilizzato solo se sync_method è impostato su initialize_with_backup.
[ @backupdevicename= ] 'backupdevicename'
Specifica il nome del dispositivo utilizzato durante l'inizializzazione di un Sottoscrittore da un backup. backupdevicename è di tipo nvarchar(1000) e il valore predefinito è NULL.[ @mediapassword= ] 'mediapassword'
Specifica una password per il set di supporti se durante la formattazione dei supporti è stata impostata una password. mediapassword è di tipo sysname e il valore predefinito è NULL.Nota
Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa caratteristica in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.
[ @password= ] 'password'
Specifica una password per il backup se durante la creazione del backup è stata impostata una password. password è di tipo sysname e il valore predefinito è NULL.[ @fileidhint= ] fileidhint
Identifica un valore ordinale del set di backup da ripristinare. fileidhint è di tipo int e il valore predefinito è NULL.[ @unload= ] unload
Specifica se è necessario scaricare un dispositivo di backup su nastro dopo il completamento dell'inizializzazione dal backup. unload è di tipo bit e il valore predefinito è 1. Il valore 1 specifica che il nastro deve essere scaricato. unload viene utilizzato solo quando backupdevicetype è impostato su 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. Utilizzato con un valore @sync_type di initialize from lsn per assicurarsi che tutte le transazioni pertinenti vengano replicate in un nuovo nodo. Per ulteriori informazioni, vedere Procedura: Configurazione della replica transazionale peer-to-peer (programmazione Transact-SQL della replica).[ @subscriptionstreams = ] subscriptionstreams
Numero di connessioni consentite per agente di distribuzione per l'applicazione di batch di modifiche in parallelo a un Sottoscrittore, conservando molte delle funzionalità transazionali disponibili quando si utilizza un singolo thread. subscriptionstreams è di tipo tinyint e il valore predefinito è NULL. È supportato un intervallo di valori compreso tra 1 e 64. Questo parametro non è supportato per Sottoscrittori non SQL Server, server di pubblicazione Oracle e sottoscrizioni peer-to-peer.[ @subscriber_type=\] subscriber_type
Tipo di Sottoscrittore. subscriber_type è di tipo tinyint. I possibili valori sono i seguenti:Valore
Descrizione
0 (predefinito)
Sottoscrittore SQL Server
1
Server dell'origine dei dati ODBC
2
Database Microsoft Jet
3
Provider OLE DB
Valori restituiti
0 (esito positivo) o 1 (esito negativo)
Osservazioni
La stored procedure sp_addsubscription viene utilizzata per la replica snapshot e transazionale.
Se la stored procedure sp_addsubscription viene eseguita da un membro del ruolo predefinito del server sysadmin per creare una sottoscrizione push, il processo dell'agente di distribuzione viene creato in modo implicito e viene eseguito utilizzando l'account del servizio SQL Server Agent. È consigliabile eseguire sp_addpushsubscription_agent e specificare le credenziali di un account Windows diverso specifico per l'agente per @job_login e @job_password. Per ulteriori informazioni, vedere Modello di sicurezza dell'agente di replica.
La stored procedure sp_addsubscription impedisce ai Sottoscrittori ODBC e OLE DB di accedere ai seguenti tipi di pubblicazione:
Pubblicazioni create con la modalità di sincronizzazione sync_method nativa nella chiamata a sp_addpublication.
Pubblicazioni contenenti articoli aggiunti tramite la stored procedure sp_addarticle con un valore del parametro pre_creation_cmd corrispondente a 3 (troncamento).
Pubblicazioni che tentano di impostare update_mode su sync tran.
Pubblicazioni che includono un articolo configurato per l'utilizzo di istruzioni con parametri.
Se, inoltre, per una pubblicazione l'opzione allow_queued_tran è impostata su true, ovvero è consentito l'accodamento delle modifiche nel Sottoscrittore fino a quando non è possibile applicarle al server di pubblicazione, la colonna timestamp di un articolo viene inserita nello script come colonna di tipo timestamp e le modifiche apportate a tale colonna vengono inviate al Sottoscrittore. Nel Sottoscrittore viene quindi generato e aggiornato il valore della colonna timestamp. Nel caso di un Sottoscrittore ODBC o OLE DB, la stored procedure sp_addsubscription ha esito negativo se si esegue un tentativo di sottoscrizione di una pubblicazione la cui opzione allow_queued_tran è impostata su true e che contiene articoli che includono colonne timestamp.
Se una sottoscrizione non utilizza un pacchetto DTS, non può sottoscrivere una pubblicazione per la quale è impostata l'opzione 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.
Esempio
-- 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'AdventureWorks2008R2Replica';
--Add a push subscription to a transactional publication.
USE [AdventureWorks2008R2]
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
Autorizzazioni
Solo i membri del ruolo predefinito del server sysadmin o del ruolo predefinito del database db_owner possono eseguire sp_addsubscription. Per le sottoscrizioni pull, gli utenti che dispongono di un account di accesso nell'elenco di accesso della pubblicazione possono eseguire sp_addsubscription.
Vedere anche