Condividi tramite


Specificare le proprietà della replica di tipo merge

Questo argomento illustra come specificare varie proprietà per la replica di tipo merge.

Solo download

In questa sezione viene descritto come specificare che un articolo della tabella di merge è di sola download in SQL Server 2014 usando SQL Server Management Studio o Transact-SQL. Gli articoli di solo download sono progettati per le applicazioni i cui dati non vengono aggiornati nei Sottoscrittori. Per altre informazioni, vedere Ottimizzare le prestazioni della replica di tipo merge con gli articoli di solo download.

Limitazioni e restrizioni

  • Se si specifica che un articolo è di tipo solo download dopo l'inizializzazione delle sottoscrizioni, tutte le sottoscrizioni client a cui è stato inviato l'articolo devono essere reinizializzate. Non è necessario reinizializzare le sottoscrizioni server. Per altre informazioni sugli effetti delle modifiche delle proprietà, vedere Modifica delle proprietà di pubblicazioni e articoli.

Uso di SQL Server Management Studio

Specificare che un articolo è disponibile solo nella pagina Articoli della Creazione guidata nuova pubblicazione o nella scheda Proprietà della finestra di dialogo Proprietà articolo - <Articolo> . Questa finestra di dialogo è disponibile nella Creazione guidata nuova pubblicazione e nella finestra di dialogo Proprietà pubblicazione - <Pubblicazione> . Per altre informazioni sull'uso della creazione guidata e l'accesso alla finestra di dialogo, vedere Creare una pubblicazione e Visualizzare e modificare le proprietà della pubblicazione.

Per specificare che un articolo è di tipo solo download nella pagina Articoli

  • Selezionare una tabella nella pagina Articoli di Creazione guidata nuova pubblicazione e quindi selezionare la casella di controllo La tabella evidenziata è di tipo solo download.

Per specificare che un articolo è disponibile solo per il download nella scheda Proprietà della finestra di dialogo Proprietà articolo - <Articolo>

  1. Nella pagina Articoli della Creazione guidata nuova pubblicazione o nella finestra di dialogo Proprietà pubblicazione - <Pubblicazione> selezionare una tabella e quindi fare clic su Proprietà articolo.

  2. Fare clic su Imposta proprietà dell'articolo di tabelle evidenziato o su Imposta proprietà di tutti gli articoli di tabelle.

  3. Nella sezione Oggetto destinazione della scheda Proprietà della finestra di dialogo Proprietà articolo - <Articolo> specificare uno dei valori seguenti per Direzione sincronizzazione:

    • Solo download sul Sottoscrittore, non consentire modifiche del Sottoscrittore
    • Solo download sul Sottoscrittore, consenti modifiche del Sottoscrittore
  4. Se si è nella finestra di dialogo Proprietà pubblicazione - <Pubblicazione> , fare clic su OK per salvare e chiudere la finestra di dialogo.

Uso di Transact-SQL

Per specificare che un nuovo articolo di tabella di merge è di solo download

  1. Eseguire sp_addmergearticle, specificando il valore 1 or 2 per il parametro @subscriber_upload_options. I numeri corrispondono al comportamento seguente:

    • 0 : nessuna restrizione (valore predefinito). Le modifiche eseguite nel Sottoscrittore vengono caricate nel server di pubblicazione.

    • 1 : le modifiche sono consentite nel Sottoscrittore, ma non vengono caricate nel server di pubblicazione.

    • 2 : non è consentito apportare modifiche nel Sottoscrittore.

      Nota

      Se la tabella di origine di un articolo è già inclusa in un'altra pubblicazione, il valore di @subscriber_upload_options deve coincidere per entrambi gli articoli.

Per impostare il tipo di un articolo di tabella di merge esistente su solo download

  1. Per determinare se un articolo è di tipo solo download, eseguire sp_helpmergearticle. Si noti il valore di upload_options relativo all'articolo nel set di risultati.

  2. Se il valore restituito al passaggio 1 è 0, eseguire sp_changemergearticle, specificando il valore subscriber_upload_options per @property, il valore 1 per @force_invalidate_snapshot e @force_reinit_subscriptione il valore 1 o 2 per @value, che corrisponde al comportamento seguente:

    • 1 : le modifiche sono consentite nel Sottoscrittore, ma non vengono caricate nel server di pubblicazione.

    • 2 : non è consentito apportare modifiche nel Sottoscrittore.

      Nota

      Se la tabella di origine di un articolo è già inclusa in un'altra pubblicazione, il comportamento del solo download deve coincidere per entrambi gli articoli.

