Condividi tramite


sp_addpublication (Transact-SQL)

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

Crea una pubblicazione snapshot o transazionale. Questa stored procedure viene eseguita nel database di pubblicazione del server di pubblicazione.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

sp_addpublication
    [ @publication = ] N'publication'
    [ , [ @taskid = ] taskid ]
    [ , [ @restricted = ] N'restricted' ]
    [ , [ @sync_method = ] N'sync_method' ]
    [ , [ @repl_freq = ] N'repl_freq' ]
    [ , [ @description = ] N'description' ]
    [ , [ @status = ] N'status' ]
    [ , [ @independent_agent = ] N'independent_agent' ]
    [ , [ @immediate_sync = ] N'immediate_sync' ]
    [ , [ @enabled_for_internet = ] N'enabled_for_internet' ]
    [ , [ @allow_push = ] N'allow_push' ]
    [ , [ @allow_pull = ] N'allow_pull' ]
    [ , [ @allow_anonymous = ] N'allow_anonymous' ]
    [ , [ @allow_sync_tran = ] N'allow_sync_tran' ]
    [ , [ @autogen_sync_procs = ] N'autogen_sync_procs' ]
    [ , [ @retention = ] retention ]
    [ , [ @allow_queued_tran = ] N'allow_queued_tran' ]
    [ , [ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder' ]
    [ , [ @alt_snapshot_folder = ] N'alt_snapshot_folder' ]
    [ , [ @pre_snapshot_script = ] N'pre_snapshot_script' ]
    [ , [ @post_snapshot_script = ] N'post_snapshot_script' ]
    [ , [ @compress_snapshot = ] N'compress_snapshot' ]
    [ , [ @ftp_address = ] N'ftp_address' ]
    [ , [ @ftp_port = ] ftp_port ]
    [ , [ @ftp_subdirectory = ] N'ftp_subdirectory' ]
    [ , [ @ftp_login = ] N'ftp_login' ]
    [ , [ @ftp_password = ] N'ftp_password' ]
    [ , [ @allow_dts = ] N'allow_dts' ]
    [ , [ @allow_subscription_copy = ] N'allow_subscription_copy' ]
    [ , [ @conflict_policy = ] N'conflict_policy' ]
    [ , [ @centralized_conflicts = ] N'centralized_conflicts' ]
    [ , [ @conflict_retention = ] conflict_retention ]
    [ , [ @queue_type = ] N'queue_type' ]
    [ , [ @add_to_active_directory = ] N'add_to_active_directory' ]
    [ , [ @logreader_job_name = ] N'logreader_job_name' ]
    [ , [ @qreader_job_name = ] N'qreader_job_name' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @allow_initialize_from_backup = ] N'allow_initialize_from_backup' ]
    [ , [ @replicate_ddl = ] replicate_ddl ]
    [ , [ @enabled_for_p2p = ] N'enabled_for_p2p' ]
    [ , [ @publish_local_changes_only = ] N'publish_local_changes_only' ]
    [ , [ @enabled_for_het_sub = ] N'enabled_for_het_sub' ]
    [ , [ @p2p_conflictdetection = ] N'p2p_conflictdetection' ]
    [ , [ @p2p_originator_id = ] p2p_originator_id ]
    [ , [ @p2p_continue_onconflict = ] N'p2p_continue_onconflict' ]
    [ , [ @allow_partition_switch = ] N'allow_partition_switch' ]
    [ , [ @replicate_partition_switch = ] N'replicate_partition_switch' ]
    [ , [ @allow_drop = ] N'allow_drop' ]
    [ , [ @p2p_conflictdetection_policy = ] N'p2p_conflictdetection_policy' ]
[ ; ]

Argomenti

[ @publication = ] N'publication'

Nome della pubblicazione da creare. @publication è sysname, senza impostazione predefinita. Il nome deve essere univoco all'interno del database.

[ @taskid = ] taskid

Supportato solo per compatibilità con le versioni precedenti; usare sp_addpublication_snapshot (Transact-SQL).

[ @restricted = ] N'restricted'

Supportato solo per compatibilità con le versioni precedenti; usare default_access.

[ @sync_method = ] N'sync_method'

Modalità di sincronizzazione. @sync_method è nvarchar(40)e può essere uno dei valori seguenti.

Valore Descrizione
native 1 Genera l'output in modalità nativa del programma per la copia bulk per tutte le tabelle.
character Genera l'output in modalità carattere del programma per la copia bulk per tutte le tabelle. Nota: per un server di pubblicazione Oracle è character valido solo per la replica snapshot.
concurrent 1 Produce l'output del programma di copia bulk in modalità nativa di tutte le tabelle, ma non blocca le tabelle durante lo snapshot. Questo valore è supportato solo per pubblicazioni transazionali.
concurrent_c Produce l'output del programma di copia bulk in modalità carattere di tutte le tabelle, ma non blocca le tabelle durante lo snapshot. Questo valore è supportato solo per pubblicazioni transazionali.
database snapshot Genera output del programma in modalità nativa per la copia bulk di tutte le tabelle da uno snapshot del database. Gli snapshot del database non sono disponibili in ogni edizione di SQL Server. Per un elenco delle funzionalità supportate dalle varie edizioni di SQL Server, vedere Edizioni e funzionalità supportate di SQL Server 2022.
database snapshot character Genera output del programma in modalità carattere per la copia bulk di tutte le tabelle da uno snapshot del database. Gli snapshot del database non sono disponibili in ogni edizione di SQL Server. Per un elenco delle funzionalità supportate dalle varie edizioni di SQL Server, vedere Edizioni e funzionalità supportate di SQL Server 2022.
NULL (predefinito) L'impostazione predefinita è native per i server di pubblicazione di SQL Server. Per i server di pubblicazione non SQL Server, l'impostazione predefinita character è quando il valore di @repl_freq è Snapshot e concurrent_c per tutti gli altri casi.

1 Non supportato per i server di pubblicazione Oracle.

[ @repl_freq = ] N'repl_freq'

Il tipo di frequenza di replica, @repl_freq è nvarchar(10)e può essere uno dei valori seguenti.

Valore Descrizione
continuous (predefinito) L'agente di lettura log viene eseguito continuamente. Per i server di pubblicazione non SQL Server, è necessario che @sync_method essere impostato su concurrent_c.
snapshot L'agente di lettura log viene eseguito in base a una pianificazione. Per i server di pubblicazione non SQL Server, è necessario che @sync_method essere impostato su character.

[ @description = ] N'description'

Descrizione facoltativa per la pubblicazione. @description è nvarchar(255), con il valore predefinito NULL.

[ @status = ] N'status'

Specifica se i dati della pubblicazione sono disponibili. @status è nvarchar(8)e può essere uno dei valori seguenti.

Valore Descrizione
active I dati della pubblicazione risultano immediatamente disponibili per i Sottoscrittori.
inactive (predefinito) I dati della pubblicazione non sono disponibili per i Sottoscrittori quando la pubblicazione viene creata per la prima volta(possono sottoscrivere, ma le sottoscrizioni non vengono elaborate).

Non supportato per i server di pubblicazione Oracle.

[ @independent_agent = ] N'independent_agent'

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

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

[ @immediate_sync = ] N'immediate_sync'

Specifica se i file di sincronizzazione della pubblicazione vengono creati a ogni esecuzione dell'agente snapshot. @immediate_sync è nvarchar(5), con il valore predefinito false.

Se true, i file di sincronizzazione vengono creati o ricreati ogni volta che viene eseguita la agente di snapshot. Se l'esecuzione dell'agente snapshot viene completata prima della creazione della sottoscrizione, i Sottoscrittori possono ricevere i file di sincronizzazione immediatamente. Le nuove sottoscrizioni ricevono i file di sottoscrizione più recenti generati dall'ultima esecuzione dell'agente snapshot. @independent_agent deve essere true affinché @immediate_sync sia true. Se false, i file di sincronizzazione vengono creati solo se sono presenti nuove sottoscrizioni. È necessario chiamare sp_addsubscription per ogni sottoscrizione quando si aggiunge in modo incrementale un nuovo articolo a una pubblicazione esistente. I sottoscrittori non possono ricevere i file di sincronizzazione dopo la sottoscrizione fino all'avvio e al completamento delle agente di snapshot.

[ @enabled_for_internet = ] N'enabled_for_internet'

Specifica se la pubblicazione è abilitata per Internet e determina se è possibile utilizzare FTP per il trasferimento dei file di snapshot in un Sottoscrittore. @enabled_for_internet è nvarchar(5), con il valore predefinito false. Se true, i file di sincronizzazione per la pubblicazione vengono inseriti nella C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL.x\Repldata\Ftp directory . L'utente deve creare la Ftp directory.

[ @allow_push = ] N'allow_push'

Specifica se è consentito creare sottoscrizioni push per la pubblicazione specificata. @allow_push è nvarchar(5), con un valore predefinito true, che consente sottoscrizioni push nella pubblicazione.

[ @allow_pull = ] N'allow_pull'

Specifica se è consentito creare sottoscrizioni pull per la pubblicazione specificata. @allow_pull è nvarchar(5), con il valore predefinito false. Se false, le sottoscrizioni pull non sono consentite nella pubblicazione.

[ @allow_anonymous = ] N'allow_anonymous'

Specifica se è consentito creare sottoscrizioni anonime per la pubblicazione specificata. @allow_anonymous è nvarchar(5), con il valore predefinito false. Se true, @immediate_sync deve essere impostato anche su true. Se false, le sottoscrizioni anonime non sono consentite nella pubblicazione.

[ @allow_sync_tran = ] N'allow_sync_tran'

Specifica se le sottoscrizioni ad aggiornamento immediato sono consentite nella pubblicazione. @allow_sync_tran è nvarchar(5), con il valore predefinito false. true non è supportato per i server di pubblicazione Oracle.

[ @autogen_sync_procs = ] N'autogen_sync_procs'

Specifica se la stored procedure di sincronizzazione per sottoscrizioni aggiornabili viene generata nel server di pubblicazione. @autogen_sync_procs è nvarchar(5) e può essere uno dei valori seguenti.

Valore Descrizione
true Questo valore viene impostato automaticamente quando sono abilitate le sottoscrizioni aggiornabili.
false Impostare automaticamente quando si aggiornano le sottoscrizioni non è abilitato o per i server di pubblicazione Oracle.
NULL (predefinito) L'impostazione predefinita è true quando l'aggiornamento delle sottoscrizioni è abilitato e a false quando l'aggiornamento delle sottoscrizioni non è abilitato.

Nota

Il valore fornito dall'utente per @autogen_sync_procsverrà sottoposto a override a seconda dei valori specificati per @allow_queued_tran e @allow_sync_tran.

[ @retention = ] conservazione

Periodo di conservazione in ore per l'attività della sottoscrizione. @retention è int, con il valore predefinito 336. Se una sottoscrizione non è attiva entro il periodo di conservazione, scade e viene rimossa. Il valore di questo parametro può essere maggiore del periodo di memorizzazione massimo del database di distribuzione utilizzato dal server di pubblicazione. Se 0, le sottoscrizioni note alla pubblicazione non scadono mai e verranno rimosse dall'agente di pulizia delle sottoscrizioni scadute.

[ @allow_queued_tran = ] N'allow_queued_tran'

Abilita o disabilita l'accodamento delle modifiche nel Sottoscrittore fino a quando non è possibile applicarle nel server di pubblicazione. @allow_queued_tran è nvarchar(5), con il valore predefinito false.

  • Se false, le modifiche nel Sottoscrittore non vengono accodate.
  • true non è supportato per i server di pubblicazione Oracle.

[ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder'

Specifica se i file di snapshot sono archiviati nella cartella predefinita. @snapshot_in_defaultfolder è nvarchar(5), con il valore predefinito true.

  • Se true, i file di snapshot sono disponibili nella cartella predefinita.
  • Se false, i file di snapshot sono stati archiviati nel percorso alternativo specificato da @alt_snapshot_folder.

Le posizioni alternative possono essere un altro server, un'unità di rete oppure un supporto rimovibile, ad esempio un CD o un disco rimovibile. È inoltre possibile archiviare i file di snapshot in un sito FTP in modo che possano essere successivamente recuperati dal Sottoscrittore. Questo parametro può essere true e avere ancora una posizione nel parametro @alt_snapshot_folder . Tale combinazione indica che i file di snapshot vengono archiviati sia nella posizione predefinita che in posizioni alternative.

[ @alt_snapshot_folder = ] N'alt_snapshot_folder'

Specifica la posizione della cartella alternativa per lo snapshot. @alt_snapshot_folder è nvarchar(255), con il valore predefinito NULL.

[ @pre_snapshot_script = ] N'pre_snapshot_script'

Specifica un puntatore a un percorso di file .sql . @pre_snapshot_script è nvarchar(255), con il valore predefinito NULL. L'agente di distribuzione esegue lo script pre-snapshot prima dell'esecuzione di tutti gli script di oggetti replicati durante l'applicazione di uno snapshot in un Sottoscrittore. Lo script viene eseguito nel contesto di sicurezza utilizzato dall'agente di distribuzione per la connessione al database di sottoscrizione.

[ @post_snapshot_script = ] N'post_snapshot_script'

Specifica un puntatore a un percorso di .sql file. @post_snapshot_script è nvarchar(255), con un valore predefinito .NULL L'agente di distribuzione esegue lo script post-snapshot dopo l'applicazione di tutti gli altri dati e script di oggetti replicati durante una sincronizzazione iniziale. Lo script viene eseguito nel contesto di sicurezza utilizzato dall'agente di distribuzione per la connessione al database di sottoscrizione.

[ @compress_snapshot = ] N'compress_snapshot'

Specifica che lo snapshot scritto nel percorso di @alt_snapshot_folder deve essere compresso nel formato CAB Microsoft. @compress_snapshot è nvarchar(5), con il valore predefinito false.

  • false specifica che lo snapshot non è compresso.
  • true specifica che lo snapshot è compresso.

I file di snapshot di dimensioni superiori a 2 gigabyte (GB) non possono essere compressi. I file di snapshot compressi vengono decompressi nella posizione in cui viene eseguito l'agente di distribuzione. Per le sottoscrizioni pull in genere vengono utilizzati snapshot compressi in modo che i file vengano decompressi nel Sottoscrittore. Lo snapshot nella cartella predefinita non può essere compresso.

[ @ftp_address = ] N'ftp_address'

Indirizzo di rete del servizio FTP per il server di distribuzione. @ftp_address è sysname, con un valore predefinito .NULL Specifica la posizione in cui i file di snapshot della pubblicazione possono essere prelevati dall'agente di distribuzione o di merge di un Sottoscrittore. Poiché questa proprietà è archiviata per ogni pubblicazione, ogni pubblicazione può avere un @ftp_address diverso. La pubblicazione deve supportare la propagazione di snapshot tramite FTP.

[ @ftp_port = ] ftp_port

Numero di porta del servizio FTP per il server di distribuzione. @ftp_port è int, con il valore predefinito 21. Specifica la posizione dei file di snapshot della pubblicazione, dove i file possono essere prelevati dall'agente di distribuzione o di merge di un Sottoscrittore. Poiché questa proprietà è archiviata per ogni pubblicazione, ogni pubblicazione può avere un proprio @ftp_port.

[ @ftp_subdirectory = ] N'ftp_subdirectory'

Specifica la posizione in cui sono disponibili i file di snapshot per il agente di distribuzione o agente di merge del sottoscrittore se la pubblicazione supporta la propagazione di snapshot tramite FTP. @ftp_subdirectory è nvarchar(255), con un valore predefinito .NULL Poiché questa proprietà è archiviata per ogni pubblicazione, ogni pubblicazione può avere un proprio @ftp_subdirctory o scegliere di non avere alcuna sottodirectory, indicata con un NULL valore.

[ @ftp_login = ] N'ftp_login'

Nome utente utilizzato per la connessione al servizio FTP. @ftp_login è sysname, con un valore predefinito .anonymous

[ @ftp_password = ] N'ftp_password'

Password dell'utente utilizzata per la connessione al servizio FTP. @ftp_password è sysname, con un valore predefinito .NULL

[ @allow_dts = ] N'allow_dts'

Specifica che la pubblicazione supporta le trasformazioni di dati. Quando si crea una sottoscrizione, è possibile specificare un pacchetto DTS. @allow_dts è nvarchar(5), con un valore predefinito false, che non consente trasformazioni DTS. Quando @allow_dts è true, @sync_method deve essere impostato su character o concurrent_c.

true non è supportato per i server di pubblicazione Oracle.

[ @allow_subscription_copy = ] N'allow_subscription_copy'

Abilita o disabilita la funzione di copia dei database di sottoscrizione che sottoscrivono la pubblicazione. @allow_subscription_copy è nvarchar(5), con il valore predefinito false.

[ @conflict_policy = ] N'conflict_policy'

Specifica i criteri di risoluzione dei conflitti adottati quando viene utilizzata l'opzione per Sottoscrittori ad aggiornamento in coda. @conflict_policy è nvarchar(100)e può essere uno dei valori seguenti.

Valore Descrizione
pub wins Prevale il server di pubblicazione.
sub reinit Reinizializzare la sottoscrizione.
sub wins Prevale il Sottoscrittore.
NULL (predefinito) Se NULLe la pubblicazione è una pubblicazione snapshot, il criterio predefinito diventa sub reinit. Se NULL e la pubblicazione non è una pubblicazione snapshot, il valore predefinito diventa pub wins.

Non supportato per i server di pubblicazione Oracle.

[ @centralized_conflicts = ] N'centralized_conflicts'

Specifica se i record dei conflitti vengono archiviati nel server di pubblicazione. @centralized_conflicts è nvarchar(5), con il valore predefinito NULL.

  • Se true, i record in conflitto vengono archiviati nel server di pubblicazione.
  • Se false, i record in conflitto vengono archiviati sia nel server di pubblicazione che nel sottoscrittore che hanno causato il conflitto.

Non supportato per i server di pubblicazione Oracle.

[ @conflict_retention = ] conflict_retention

Specifica il periodo di memorizzazione dei conflitti, espresso in giorni. Si tratta del periodo di tempo durante il quale i metadati dei conflitti rimangono archiviati per la replica transazionale peer-to-peer e le sottoscrizioni ad aggiornamento in coda. @conflict_retention è int, con il valore predefinito 14.

Non supportato per i server di pubblicazione Oracle.

[ @queue_type = ] N'queue_type'

Specifica il tipo di coda da utilizzare. @queue_type è nvarchar(10)e può essere uno di questi valori.

Valore Descrizione
sql Usare SQL Server per archiviare le transazioni.
NULL (predefinito) L'impostazione predefinita è sql, che specifica l'uso di SQL Server per archiviare le transazioni.

Nota

Il supporto per l'uso di Accodamento messaggi Microsoft non è più disponibile. Se si specifica un valore di msmq verrà generato un avviso, la replica imposta automaticamente il valore su sql.

Non supportato per i server di pubblicazione Oracle.

[ @add_to_active_directory = ] N'add_to_active_directory'

Questo parametro è deprecato ed è supportato solo per la compatibilità con le versioni precedenti degli script. Non è più possibile aggiungere informazioni sulla pubblicazione a Microsoft Active Directory.

[ @logreader_job_name = ] N'logreader_job_name'

Nome di un processo dell'agente esistente. @logreader_job_name è sysname, con un valore predefinito .NULL Questo parametro viene specificato solo quando l'agente di lettura log usa un processo esistente invece di crearne uno nuovo.

[ @qreader_job_name = ] N'qreader_job_name'

Nome di un processo dell'agente esistente. @qreader_job_name è sysname, con il valore predefinito NULL. Questo parametro viene specificato solo quando l'agente di lettura coda usa un processo esistente invece di crearne uno nuovo.

[ @publisher = ] N'publisher'

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

@publisher non deve essere usato quando si aggiunge una pubblicazione a un server di pubblicazione di SQL Server.

[ @allow_initialize_from_backup = ] N'allow_initialize_from_backup'

Specifica se i Sottoscrittori possono inizializzare una sottoscrizione di questa pubblicazione da un backup anziché da uno snapshot iniziale. @allow_initialize_from_backup è nvarchar(5) e può essere uno dei valori seguenti:

Valore Descrizione
true Abilita l'inizializzazione da un backup.
false Disabilita l'inizializzazione da un backup.
NULL (predefinito) L'impostazione predefinita è true per una pubblicazione in una topologia di replica peer-to-peer e false per tutte le altre pubblicazioni.

Per altre informazioni, vedere Inizializzazione di una sottoscrizione transazionale senza uno snapshot.

Avviso

Per evitare la mancanza di dati del sottoscrittore, quando si usa sp_addpublication con @allow_initialize_from_backup = N'true', usare @immediate_sync = N'true'sempre .

[ @replicate_ddl = ] replicate_ddl

Indica se per la pubblicazione è supportata la replica dello schema. @replicate_ddl è int, con un valore predefinito per 1 i server di pubblicazione di SQL Server e 0 per i server di pubblicazione non SQL Server.

  • 1 indica che le istruzioni DDL (Data Definition Language) eseguite nel server di pubblicazione vengono replicate.
  • 0 indica che le istruzioni DDL non vengono replicate.

La replica dello schema non è supportata per i server di pubblicazione Oracle.

Per altre informazioni, vedere Apportare modifiche allo schema nei database di pubblicazione.

Il parametro @replicate_ddl viene rispettato quando un'istruzione DDL aggiunge una colonna. Il parametro @replicate_ddl viene ignorato quando un'istruzione DDL modifica o elimina una colonna per i motivi seguenti.

  • Quando una colonna viene eliminata, sysarticlecolumns deve essere aggiornata per impedire che le nuove istruzioni DML includano la colonna eliminata, causando l'esito negativo dell'agente di distribuzione. Il parametro @replicate_ddl viene ignorato perché la replica deve sempre replicare la modifica dello schema.

  • Quando una colonna viene modificata, è possibile che il tipo di dati di origine o il supporto dei valori Null siano stati modificati, causando la modifica di istruzioni DML che contengono un valore che potrebbe non essere compatibile con la tabella nel sottoscrittore. Tali istruzioni DML potrebbero determinare la mancata esecuzione dell'agente di distribuzione. Il parametro @replicate_ddl viene ignorato perché la replica deve sempre replicare la modifica dello schema.

  • Quando un'istruzione DDL aggiunge una nuova colonna, sysarticlecolumns non include la nuova colonna. Le istruzioni DML non tentano di replicare i dati per la nuova colonna. Il parametro viene rispettato perché la replica o la non replica di DDL è accettabile.

[ @enabled_for_p2p = ] N'enabled_for_p2p'

Consente di utilizzare la pubblicazione in una topologia di replica peer-to-peer. @enabled_for_p2p è nvarchar(5), con il valore predefinito false. true indica che la pubblicazione supporta la replica peer-to-peer. Quando si imposta @enabled_for_p2p su true, si applicano le restrizioni seguenti:

  • @allow_anonymous deve essere false.
  • @allow_dts deve essere false.
  • @allow_initialize_from_backup deve essere true.
  • @allow_queued_tran deve essere false.
  • @allow_sync_tran deve essere false.
  • @conflict_policy deve essere false.
  • @independent_agent deve essere true.
  • @repl_freq deve essere continuous.
  • @replicate_ddl deve essere 1.

Per altre informazioni, vedere Peer-to-Peer - Replica transazionale.

[ @publish_local_changes_only = ] N'publish_local_changes_only'

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

[ @enabled_for_het_sub = ] N'enabled_for_het_sub'

Consente alla pubblicazione di supportare sottoscrittori non SQL Server. @enabled_for_het_sub è nvarchar(5), con il valore predefinito false. Il valore indica true che la pubblicazione supporta sottoscrittori non SQL Server. Quando @enabled_for_het_sub è true, si applicano le restrizioni seguenti:

  • @allow_initialize_from_backup deve essere false.
  • @allow_push deve essere true.
  • @allow_queued_tran deve essere false.
  • @allow_subscription_copy deve essere false.
  • @allow_sync_tran deve essere false.
  • @autogen_sync_procs deve essere false.
  • @conflict_policy deve essere NULL.
  • @enabled_for_internet deve essere false.
  • @enabled_for_p2p deve essere false.
  • @ftp_address deve essere NULL.
  • @ftp_subdirectory deve essere NULL.
  • @ftp_password deve essere NULL.
  • @pre_snapshot_script deve essere NULL.
  • @post_snapshot_script deve essere NULL.
  • @replicate_ddl deve essere 0.
  • @qreader_job_name deve essere NULL.
  • @queue_type deve essere NULL.
  • @sync_method non può essere native o concurrent.

Per altre informazioni, vedere Non-SQL Server Subscribers.

[ @p2p_conflictdetection = ] N'p2p_conflictdetection'

Consente il rilevamento dei conflitti da parte dell'agente di distribuzione se la pubblicazione è abilitata per la replica peer-to-peer. @p2p_conflictdetection è nvarchar(5), con il valore predefinito false. Per altre informazioni, vedere Peer-to-Peer - Conflict Detection in Peer-to-Peer Replication.For more information, see Peer-to-Peer - Conflict Detection in Peer-to-Peer Replication.

[ @p2p_originator_id = ] p2p_originator_id

Specifica un ID per un nodo in una topologia peer-to-peer. @p2p_originator_id è int, con il valore predefinito NULL. Questo ID viene usato per il rilevamento dei conflitti se @p2p_conflictdetection è impostato su TRUE. Specificare un ID positivo diverso da zero che non è stato usato nella topologia. Per un elenco di ID usati, eseguire sp_help_peerconflictdetection.

[ @p2p_continue_onconflict = ] N'p2p_continue_onconflict'

Determina se l'agente di distribuzione continua a elaborare le modifiche dopo che è stato rilevato un conflitto. @p2p_continue_onconflict è nvarchar(5), con il valore predefinito false.

Attenzione

È consigliabile usare il valore predefinito di false. Quando questa opzione è impostata su true, il agente di distribuzione tenta di convergere i dati nella topologia applicando la riga in conflitto dal nodo con l'ID origine più alto. Questo metodo non garantisce la convergenza. Dopo il rilevamento di un conflitto, è necessario assicurarsi che la topologia sia coerente. Per altre informazioni, vedere "Gestione dei conflitti" in Peer-to-Peer - Rilevamento dei conflitti nella replica peer-to-peer.

[ @allow_partition_switch = ] N'allow_partition_switch'

Specifica se ALTER TABLE...SWITCH le istruzioni possono essere eseguite nel database pubblicato. @allow_partition_switch è nvarchar(5), con il valore predefinito false. Per altre informazioni, vedere Replicare tabelle e indici partizionati.

[ @replicate_partition_switch = ] N'replicate_partition_switch'

Specifica se ALTER TABLE...SWITCH le istruzioni eseguite sul database pubblicato devono essere replicate nei Sottoscrittori. @replicate_partition_switch è nvarchar(5), con il valore predefinito NULL. Questa opzione è valida solo se @allow_partition_switch è impostato su TRUE.

[ @allow_drop = ] N'allow_drop'

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

[ @p2p_conflictdetection_policy = ] N'p2p_conflictdetection_policy'

Si applica a: SQL Server 2019 (15.x) CU 13 e versioni successive.

@p2p_conflictdetection_policy è nvarchar(12)e può essere uno di questi valori:

Valore Descrizione
originatorid (impostazione predefinita) L'agente di distribuzione rileva il conflitto e decide il vincitore in base all'ID origine, se p2p_continue_onconflict = N'true'. In caso contrario, genera un errore.
lastwriter L'agente di distribuzione rileva il conflitto e decide il vincitore in base al valore datetime dell'ultimo writer se p2p_continue_onconflict = N'true'. In caso contrario, genera un errore.

Nota

Quando si specifica originatorid, il rilevamento dei conflitti è uguale a quello di SQL Server 2019 (15.x) CU 12 e versioni precedenti. Quando si specifica lastwriter, SQL Server consente la risoluzione automatica dei conflitti in base alla scrittura più recente.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Osservazioni:

sp_addpublication viene usato nella replica snapshot e nella replica transazionale.

Se esistono più pubblicazioni che pubblicano lo stesso oggetto di database, solo le pubblicazioni con un valore @replicate_ddl replicano 1 istruzioni ALTER FUNCTIONALTER TABLEALTER VIEWALTER PROCEDURE, e ALTER TRIGGER DDL. Tuttavia, un'istruzione ALTER TABLE DROP COLUMN DDL viene replicata da tutte le pubblicazioni che pubblicano la colonna eliminata.

Con la replica DDL abilitata (@replicate_ddl = 1) per una pubblicazione, per apportare modifiche DDL non replicate alla pubblicazione, sp_changepublication deve prima essere eseguita per impostare @replicate_ddl su .0 Dopo aver emesso le istruzioni DDL non replicate, sp_changepublication può essere eseguito di nuovo per riattivare la replica DDL.

Esempi

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. 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 @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksProductTran'; 
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- This should be passed at runtime.
SET @password = $(Password); 

-- Enable transactional or snapshot replication on the publication database.
EXEC sp_replicationdboption 
    @dbname=@publicationDB, 
    @optname=N'publish',
    @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Create a new transactional publication with the required properties. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_push = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;
GO

Autorizzazioni

Solo i membri del ruolo predefinito del server sysadmin o db_owner ruolo predefinito del database possono eseguire sp_addpublication. Gli account di accesso con autenticazione di Windows devono disporre di un account utente nel database che rappresenta il proprio account utente di Windows. Un account utente che rappresenta un gruppo di Windows non è sufficiente.