Risoluzione dei conflitti per la replica di tipo merge
Si applica a: SQL Server
I conflitti nella replica di tipo merge vengono risolti in base al sistema di risoluzione specificato per ogni articolo. Per impostazione predefinita, i conflitti vengono risolti senza che sia necessario l'intervento dell'utente. È tuttavia possibile visualizzare i conflitti e modificare il risultato della risoluzione nel Visualizzatore conflitti di replica di Microsoft.
I dati dei conflitti sono disponibili nel Visualizzatore conflitti di replica per l'intervallo di tempo specificato per il periodo di memorizzazione dei conflitti, che per impostazione predefinita è di 14 giorni. Per impostare il periodo di memorizzazione dei conflitti, eseguire una delle operazioni seguenti:
Specifica un valore del periodo di conservazione per il parametro
@conflict_retention
di sp_addmergepublication (Transact-SQL).Specifica il valore conflict_retention per il parametro
@property
e un valore del periodo di conservazione per il parametro@value
di sp_changemergepublication (Transact-SQL).
Per impostazione predefinita, le informazioni sui conflitti vengono archiviate:
- Nel server di pubblicazione e nel Sottoscrittore se il livello di compatibilità della pubblicazione è pari a 90RTM o superiore.
- Nel server di pubblicazione se il livello di compatibilità della pubblicazione è inferiore a 80RTM.
- Nel server di pubblicazione se i Sottoscrittori eseguono SQL Server Compact. I dati in conflitto non possono essere archiviati nei sottoscrittori di SQL Server Compact.
L'archivio delle informazioni sui conflitti viene controllato dalla proprietà conflict_logging della pubblicazione. Per ulteriori informazioni, vedi sp_addmergepublication (Transact-SQL) e sp_changemergepublication (Transact-SQL).
I conflitti possono inoltre essere risolti in modo interattivo durante la sincronizzazione tramite il sistema di risoluzione interattivo di Microsoft. Il sistema di risoluzione interattivo è disponibile tramite Gestione sincronizzazione di Microsoft Windows. Per ulteriori informazioni, vedi Sincronizzare una sottoscrizione mediante Gestione sincronizzazione Microsoft Windows.
Risolvere i conflitti
Connettiti al server di pubblicazione (o, secondo i casi, al Sottoscrittore) in Microsoft SQL Server Management Studio e quindi espandi il nodo server.
Espandere la cartella Replica e quindi la cartella Pubblicazioni locali .
Fare clic con il pulsante destro del mouse sulla pubblicazione per la quale si desidera visualizzare i conflitti e quindi scegliere Visualizza conflitti.
Nota
Se è stato specificato il valore 'subscriber' per la proprietà conflict_logging , la voce di menu Visualizza conflitti non sarà disponibile. Per visualizzare i conflitti, avviare ConflictViewer.exe dal prompt dei comandi. Per impostazione predefinita, ConflictViewer.exe si trova nella directory Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE. Per un elenco di parametri di avvio validi, eseguire ConflictViewer.exe -?.
Nella finestra di dialogo Seleziona tabella con conflitti selezionare un database, una pubblicazione e una tabella per cui visualizzare i conflitti.
Nel Visualizzatore conflitti di replica è possibile:
Filtrare le righe con i pulsanti a destra della griglia superiore.
Selezionare una riga nella griglia superiore per visualizzare le informazioni su tale riga nella griglia inferiore.
Selezionare una o più righe nella griglia superiore e quindi fare clic su Rimuovi, che equivale a fare clic sul pulsante Invia riga in conflitto confermata , senza apportare alcuna modifica ai dati.
Fare clic sul pulsante delle proprietà (...) per visualizzare altre informazioni su una colonna coinvolta in un conflitto.
Modificare i dati nella colonna Riga in conflitto confermata o Riga in conflitto ignorata prima di inviare i dati, che sono di sola lettura se la colonna è grigia.
Fare clic su Invia riga in conflitto confermata per accettare la riga designata come riga confermata.
Fare clic su Invia riga in conflitto ignorata per non accettare la risoluzione e per propagare a tutti i nodi della topologia il valore designato come ignorato.
Selezionare Registra informazioni dettagliate sul conflitto per registrare i dati del conflitto in un file. Per specificare un percorso per il file, scegliere Opzioni dal menu Visualizza. Immettere un valore o fare clic sul pulsante Sfoglia (...) e quindi passare al file appropriato. Fare clic su OK per chiudere la finestra di dialogo Opzioni .
Chiudere il Visualizzatore conflitti di replica.
Visualizzare le informazioni sui conflitti
Quando si risolve un conflitto in una replica di tipo merge, i dati della riga non confermata vengono scritti in una tabella di conflitti. I dati relativi al conflitto possono essere visualizzati a livello di programmazione tramite le stored procedure di replica. Per altre informazioni, vedere Rilevamento e risoluzione avanzati dei conflitti nella replica di tipo merge.
Nel database di pubblicazione del server di pubblicazione eseguire sp_helpmergepublication. Notare i valori delle colonne seguenti nel set di risultati:
centralized_conflicts : 1 indica che le righe con conflitti vengono archiviate nel server di pubblicazione, mentre 0 indica che le righe con conflitti non vengono archiviate nel server di pubblicazione.
decentralized_conflicts : 1 indica che le righe con conflitti vengono archiviate nel Sottoscrittore, mentre 0 indica che le righe con conflitti non vengono archiviate nel Sottoscrittore.
Nota
Per definire il comportamento della registrazione dei conflitti relativi a una pubblicazione di tipo merge, viene usato il parametro
@conflict_logging
di sp_addmergepublication. Il parametro@centralized_conflicts
è deprecato.
Nella tabella seguente sono descritti i valori di queste colonne sulla base del valore specificato per
@conflict_logging
.Valore di @conflict_logging centralized_conflicts decentralized_conflicts publisher 1 0 subscriber 0 1 both 1 1 Nel database di pubblicazione del server di pubblicazione o nel database di sottoscrizione del Sottoscrittore eseguire sp_helpmergearticleconflicts. Specificare il valore
@publication
per restituire le informazioni sui conflitti solo per articoli che appartengono a una pubblicazione specifica. In tal modo per gli articoli con conflitti verranno restituite le informazioni della tabella dei conflitti. Notare il valore di conflict_table per qualsiasi articolo di interesse. Se il valore di conflict_table per un articolo è NULL, eliminare i conflitti che si sono verificati in questo articolo.(Facoltativo) Rivedere le righe con conflitti presenti negli articoli di interesse. A seconda dei valori di centralized_conflicts e decentralized_conflicts ottenuti al passaggio 1, eseguire una delle operazioni seguenti:
Nel database di pubblicazione del server di pubblicazione eseguire sp_helpmergeconflictrows. Specificare una tabella dei conflitti per l'articolo (ottenuta al passaggio 1) per
@conflict_table
. (Facoltativo) Specificare il valore@publication
per limitare le informazioni restituite sui conflitti a una pubblicazione specifica. In tal modo verranno restituiti i dati della riga e altre informazioni sulla riga non confermata.Nel database di sottoscrizione del Sottoscrittore eseguire sp_helpmergeconflictrows. Specificare una tabella dei conflitti per l'articolo (ottenuta al passaggio 1) per
@conflict_table
. In tal modo verranno restituiti i dati della riga e altre informazioni sulla riga non confermata.
Conflitto con eliminazione non riuscita
Nel database di pubblicazione del server di pubblicazione eseguire sp_helpmergepublication. Notare i valori delle colonne seguenti nel set di risultati:
centralized_conflicts : 1 indica che le righe con conflitti vengono archiviate nel server di pubblicazione, mentre 0 indica che le righe con conflitti non vengono archiviate nel server di pubblicazione.
decentralized_conflicts : 1 indica che le righe con conflitti vengono archiviate nel Sottoscrittore, mentre 0 indica che le righe con conflitti non vengono archiviate nel Sottoscrittore.
Nota
Per definire il comportamento della registrazione dei conflitti relativi a una pubblicazione di tipo merge, viene usato il parametro
@conflict_logging
di sp_addmergepublication. Il parametro@centralized_conflicts
è deprecato.
Nel database di pubblicazione del server di pubblicazione o nel database di sottoscrizione del Sottoscrittore eseguire sp_helpmergearticleconflicts. Specificare un valore per
@publication
in modo da restituire le informazioni della tabella dei conflitti solo per articoli che appartengono a una pubblicazione specifica. In tal modo per gli articoli con conflitti verranno restituite le informazioni della tabella dei conflitti. Notare il valore di source_object per qualsiasi articolo di interesse. Se il valore di conflict_table per un articolo è NULL, eliminare i conflitti che si sono verificati in questo articolo.(Facoltativo) Rivedere le informazioni sui conflitti per i conflitti di eliminazione. A seconda dei valori di centralized_conflicts e decentralized_conflicts ottenuti al passaggio 1, eseguire una delle operazioni seguenti:
Nel database di pubblicazione del server di pubblicazione eseguire sp_helpmergedeleteconflictrows. Specificare il nome della tabella di origine (ottenuta al passaggio 1) nella quale si è verificato il conflitto per
@source_object
. (Facoltativo) Specificare il valore@publication
per limitare le informazioni restituite sui conflitti a una pubblicazione specifica. In tal modo verranno restituite solo le informazioni sui conflitti di eliminazione archiviate nel server di pubblicazione.Nel database di sottoscrizione del Sottoscrittore eseguire sp_helpmergedeleteconflictrows. Specificare il nome della tabella di origine (ottenuta al passaggio 1) nella quale si è verificato il conflitto per
@source_object
. (Facoltativo) Specificare il valore@publication
per limitare le informazioni restituite sui conflitti a una pubblicazione specifica. In tal modo verranno restituite solo le informazioni sui conflitti di eliminazione archiviate nel Sottoscrittore.