Risoluzione interattiva dei conflitti

La replica di Microsoft SQL Server offre un sistema di risoluzione interattivo che consente di risolvere i conflitti manualmente durante la sincronizzazione su richiesta in Gestione sincronizzazione di Microsoft Windows. Dopo l'abilitazione della risoluzione interattiva, risolvere interattivamente i conflitti durante la sincronizzazione utilizzando il sistema di risoluzione interattivo. Il sistema di risoluzione interattivo è disponibile tramite Gestione sincronizzazione di Microsoft Windows. Per altre informazioni, vedere Synchronize a Subscription Using Windows Synchronization Manager (Windows Synchronization Manager).

Consigli

  • Se si esegue una sincronizzazione all'esterno di Gestione sincronizzazione Microsoft Windows, ad esempio una sincronizzazione pianificata o su richiesta in SQL Server Management Studio o Monitoraggio replica, i conflitti vengono risolti automaticamente senza l'intervento dell'utente, utilizzando la risoluzione dei conflitti predefinita specificata per l'articolo. Per altre informazioni, vedere Interactive Conflict Resolution.

Uso di SQL Server Management Studio

Abilitare la risoluzione interattiva dei conflitti per un articolo

  1. Nella pagina Articoli della Creazione guidata nuova pubblicazione o nella finestra di dialogo Proprietà pubblicazione - <Pubblicazione> selezionare una tabella. Per altre informazioni sull'uso della creazione guidata e l'accesso alla finestra di dialogo, vedere Creare una pubblicazione e Visualizzare e modificare le proprietà della pubblicazione.
  2. Fare clic su Proprietà articolo, quindi su Imposta proprietà dell'articolo di tabella evidenziato o su Imposta proprietà di tutti gli articoli di tabelle.
  3. Nella pagina Proprietà articolo - <Proprietà articolo> o Articolo - <ArticleType> fare clic sulla scheda Resolver .
  4. Selezionare Consenti la risoluzione interattiva dei conflitti nel Sottoscrittore durante la sincronizzazione su richiesta.
  5. Fare clic su OK.
  6. Se si è nella finestra di dialogo Proprietà pubblicazione - <Pubblicazione> , fare clic su OK per salvare e chiudere la finestra di dialogo.

Per specificare che in una sottoscrizione dovrà essere utilizzata la risoluzione interattiva dei conflitti

  1. Nella finestra di dialogo Proprietà sottoscrizione - <Sottoscrittore>: <SubscriptionDatabase> specificare il valore True per l'opzione Risolvi conflitti in modo interattivo . Per ulteriori informazioni sull'accesso a questa finestra di dialogo, vedere View and Modify Push Subscription Properties e View and Modify Pull Subscription Properties.
  2. Fare clic su OK.

Uso di Transact-SQL

È possibile impostare a livello di programmazione un Sottoscrittore in modo che utilizzi questa interfaccia grafica per risolvere conflitti relativi agli articoli quando viene creata una sottoscrizione pull di una pubblicazione di tipo merge. Nel sistema di risoluzione interattivo verranno visualizzati solo i conflitti relativi ad articoli che supportano questa opzione.

Creare una sottoscrizione pull di tipo merge che usa il sistema di risoluzione interattivo

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_helpmergearticle, specificando @publication. Notare il valore di allow_interactive_resolver relativo a ogni articolo nel set di risultati per il quale verrà utilizzato il sistema di risoluzione interattivo.

    • Se questo valore è 1, il sistema di risoluzione interattivo verrà utilizzato.
    • Se questo valore è 0, è prima necessario attivare il sistema di risoluzione interattivo per ogni articolo. A tale scopo, eseguire sp_changemergearticle, specificando @publication, @article, il valore allow_interactive_resolver per @propertye il valore true per @value.
  2. Nel database di sottoscrizione del Sottoscrittore eseguire sp_addmergepullsubscription. Per altre informazioni, vedere Creazione di una sottoscrizione pull.

  3. Nel database di sottoscrizione del Sottoscrittore eseguire sp_addmergepullsubscription_agentspecificando i parametri seguenti:

    • @publisher, @publisher_db (database pubblicato) e @publication.
    • Il valore true per @enabled_for_syncmgr.
    • Il valore true per @use_interactive_resolver.
    • Le informazioni sull'account di sicurezza richieste dall'agente di merge. Per altre informazioni, vedere Creazione di una sottoscrizione pull.
  4. Nel database di pubblicazione del server di pubblicazione eseguire sp_addmergesubscription.

