Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Questo argomento illustra come specificare diverse proprietà per la replica di merge.
Articolo di unione solo download
Gli articoli di solo scaricamento sono concepiti per applicazioni con dati che non vengono aggiornati presso i Sottoscrittori. Per altre informazioni, vedere Ottimizzare le prestazioni della replica di tipo merge con gli articoli di solo download.
Considerazioni
- 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.
Usa SQL Server Management Studio
Nella pagina Articoli
Nella pagina Articoli della Creazione guidata Nuova pubblicazione selezionare una tabella e quindi selezionare la casella di controllo La tabella evidenziata è solo per il download.
Nella scheda Proprietà della finestra delle proprietà dell'articolo
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à dell'articolo.
Fare clic su Imposta proprietà dell'articolo di tabelle evidenziato o su Imposta proprietà di tutti gli articoli di tabelle.
Nella sezione Oggetto di destinazione della scheda Proprietà della finestra di dialogo Proprietà articolo - <Articolo> specificare uno dei valori seguenti in Direzione sincronizzazione:
- Scarica nel Sottoscrittore, impedisci modifiche nel Sottoscrittore
- Scarica nel Sottoscrittore, consenti le modifiche nel Sottoscrittore
Se è visualizzata la finestra di dialogo Proprietà pubblicazione - <Pubblicazione> fare clic su OK per salvare e chiudere la finestra di dialogo.
Usare Transact-SQL
Nuovo articolo
Eseguire sp_addmergearticle, specificando il valore 1 o 2 per il parametro
@subscriber_upload_options. I numeri corrispondono al comportamento seguente:- 0 : nessuna restrizione (valore predefinito). Le modifiche apportate nel Sottoscrittore vengono caricate nel Publisher.
- 1 - Le modifiche sono consentite nel Sottoscrittore, ma non vengono caricate nell'Editore.
- 2 - Non sono consentite modifiche per il Sottoscrittore.
Nota
Se la tabella di origine di un articolo è già inclusa in un'altra pubblicazione, il valore di
@subscriber_upload_optionsdeve coincidere per entrambi gli articoli.
Articolo esistente
Per determinare se un articolo è di solo download, eseguire sp_helpmergearticle e verificare il valore di upload_options per l'articolo nel set di risultati.
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_snapshote@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 Publisher.
2 - Non sono consentite modifiche per il 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 Sincronizzare una sottoscrizione mediante Gestione sincronizzazione Microsoft Windows (Gestione sincronizzazione Microsoft Windows).
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.
Usa SQL Server Management Studio
Abilitare la risoluzione interattiva dei conflitti per un articolo
- 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.
- Fare clic su Proprietà articolo, quindi su Imposta proprietà dell'articolo di tabella evidenziato o su Imposta proprietà di tutti gli articoli di tabelle.
- Nella pagina Proprietà articolo - <Articolo> o Proprietà articolo - <Tipo di articolo>, fare clic sulla scheda Resolver.
- Selezionare Consenti al sottoscrittore di risolvere i conflitti in modo interattivo durante la sincronizzazione su richiesta.
- Seleziona OK.
- Se è visualizzata la finestra di dialogo Proprietà pubblicazione - <Pubblicazione> fare clic su OK per salvare e chiudere la finestra di dialogo.
Specificare che una sottoscrizione deve usare la risoluzione interattiva dei conflitti
- Nella finestra di dialogo Proprietà sottoscrizione - <Sottoscrittore>: <DatabaseSottoscrizione> specificare un valore True per l'opzione Risoluzione interattiva dei conflitti. Per ulteriori informazioni sull'accesso a questa finestra di dialogo, vedere View and Modify Push Subscription Properties e View and Modify Pull Subscription Properties.
- Seleziona OK.
Usare 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
- Nel server di pubblicazione, nel database 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.
- Nel Sottoscrittore, nel database delle sottoscrizioni, eseguire sp_addmergepullsubscription. Per altre informazioni, vedere Creazione di una sottoscrizione pull.
- Nel database di sottoscrizione del Sottoscrittore eseguire sp_addmergepullsubscription_agent specificando i parametri seguenti:
-
@publisher,@publisher_db(il database pubblicato), e@publication. - Un valore di true per
@enabled_for_syncmgr. - Un valore di 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.
-
- Nel server di pubblicazione, nel database di pubblicazione, eseguire sp_addmergesubscription.
Definire un articolo che supporta il sistema di risoluzione interattivo
- Nel server di pubblicazione, nel database 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.
Livello di rilevamento e risoluzione dei conflitti per gli articoli di tipo merge
Questo argomento descrive come specificare il livello di rilevamento e risoluzione dei conflitti per gli articoli di merge in SQL Server tramite SQL Server Management Studio o Transact-SQL.
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 inoltre di specificare che i conflitti vengano rilevati e risolti a livello di record logico. Queste opzioni tuttavia non sono disponibili in SQL Server Management Studio. Per informazioni su come impostare queste opzioni tramite le stored procedure di replica, vedere Definire una relazione tra record logici tra articoli di tabella merge.
Usa SQL Server Management Studio
Specificare il rilevamento a livello di riga o di 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
- Nella pagina Articoli della Creazione guidata Nuova pubblicazione o nella finestra di dialogo Proprietà pubblicazione - <Pubblicazione>, selezionare una tabella.
- Fare clic su Proprietà articolo, quindi su Imposta proprietà dell'articolo di tabella evidenziato o su Imposta proprietà di tutti gli articoli di tabelle.
- Nella scheda Proprietà della finestra di dialogo Proprietà articolo <Articolo> selezionare uno dei valori seguenti per la proprietà Livello rilevamento: Rilevamento a livello di riga o Rilevamento a livello di colonna.
- Se è visualizzata la finestra di dialogo Proprietà pubblicazione - <Pubblicazione> fare clic su OK per salvare e chiudere la finestra di dialogo.
Usare Transact-SQL
Per specificare le opzioni di rilevamento dei conflitti per un nuovo articolo di merge
Nel server di pubblicazione, nel database di pubblicazione, eseguire sp_addmergearticle e specificare uno dei seguenti valori 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
Per determinare le opzioni di rilevamento dei conflitti per un articolo di merge, eseguire sp_helpmergearticle. Si noti il valore dell'opzione column_tracking nel set di risultati dell'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.
Nel server di pubblicazione, nel database di pubblicazione, eseguire sp_changemergearticle. Specificare il valore column_tracking per
@propertye 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 per
@force_invalidate_snapshote@force_reinit_subscription.
Gestisci il monitoraggio delle eliminazioni
Nota
Questa funzionalità verrà rimossa nelle versioni future di 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 sincronizza i DELETE comandi tra il Publisher e il 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 abilitare 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.
Specifica che le eliminazioni vengano ignorate per un nuovo articolo di merge
Nel database di pubblicazione, sul server di pubblicazione, eseguire sp_addmergearticle (Transact-SQL). Specificare il valore 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
Per determinare se la compensazione 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.
Se il valore ottenuto al passaggio 1 è 1, eseguire sp_changemergearticle (Transact-SQL) nel database di pubblicazione del server di pubblicazione. Specificare il valore
delete_trackingper@propertye il valore 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 tramite codice un ordine a ogni articolo durante la creazione dell'articolo utilizzando le stored procedure di replica. Gli articoli vengono elaborati in ordine dal valore più basso al valore più alto. Se due articoli hanno lo stesso valore, essi vengono elaborati simultaneamente.
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 alcuna DRI (integrità referenziale dichiarativa), ma esistono filtri di 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 all'alias 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. Data la pubblicazione sopra descritta, anziché la DRI (integrità referenziale dichiarativa), la tabella SalesOrderDetail potrebbe avere un trigger di inserimento che garantisca l'esistenza della riga associata nella tabella SalesOrderHeader prima di consentire l'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
Nel database di pubblicazione, sul 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_ordersu 10, 20 e 30 anziché rispettivamente su 1, 2 e 3.
Articolo esistente
- Per determinare l'ordine di elaborazione di un articolo, eseguire sp_helpmergearticle (Transact-SQL) e prendere nota del valore di processing_order nel set di risultati.
- Nel database di pubblicazione del server di pubblicazione eseguire sp_changemergearticle (Transact-SQL). Specificare il valore processing_order per
@propertye un valore integer che rappresenta l'ordine di elaborazione per@value.