Aggiunta ed eliminazione di articoli a e da pubblicazioni esistentiAdd Articles to and Drop Articles from Existing Publications

Dopo la creazione di una pubblicazione, è possibile aggiungere ed eliminare articoli.After a publication is created, it is possible to add and drop articles. Gli articoli possono essere aggiunti in qualsiasi momento, ma le azioni necessarie per eliminarli dipendono dal tipo di replica e dal momento in cui avviene l'eliminazione.Articles can be added at any time, but the actions required for dropping articles depend on the type of replication and when the article is dropped.

aggiunta di articoliAdding Articles

L'aggiunta di un articolo comporta l'aggiunta dell'articolo alla pubblicazione, la creazione di un nuovo snapshot per la pubblicazione e la sincronizzazione della sottoscrizione per applicare lo schema e i dati per il nuovo articolo.Adding an article involves: adding the article to the publication; creating a new snapshot for the publication; synchronizing the subscription to apply the schema and data for the new article.

Nota

Se in una pubblicazione di tipo merge si aggiunge un nuovo articolo dal quale dipende un articolo esistente, è necessario specificare l'ordine di elaborazione dei due articoli tramite il parametro @processing_order di sp_addmergearticle e sp_changemergearticle.If you add an article to a merge publication and an existing article depends on the new article, you must specify a processing order for both articles using the @processing_order parameter of sp_addmergearticle and sp_changemergearticle. Si consideri lo scenario seguente: viene pubblicata una tabella, ma non viene pubblicata una funzione a cui fa riferimento la tabella.Consider the following scenario: you publish a table but you do not publish a function that the table references. Se non si pubblica la funzione, la tabella non può essere creata nel Sottoscrittore.If you do not publish the function, the table cannot be created at the Subscriber. Quando si aggiunge la funzione alla pubblicazione, specificare un valore 1 per il parametro @processing_order di sp_addmergearticlee un valore 2 per il parametro @processing_order di sp_changemergearticle, indicando il nome della tabella per il parametro @article.When you add the function to the publication: specify a value of 1 for the @processing_order parameter of sp_addmergearticle; and specify a value of 2 for the @processing_order parameter of sp_changemergearticle, specifying the table name for the parameter @article. Questo ordine di elaborazione consente di creare la funzione nel Sottoscrittore prima della tabella dipendente.This processing order ensures that you create the function at the Subscriber before the table that depends on it. È possibile utilizzare numeri diversi per ogni articolo, purché il numero per la funzione sia inferiore a quello per la tabella.You can use different numbers for each article, as long as the number for the function is lower than the number for the table.

  1. Aggiungere uno o più articoli tramite uno dei metodi seguenti:Add one or more articles through one of the following methods:

  2. Dopo avere aggiunto un articolo a una pubblicazione, è necessario creare un nuovo snapshot per la pubblicazione. Nel caso si tratti di una pubblicazione di tipo merge con filtri con parametri, sarà necessario creare tutte le partizioni.After adding an article to a publication, you must create a new snapshot for the publication (and all partitions if it is a merge publication with parameterized filters). Tramite l'agente di distribuzione o l'agente di merge vengono quindi copiati lo schema e i dati per il nuovo articolo nel Sottoscrittore, senza reinizializzare l'intera pubblicazione.The Distribution Agent or Merge Agent then copies the schema and data for the new article to the Subscriber (it does not reinitialize the entire publication).

  3. Dopo la creazione dello snapshot, sincronizzare la sottoscrizione per copiare lo schema e i dati per il nuovo articolo.After the snapshot is created, synchronize the subscription to copy the schema and data for the new article.

rimozione di articoliDropping Articles