Definire un articolo che supporta il sistema di risoluzione interattivo

Nel database di pubblicazione del server di pubblicazione eseguire sp_addmergearticle. Specificare il nome della pubblicazione cui appartiene l'articolo per @publication, il nome dell'articolo per @article, l'oggetto di database da pubblicare per @source_objecte il valore true per @allow_interactive_resolver. Per altre informazioni, vedere definire un articolo.

Specificare il livello di rilevamento e risoluzione dei conflitti

Quando si sincronizza una sottoscrizione di una pubblicazione di tipo merge, la replica verifica la presenza di conflitti causati dalle modifiche apportate agli stessi dati nel server di pubblicazione e nel Sottoscrittore. È possibile specificare se rilevare i conflitti a livello di riga, ovvero considerare un conflitto qualsiasi modifica apportata alla riga, o a livello di colonna, ovvero considerare un conflitto solo le modifiche apportate alla stessa riga e colonna. La risoluzione dei conflitti relativi agli articoli viene eseguita a livello di riga. Per ulteriori informazioni sul rilevamento e sulla risoluzione dei conflitti in caso di utilizzo dei record logici, vedere Detecting and Resolving Conflicts in Logical Records.

Limitazioni e restrizioni

  • Se si modifica il livello di rilevamento in seguito all'inizializzazione delle sottoscrizioni, sarà necessario reinizializzarle. Per altre informazioni sugli effetti delle modifiche delle proprietà, vedere Modificare le proprietà di pubblicazioni e articoli.
  • Con il rilevamento a livello di riga e di colonna, la risoluzione dei conflitti viene sempre eseguita a livello di riga, ovvero la riga che prevale sovrascrive quella perdente. La replica di tipo merge consente anche di specificare che i conflitti vengono rilevati e risolti a livello di record logico, ma queste opzioni non sono disponibili da SQL Server Management Studio. Per informazioni sulla relativa impostazione dalle stored procedure di replica, vedere Definizione di una relazione tra record logici degli articoli di tabelle di merge.

Uso di SQL Server Management Studio

Specificare il rilevamento a livello di riga o colonna per gli articoli di tipo merge nella scheda Proprietà della finestra di dialogo Proprietà articolo , disponibile nella Creazione guidata nuova pubblicazione e nella finestra di dialogo Proprietà pubblicazione - <Pubblicazione> . Per altre informazioni sull'uso della creazione guidata e l'accesso alla finestra di dialogo, vedere Creare una pubblicazione e Visualizzare e modificare le proprietà della pubblicazione.

Specificare il rilevamento a livello di riga o di colonna

  1. Nella pagina Articoli della Creazione guidata nuova pubblicazione o nella finestra di dialogo Proprietà pubblicazione - <Pubblicazione> selezionare una tabella.
  2. Fare clic su Proprietà articolo, quindi su Imposta proprietà dell'articolo di tabella evidenziato o su Imposta proprietà di tutti gli articoli di tabelle.
  3. Nella scheda Proprietà della finestra di dialogo Articolo proprietà <articolo> selezionare uno dei valori seguenti per la proprietà Livello di rilevamento: rilevamento a livello di riga o rilevamento a livello di colonna.
  4. Se si trova nella finestra di dialogo Proprietà pubblicazione - <Pubblicazione> , fare clic su OK per salvare e chiudere la finestra di dialogo.

Uso di Transact-SQL

Specificare le opzioni di rilevamento dei conflitti per un nuovo articolo di unione

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_addmergearticle e specificare uno dei valori seguenti per @column_tracking:

    • true : consente di utilizzare il rilevamento a livello di colonna per l'articolo.
    • false : consente di utilizzare il rilevamento a livello di riga, che corrisponde all'impostazione predefinita.

