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:

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

  1. Connettiti al server di pubblicazione (o, secondo i casi, al Sottoscrittore) in Microsoft SQL Server Management Studio e quindi espandi il nodo server.

  2. Espandere la cartella Replica e quindi la cartella Pubblicazioni locali .

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

  4. Nella finestra di dialogo Seleziona tabella con conflitti selezionare un database, una pubblicazione e una tabella per cui visualizzare i conflitti.

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

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

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

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

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

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

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

Vedi anche

Advanced Merge Replication Conflict Detection and Resolution
Specificare un sistema di risoluzione dei conflitti dell'articolo di merge