Condividi tramite


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.