Modificare le opzioni di rilevamento dei conflitti per un articolo di merge

  1. Per determinare le opzioni di rilevamento dei conflitti per un articolo di merge, eseguire sp_helpmergearticle. Notare il valore dell'opzione column_tracking nel set di risultati relativo l'articolo. Il valore 1 indica che viene utilizzato il rilevamento a livello di colonna, mentre il valore 0 indica che viene utilizzato il rilevamento a livello di riga.

  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_changemergearticle. Specificare il valore column_tracking per @property e uno dei valori seguenti per @value:

    • true : consente di utilizzare il rilevamento a livello di colonna per l'articolo.
    • false : consente di utilizzare il rilevamento a livello di riga, che corrisponde all'impostazione predefinita.

    Specificare il valore 1 sia per @force_invalidate_snapshot che per @force_reinit_subscription.

Rilevamento delle eliminazioni

Nota

Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

Per impostazione predefinita, la replica di tipo merge consente di sincronizzare i comandi DELETE tra server di pubblicazione e Sottoscrittore. Con la replica di tipo merge le righe vengono mantenute nel database di sottoscrizione anche se sono state eliminate dalla pubblicazione e viceversa. È possibile specificare a livello di programmazione che i comandi DELETE vengano ignorati durante la creazione di un nuovo articolo oppure attivare questa funzionalità in un secondo momento utilizzando le stored procedure di replica.

Importante

L'attivazione di questa funzionalità causa la non convergenza pertanto i dati presenti nel Sottoscrittore non rifletteranno accuratamente i dati presenti nel server di pubblicazione. È necessario implementare un meccanismo personalizzato per la rimozione manuale delle righe eliminate.

Specificare di ignorare le eliminazioni per un nuovo articolo di merge

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_addmergearticle (Transact-SQL). Specificare un valore di false per @delete_tracking. Per altre informazioni, vedere definire un articolo.

    Nota

    Se la tabella di origine di un articolo è già pubblicata in un'altra pubblicazione, il valore di delete_tracking deve essere uguale per entrambi gli articoli.

Specificare di ignorare le eliminazioni per un articolo di merge esistente

  1. Per determinare se la compensazione degli errori è abilitata per un articolo, eseguire sp_helpmergearticle (Transact-SQL) e prendere nota del valore di delete_tracking nel set di risultati. Se questo valore è 0, le eliminazioni vengono già ignorate.

  2. Se il valore del passaggio 1 è 1, eseguire sp_changemergearticle (Transact-SQL) nel server di pubblicazione nel database di pubblicazione. Specificare un valore di delete_tracking per @property e un valore di false per @value.

    Nota

    Se la tabella di origine di un articolo è già pubblicata in un'altra pubblicazione, il valore di delete_tracking deve essere uguale per entrambi gli articoli.

Ordine di elaborazione

La replica di tipo merge consente di specificare l'ordine in cui gli articoli vengono elaborati dall'agente di merge durante il processo di sincronizzazione. È possibile assegnare a livello di programmazione un ordine a ogni articolo creato utilizzando le stored procedure di replica. Gli articoli vengono elaborati in ordine crescente in base al valore. Se due articoli hanno lo stesso valore, essi vengono elaborati simultaneamente. Per altre informazioni, vedere Specificare le proprietà della replica di tipo merge.

A partire da Microsoft SQL Server 2005, è possibile ignorare l'ordine predefinito di elaborazione degli articoli per le pubblicazioni di tipo merge. Ciò risulta utile, ad esempio, se si definisce l'integrità referenziale tramite trigger e tali trigger devono essere attivati in un determinato ordine.

Modalità di determinazione dell'ordine di elaborazione

Durante la sincronizzazione di tipo merge, gli articoli vengono elaborati per impostazione predefinita nell'ordine richiesto dalle dipendenze tra gli oggetti, inclusi i vincoli di integrità referenziale dichiarativa definiti nelle tabelle di base. L'elaborazione prevede l'enumerazione delle modifiche apportate a una tabella e quindi l'applicazione di tali modifiche. Se non è presente l'integrità referenziale dichiarativa ma esistono filtri join o record logici tra gli articoli di tabella, gli articoli vengono elaborati nell'ordine richiesto dai filtri e dai record logici. Gli articoli non correlati ad altri articoli tramite DRI, filtri di join, record logici o altre dipendenze vengono elaborati in base al soprannome dell'articolo nella tabella di sistema sysmergearticles (Transact-SQL).

