Condividi tramite


Aggiungere ed eliminare articoli in pubblicazioni esistenti

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

Dopo la creazione di una pubblicazione, è possibile aggiungere ed eliminare articoli. 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.

aggiunta di articoli

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.

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. Si consideri lo scenario seguente: viene pubblicata una tabella, ma non viene pubblicata una funzione a cui fa riferimento la tabella. Se non si pubblica la funzione, la tabella non può essere creata nel Sottoscrittore. 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. Questo ordine di elaborazione consente di creare la funzione nel Sottoscrittore prima della tabella dipendente. È possibile utilizzare numeri diversi per ogni articolo, purché il numero per la funzione sia inferiore a quello per la tabella.

  1. Aggiungere uno o più articoli tramite uno dei metodi seguenti:

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

  3. Dopo la creazione dello snapshot, sincronizzare la sottoscrizione per copiare lo schema e i dati per il nuovo articolo.

rimozione di articoli

Gli articoli possono essere eliminati da una pubblicazione in qualsiasi momento, ma è necessario tenere in considerazione i comportamenti seguenti:

  • 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. Usare DROP <Oggetto> per rimuovere questi oggetti, se necessario. 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. Per altre informazioni, vedere Eseguire script durante la sincronizzazione (programmazione Transact-SQL della replica).

  • 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. Inoltre:

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

    • Se un articolo ha l'ultimo filtro con parametri in una pubblicazione, è necessario reinizializzare le sottoscrizioni.

  • 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. Se un articolo viene eliminato dopo la sincronizzazione di una o più sottoscrizioni, è necessario che le sottoscrizioni vengano eliminate, ricreate e sincronizzate.

  • Per le pubblicazioni snapshot o transazionali, gli articoli possono essere eliminati senza particolari considerazioni prima della creazione delle sottoscrizioni. Se un articolo viene eliminato dopo la creazione di una o più sottoscrizioni, è necessario che le sottoscrizioni vengano eliminate, ricreate e sincronizzate. Per altre informazioni sull'eliminazione delle sottoscrizioni, vedere Sottoscrivere le pubblicazioni e sp_dropsubscription (Transact-SQL). sp_dropsubscription consente all'utente di eliminare un solo articolo dalla sottoscrizione anziché la sottoscrizione intera.

  1. L'eliminazione di un articolo da una pubblicazione implica l'eliminazione dell'articolo e la creazione di un nuovo snapshot per la pubblicazione. Se si elimina un articolo, lo snapshot corrente non è più valido ed è perciò necessario creare un nuovo snapshot.

  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.

Come evidenziato sopra, in alcuni casi l'eliminazione di un articolo richiede che le sottoscrizioni vengano eliminate, ricreate e quindi sincronizzate. Per altre informazioni, vedere Sottoscrivere le pubblicazioni e Sincronizzare i dati.

Nota

SQL Server 2014 (12.x) Service Pack 2 o versione successiva e SQL Server 2016 (13.x) Service Pack 1 o versione successiva supportano l'eliminazione di un tabella mediante il comando DDL DROP TABLE per gli articoli che partecipano alla replica transazionale. Se il comando DLL DROP TABLE è supportato dalla pubblicazione, l'operazione DROP TABLE eliminerà la tabella dalla pubblicazione e dal 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. 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. I record già elaborati verranno recapitati ai database di distribuzione. 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). L'impostazione default per tutte le pubblicazioni di replica transazionale non prevede il supporto del comando DDL DROP TABLE. L'articolo KB 3170123 contiene altri dettagli relativi a questo miglioramento.