Gli articoli possono essere eliminati da una pubblicazione in qualsiasi momento, ma è necessario tenere in considerazione i comportamenti seguenti:Articles can be dropped from a publication at any time, but you must take into account the following behaviors:

  • L'eliminazione di un articolo da una pubblicazione non comporta la rimozione dell'oggetto dal database di pubblicazione o dell'oggetto corrispondente dal database di sottoscrizione.Dropping an article from a publication does not remove the object from the publication database or the corresponding object from the subscription database. Usare DROP <Oggetto> per rimuovere questi oggetti, se necessario.Use DROP <Object> to remove these objects if necessary. Quando si elimina un articolo correlato ad altri articoli pubblicati tramite vincoli di chiave esterna, è consigliabile eliminare la tabella nel Sottoscrittore manualmente oppure eseguendo uno script su richiesta: specificare uno script che includa le istruzioni DROP <Oggetto> appropriate.When you drop an article that is related to other published articles through foreign key constraints, we recommend that you drop the table at the Subscriber manually or by using on-demand script execution: specify a script that includes the appropriate DROP <Object> statements. Per altre informazioni, vedere Eseguire script durante la sincronizzazione (programmazione Transact-SQL della replica).For more information, see Execute Scripts During Synchronization (Replication Transact-SQL Programming).

  • Per pubblicazioni di tipo merge con un livello di compatibilità di 90RTM o superiore, gli articoli possono essere eliminati in qualsiasi momento, ma è necessario un nuovo snapshot.For merge publications with a compatibility level of 90RTM or higher, articles can be dropped at any time, but a new snapshot is required. Inoltre:Additionally:

    • Se un articolo è un articolo padre in una relazione tra record logici o filtri join, è necessario che prima vengano eliminate le relazioni e di conseguenza sarà necessario eseguire una reinizializzazione.If an article is a parent article in a join filter or logical record relationship, the relationships must be dropped first, which requires reinitialization.

    • Se un articolo ha l'ultimo filtro con parametri in una pubblicazione, è necessario reinizializzare le sottoscrizioni.If an article has the last parameterized filter in a publication, subscriptions must be reinitialized.

  • Per pubblicazioni di tipo merge con un livello di compatibilità inferiore a 90RTM, gli articoli possono essere eliminati senza particolari considerazioni prima della sincronizzazione iniziale delle sottoscrizioni.For merge publications with a compatibility level lower than 90RTM, articles can be dropped with no special considerations prior to the initial synchronization of subscriptions. Se un articolo viene eliminato dopo la sincronizzazione di una o più sottoscrizioni, è necessario che le sottoscrizioni vengano eliminate, ricreate e sincronizzate.If an article is dropped after one or more subscriptions is synchronized, the subscriptions must be dropped, re-created, and synchronized.

  • Per le pubblicazioni snapshot o transazionali, gli articoli possono essere eliminati senza particolari considerazioni prima della creazione delle sottoscrizioni.For snapshot or transactional publications, articles can be dropped with no special considerations prior to subscriptions being created. Se un articolo viene eliminato dopo la creazione di una o più sottoscrizioni, è necessario che le sottoscrizioni vengano eliminate, ricreate e sincronizzate.If an article is dropped after one or more subscriptions is created, the subscriptions must be dropped, recreated, and synchronized. Per altre informazioni sull'eliminazione delle sottoscrizioni, vedere Sottoscrivere le pubblicazioni e sp_dropsubscription (Transact-SQL).For more information about dropping subscriptions, see Subscribe to Publications and sp_dropsubscription (Transact-SQL). sp_dropsubscription consente all'utente di eliminare un solo articolo dalla sottoscrizione anziché la sottoscrizione intera.sp_dropsubscription allows you to drop a single article from the subscription rather than the entire subscription.

  1. L'eliminazione di un articolo da una pubblicazione implica l'eliminazione dell'articolo e la creazione di un nuovo snapshot per la pubblicazione.Dropping an article from a publication involves dropping the article and creating a new snapshot for the publication. Se si elimina un articolo, lo snapshot corrente non è più valido ed è perciò necessario creare un nuovo snapshot.Dropping an article invalidates the current snapshot; therefore a new snapshot must be created.

  2. Dopo avere eliminato un articolo da una pubblicazione, è necessario creare un nuovo snapshot per la pubblicazione. Nel caso si tratti di una pubblicazione di tipo merge con filtri con parametri, sarà necessario creare tutte le partizioni.After dropping an article from a publication, you must create a new snapshot for the publication (and all partitions if it is a merge publication with parameterized filters).

    Come evidenziato sopra, in alcuni casi l'eliminazione di un articolo richiede che le sottoscrizioni vengano eliminate, ricreate e quindi sincronizzate.As noted above, in some cases dropping an article requires subscriptions to be dropped, recreated, and then synchronized. Per altre informazioni, vedere Sottoscrivere le pubblicazioni e Sincronizzare i dati.For more information, see Subscribe to Publications and Synchronize Data.

    Nota

    SQL Server 2014SQL Server 2014 Service Pack 2 o versione successiva e SQL Server 2016SQL Server 2016 Service Pack 1 o versione successiva supportano l'eliminazione di un tabella mediante il comando DLL DROP TABLE per gli articoli inclusi in una replica transazionale. SQL Server 2014SQL Server 2014 Service Pack 2 or above and SQL Server 2016SQL Server 2016 Service Pack 1 or above support dropping a table using DROP TABLE DLL command for articles participating in Transactional Replication. Se il comando DLL DROP TABLE è supportato dalla pubblicazione, l'operazione DROP TABLE eliminerà la tabella dalla pubblicazione e dal database.If a DROP TABLE DDL is supported by the publication(s), then the DROP TABLE operation will drop the table from the publication and the database. L'agente di lettura log eseguirà un comando di pulizia per il database di distribuzione contenente la tabella eliminata ed eseguirà la pulizia dei metadati del server di pubblicazione.The log reader agent will post a cleanup command for the distribution database of the dropped table and do the cleanup of the publisher metadata. Se l'agente di lettura log non elabora tutti i record del log che fanno riferimento alla tabella eliminata, i nuovi comandi associati a tale tabella verranno ignorati.If the log reader hasn't processed all the log records that refer to the dropped table, then it will ignore new commands that are associated with the dropped table. I record già elaborati verranno recapitati ai database di distribuzione.Already processed records will be delivered to distribution database. Possono essere applicati al database Sottoscrittore se l'agente di distribuzione li elabora prima che l'agente di lettura log esegua la pulizia degli articoli obsoleti (eliminati).They may be applied on Subscriber database if the Distribution Agent processes them before Log Reader cleans up the obsolete (dropped) article(s). L'impostazione default per tutte le pubblicazioni di replica transazionale non prevede il supporto del comando DLL DROP TABLE.The default setting for all transactional replication publications is to not support DROP TABLE DLL. L'articolo KB 3170123 contiene altri dettagli relativi a questo miglioramento.KB 3170123 has more details about this improvement.

Vedere ancheSee Also

Pubblicare dati e oggetti di database Publish Data and Database Objects
Reinizializzare le sottoscrizioni Reinitialize Subscriptions
Apportare modifiche allo schema nei database di pubblicazione Make Schema Changes on Publication Databases