Si consideri una pubblicazione in cui sono incluse le tabelle SalesOrderHeader e SalesOrderDetail con una colonna chiave primaria SalesOrderID nella tabella SalesOrderHeader e una colonna chiave esterna SalesOrderID corrispondente nella tabella SalesOrderDetail . Durante la sincronizzazione, la replica di tipo merge impedisce le violazioni della chiave esterna inserendo nuove righe in SalesOrderHeader prima dell'inserimento delle righe associate in SalesOrderDetail. Analogamente, le righe vengono eliminate da SalesOrderDetail prima dell'eliminazione delle righe associate da SalesOrderHeader.

In alcune applicazioni, tuttavia, l'integrità referenziale viene applicata tramite trigger di database o a livello di applicazione, anziché tramite integrità referenziale dichiarativa. Nel caso della pubblicazione sopra descritta, anziché utilizzare l'integrità referenziale dichiarativa, la tabella SalesOrderDetail potrebbe disporre di un trigger di inserimento in grado di verificare l'esistenza della riga associata nella tabella SalesOrderHeader prima di consentire un inserimento. SalesOrderHeader potrebbe disporre di un trigger di eliminazione in grado di verificare l'assenza di righe associate in SalesOrderDetail prima di consentire un'eliminazione. I trigger non vengono presi in considerazione nella replica di tipo merge per determinare l'ordine di elaborazione degli articoli, poiché non è possibile determinare il risultato del trigger finché non viene attivato. Analogamente, nella replica non possono essere considerati i vincoli definiti a livello di applicazione.

In caso di mantenimento dell'integrità referenziale tramite trigger o a livello di applicazione, è consigliabile specificare l'ordine in cui gli articoli devono essere elaborati. Nell'esempio con i trigger, verrà specificato che la tabella SalesOrderHeader deve essere elaborata prima di SalesOrderDetail, poiché l'ordine degli articoli è basato sull'ordine di inserimento. Nella replica di tipo merge verrà automaticamente invertito l'ordine per le eliminazioni. La replica di tipo merge non avrà esito negativo se gli articoli non vengono ordinati, poiché l'agente di merge continua a elaborare gli articoli in caso di violazione di un vincolo e quindi ripete le operazioni non riuscite dopo l'elaborazione degli altri articoli. Specificando l'ordine degli articoli è semplicemente possibile evitare i successivi tentativi e l'elaborazione aggiuntiva associata. Se si specifica un ordine non corretto, ad esempio un ordine che determina l'elaborazione dei record di dettagli prima dei record di intestazione, la replica di tipo merge ripeterà l'elaborazione finché non avrà esito positivo.

Nuovo articolo

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_addmergearticle (Transact-SQL). Specificare un valore integer che rappresenta l'ordine di elaborazione per l'articolo per @processing_order. Per altre informazioni, vedere definire un articolo.

    Nota

    Quando si creano articoli ordinati, è necessario lasciare gap tra i valori relativi all'ordine degli articoli. In questo modo risulta più agevole impostare nuovi valori in futuro. Se ad esempio si dispone di tre articoli per cui è necessario specificare un ordine di elaborazione fisso, impostare il valore di @processing_order su 10, 20 e 30 anziché rispettivamente su 1, 2 e 3.

Articolo esistente

  1. Per determinare l'ordine di elaborazione di un articolo, eseguire sp_helpmergearticle (Transact-SQL) e notare il valore di processing_order nel set di risultati.

  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_changemergearticle (Transact-SQL). Specificare il valore processing_order per @property e un valore integer che rappresenta l'ordine di elaborazione per @value.

Vedere anche

Ottimizzare le prestazioni della replica di tipo merge con il rilevamento condizionale delle eliminazioni
Detecting and Resolving Conflicts in Logical Records
Definire una relazione tra record logici degli articoli di tabelle di merge
Rilevare e risolvere i conflitti tra repliche di tipo merge
Ottimizzare le prestazioni della replica di tipo merge con gli articoli di solo download
Define an Article
Visualizzare e modificare le proprietà degli articoli