Condividi tramite


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.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

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 sottoscritto dalla 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, per destination_db specificare un valore di (destinazione predefinita).
  • [ @sync_type=] 'sync_type'
    Tipo di sincronizzazione della sottoscrizione. sync_type è di tipo nvarchar(255). I possibili valori sono i seguenti.

    Valore

  • [ @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 quanto 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 di sottoscrizioni push si trovano nel server di distribuzione, mentre gli agenti di distribuzione di 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 synctran 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. 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 per l'esecuzione pianificata dell'attività di distribuzione. 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 con condizioni). 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 YYYYMMDD. 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 YYYYMMDD. 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'
    Solo per uso interno.
  • [ @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 è false, la sottoscrizione non viene registrata in Gestione sincronizzazione Microsoft Windows. Se è true, la sottoscrizione viene registrata in 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 a livello 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'
    Nome di rete del server da utilizzare per l'attivazione remota degli agenti. remote_agent_server_name è di tipo sysname e il valore predefinito è NULL.
  • [ @dts_package_name= ] 'dts_package_name'
    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'
    Solo per uso interno.
  • [ @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 periferica 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)

    La periferica di backup è una periferica logica.

    disk

    La periferica di backup è l'unità disco.

    tape

    La periferica di backup è l'unità nastro.

    backupdevicetype viene utilizzato solo se sync_method è impostato su initialize_with_backup.

  • [ @backupdevicename= ] 'backupdevicename'
    Specifica il nome della periferica utilizzata 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.
  • [ @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 una periferica di backup su nastro al completamento dell'inizializzazione dal backup. unload è di tipo bit e il valore predefinito è 1. 1 specifica che il nastro deve essere scaricato. unload viene utilizzato solo se l'opzione backupdevicetype è impostata su tape.
  • [ @subscriptionlsn= ] subscriptionlsn
    Solo per uso interno.
  • [ @subscriptionstreams= ] subscriptionstreams
    Numero di connessioni consentite per agente di distribuzione per l'applicazione in parallelo di modifiche a un Sottoscrittore pur avvalendosi di numerose funzionalità transazionali caratteristiche dell'utilizzo di 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

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 protezione 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 parametro pre_creation_cmd uguale a 3 (troncamento).
  • Pubblicazioni in cui si è cercato 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 l'opzione allow_queued_tran è impostata su true, ovvero è consentito l'inserimento in coda delle modifiche apportate nel Sottoscrittore fino a quando è 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 in tale colonna vengono inviate al Sottoscrittore. Nel Sottoscrittore viene quindi generato e aggiornato il valore della colonna timestamp. Nel caso di un Sottoscrittore ODBC/OLE DB, la stored procedure sp_addsubscription ha esito negativo se si esegue una sottoscrizione di una pubblicazione la cui opzione allow_queued_tran è impostata su true e contenente articoli che includono colonne timestamp.

Una sottoscrizione che 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.

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.

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

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

Vedere anche

Riferimento

sp_addpushsubscription_agent (Transact-SQL)
sp_changesubstatus (Transact-SQL)
sp_dropsubscription (Transact-SQL)
sp_helpsubscription (Transact-SQL)
Stored procedure di sistema (Transact-SQL)

Altre risorse

Procedura: Creazione di una sottoscrizione push (programmazione Transact-SQL della replica)
How to: Create a Subscription for a Non-SQL Server Subscriber (Replication Transact-SQL Programming)
Sottoscrizione delle pubblicazioni

Guida in linea e informazioni

Assistenza su SQL Server 2005