Condividi tramite


Esempio di risoluzione dei conflitti di merge in base al tipo di sottoscrizione e alle priorità assegnate

L'esempio seguente, in cui è descritta una serie di aggiornamenti a una riga tramite diverse sincronizzazioni di tipo merge, consente di comprendere la modalità di risoluzione dei conflitti in base ai valori di priorità assegnati e al tipo di sottoscrizione, ovvero server o client.

Nella tabella seguente sono riportati i valori di priorità iniziali per quattro siti in una topologia di replica di tipo merge di base, ovvero un server di pubblicazione, due Sottoscrittori con sottoscrizioni server e un Sottoscrittore con sottoscrizione client.

Sito Tipo Valore di priorità

A

Publisher

100,00

B

Server Subscription

75,00 (assegnato)

C

Server Subscription

50,00 (assegnato)

D

Client Subscription

0,00 (predefinito)

Fase 1: valori iniziali

Il sito A (server di pubblicazione) crea inizialmente la versione uno della riga contenente il valore "Nebraska", che viene replicata nei siti B, C e D durante la successiva sincronizzazione di tipo merge. I valori di riga dopo la sincronizzazione sono i seguenti.

Sito Valore di priorità Valore di riga

A (server di pubblicazione)

100,00

Nebraska

B (sottoscrizione server)

75,00

Nebraska

C (sottoscrizione server)

50,00

Nebraska

D (sottoscrizione client)

0,00

Nebraska

Fase 2: aggiornamento della riga sia nel server di pubblicazione che nel Sottoscrittore con sottoscrizione server

Il sito A aggiorna la riga con il valore Texas, mentre il sito B aggiorna la riga con il valore New Jersey. Alla successiva sincronizzazione di tipo merge, si verifica un conflitto tra i siti A e B, in cui prevale il sito A. Il valore che nel conflitto risulta prioritario viene distribuito dal sito A ai siti B, C e D.

Sito Valore di priorità Valore di riga

A (server di pubblicazione)

100,00

Texas

B (sottoscrizione server)

75,00

Texas

C (sottoscrizione server)

50,00

Texas

D (sottoscrizione client)

0,00

Texas

Fase 3: più modifiche alla stessa riga

Si supponga che il sito C aggiorni la riga con il valore North Carolina ed esegua la sincronizzazione con il server di pubblicazione. In questo caso non si verifica alcun conflitto, poiché C ha già completato correttamente il processo di merge dell'ultimo aggiornamento da A con il valore di riga "Texas". Si supponga quindi che il sito B aggiorni la riga con il valore Idaho.

Sito Valore di priorità Valore di riga

A (server di pubblicazione)

100,00

North Carolina

B (sottoscrizione server)

75,00

Idaho

C (sottoscrizione server)

50,00

North Carolina

D (sottoscrizione client)

0,00

Texas

Quando il sito B viene sincronizzato con il server di pubblicazione, si verifica un conflitto di aggiornamento. Poiché il sito B e il sito C sono siti di sottoscrizione server e la priorità di B è maggiore della priorità di C, il sito B prevale. Dopo il merge degli altri due siti, il valore di B viene propagato agli altri Sottoscrittori.

Sito Valore di priorità Valore di riga

A (server di pubblicazione)

100,00

Idaho

B (sottoscrizione server)

75,00

Idaho

C (sottoscrizione server)

50,00

Idaho

D (sottoscrizione client)

0,00

Idaho

Fase 4: aggiornamento della riga nei Sottoscrittori con sottoscrizioni sia server che client

Si supponga che il sito D aggiorni la riga con il valore New Mexico ed esegua la sincronizzazione con il server di pubblicazione. Si supponga quindi che il sito B aggiorni la riga con il valore California.

Sito Valore di priorità Valore di riga

A (server di pubblicazione)

100,00

New Mexico

B (sottoscrizione server)

75,00

California

C (sottoscrizione server)

50,00

Idaho

D (sottoscrizione client)

0,00

New Mexico

Quando il sito B viene sincronizzato con il server di pubblicazione, si verifica un conflitto di aggiornamento. A differenza del caso precedente, D dispone di una sottoscrizione client e durante la sincronizzazione assume pertanto il valore di priorità del server di pubblicazione (sito A). Poiché il valore di priorità di A è maggiore del valore di priorità di B, nel conflitto il valore immesso inizialmente in D prevale rispetto a B. Se nel Sottoscrittore B fosse stata eseguita la sincronizzazione con A prima del Sottoscrittore D, avrebbe prevalso il sito B. La prevalenza del sito D nel conflitto si basa sul fatto che il server di pubblicazione non ha eseguito né ricevuto modifiche dall'ultima sincronizzazione della versione della riga aggiornata nel sito D. Se viene sincronizzato per primo qualsiasi Sottoscrittore con sottoscrizione server o qualsiasi altro Sottoscrittore con sottoscrizione client, viene applicata la regola in base alla quale prevale la priorità più elevata o il primo inserimento nel server di pubblicazione.

Nella tabella seguente sono riportati i valori finali dopo la sincronizzazione di tutti i siti.

Sito Valore di priorità Valore di riga

A (server di pubblicazione)

100,00

New Mexico

B (sottoscrizione server)

75,00

New Mexico

C (sottoscrizione server)

50,00

New Mexico

D (sottoscrizione client)

0,00

New Mexico

L'ordine di sincronizzazione e il valore di priorità determinano l'esito dei conflitti quando la topologia include sottoscrizioni server e client allo stesso livello. L'ultimo set di aggiornamenti evidenzia i motivi per cui in questi casi è necessario procedere con cautela. Il Sottoscrittore prevale anche se dotato del valore di priorità più basso tra i tre Sottoscrittori poiché ha eseguito per primo la sincronizzazione con il server di pubblicazione, di cui ha assunto la priorità pari a 100,00. Se il valore New Mexico fosse stato immesso dal sito C, con sottoscrizione server con valore di priorità 50,00, anziché dal sito D, avrebbe prevalso il sito B, dotato di sottoscrizione server con valore di priorità 75,00, e il risultato sarebbe stato California.

Vedere anche

Concetti

Modalità di rilevamento e risoluzione dei conflitti da parte della replica di tipo merge

Guida in linea e informazioni

Assistenza su SQL Server 2005