Conflitti nella replica di tipo merge avanzata - Risoluzione nel record logicoAdvanced Merge Replication Conflict - Resolving in Logical Record

In questo argomento vengono illustrate le varie combinazioni di metodi possibili per il rilevamento e la risoluzione dei conflitti nell'utilizzo di record logici.This topic covers the various combinations of conflict detection and conflict resolution approaches possible when using logical records. Nella replica di merge si verificano conflitti quando più di un nodo modifica gli stessi dati oppure quando, durante la replica di modifiche, si riscontrano determinati tipi di errori, ad esempio la violazione di un vincolo.A conflict in merge replication occurs when more than one node changes the same data, or merge replication encounters certain types of errors, such as a constraint violation, when replicating changes. Per ulteriori informazioni sul rilevamento e sulla risoluzione dei conflitti, vedere Rilevamento e risoluzione avanzati dei conflitti nella replica di tipo merge.For more information about conflict detection and resolution, see Advanced Merge Replication Conflict Detection and Resolution.

Per specificare il livello di rilevamento e risoluzione dei conflitti di un articolo, vedere Specifica del livello di rilevamento e risoluzione dei conflitti per gli articoli di merge.To specify the conflict tracking and resolution level for an article, see Specify the Conflict Tracking and Resolution Level for Merge Articles.

Rilevamento dei conflittiConflict Detection

La modalità con cui vengono rilevati i conflitti per i record logici è determinata da due proprietà degli articoli: column_tracking e logical_record_level_conflict_detection.The way in which conflicts are detected for logical records is determined by two article properties: column_tracking and logical_record_level_conflict_detection. SQL Server 2005SQL Server 2005 e versioni successive supportano anche rilevamento a livello di record logico. and later versions also support logical record-level detection.

La proprietà articolo logical_record_level_conflict_detection può essere impostata su TRUE o FALSE.The logical_record_level_conflict_detection article property can be set to TRUE or FALSE. Il valore deve essere impostato solo per l'articolo padre di livello principale e verrà ignorato per gli articoli figlio.The value should only be set for the top-level parent article and will be ignored by child articles. Se questo valore è impostato su FALSE, nella replica di tipo merge i conflitti vengono rilevati come nelle precedenti versioni di SQL ServerSQL Server, ovvero esclusivamente in base al valore della proprietà column_tracking dell'articolo.If this value is FALSE, merge replication detects conflicts as in previous versions of SQL ServerSQL Server, based solely on the value of the column_tracking property for the article. Se il valore è impostato su TRUE, la proprietà column_tracking dell'articolo viene ignorata e qualora vengano apportate modifiche in qualsiasi punto del record logico viene rilevato un conflitto.If this value is TRUE, merge replication will ignore the column_tracking property of the article, and detect a conflict if changes are made anywhere in the logical record. Ad esempio, si consideri lo scenario seguente:For example, consider this scenario:

Record logico per tre tabelle con valoriThree table logical record with values

Viene rilevato un conflitto se due utenti modificano uno qualsiasi dei valori del record logico Customer2 nelle tabelle Customers, Orderso OrderItems .A conflict is detected if two users change any values for the Customer2 logical record in the Customers, Orders, or OrderItems tables. In questo esempio vengono considerate modifiche apportate mediante un'istruzione UPDATE, tuttavia è possibile rilevare anche conflitti causati da modifiche apportate con istruzioni INSERT o DELETE.This example involves changes made via an UPDATE statement, but the conflict can also be detected by changes made with INSERT or DELETE statements.

Risoluzione dei conflittiConflict Resolution

Per impostazione predefinita nella replica di tipo merge per risolvere i conflitti si utilizza logica basata su priorità.By default, merge replication uses priority-based logic to resolve conflicts. Se in due database di sottoscrizione viene apportata una modifica in conflitto, ha la priorità la modifica del Sottoscrittore con la priorità di sottoscrizione più elevata. Nel caso in cui la priorità sia uguale, viene applicata per prima la modifica che raggiunge il server di pubblicazione.If a conflicting change is made in two Subscriber databases, the change for the Subscriber with the higher subscription priority wins, or if the priority is the same, the first change to reach the Publisher wins. Nel rilevamento a livello di riga e di colonna, la riga confermata sovrascrive interamente la riga non confermata.With row-level and column-level detection, the entire winning row always overwrites the losing row.

La proprietà articolo logical_record_level_conflict_resolution può essere impostata su TRUE o FALSE.The logical_record_level_conflict_resolution article property can be set to TRUE or FALSE. Il valore deve essere impostato solo per l'articolo padre di livello principale e verrà ignorato per gli articoli figlio.The value should only be set for the top-level parent article and will be ignored by child articles. Se il valore è impostato su TRUE, il record logico confermato sovrascrive interamente il record logico non confermato.If the value is TRUE, the entire winning logical record overwrites the losing logical record. Se il valore è impostato su FALSE, le singole righe confermate possono provenire da diversi Sottoscrittori o server di pubblicazione.If it is FALSE, individual winning rows can come from different Subscribers or Publishers. Ad esempio, il Sottoscrittore A può prevalere in un conflitto in una riga della tabella Orders , mentre il Sottoscrittore B può prevalere in una riga correlata nella tabella OrderItems .For example, Subscriber A could win a conflict on a row from the Orders table, and Subscriber B could win on a related row from the OrderItems table. Il risultato è un record logico contenente la riga Orders del Sottoscrittore A e la riga OrderItems del Sottoscrittore B.The result is a logical record with the Orders row from Subscriber A and the OrderItems row from Subscriber B.

Interazione delle impostazioni di rilevamento e risoluzione dei conflittiInteraction of Conflict Resolution and Detection Settings

Il risultato dei conflitti dipende dall'interazione delle impostazioni di rilevamento e risoluzione dei conflitti.The outcome of conflicts depends on the interaction of conflict detection and resolution settings. Negli esempi seguenti si presuppone l'utilizzo della risoluzione dei conflitti basata sulle priorità.For the examples below, it is assumed that the priority-based conflict resolution is being used. Nel caso di record logici esistono le possibilità seguenti:When using logical records, the possibilities are:

  • Rilevamento a livello di riga o di colonna, risoluzione a livello di rigaRow or column level detection, row level resolution

  • Rilevamento a livello di colonna, risoluzione a livello di record logicoColumn level detection, logical record resolution

  • Rilevamento a livello di riga, risoluzione a livello di record logicoRow level detection, logical record resolution

  • Rilevamento a livello di record logico, risoluzione a livello di record logicoLogical record detection, logical record resolution

Rilevamento a livello di riga o di colonna, risoluzione a livello di rigaRow or Column Level Detection, Row Level Resolution

In questo esempio, la pubblicazione è configurata come segue:In this example, the publication is configured with:

  • column_tracking è impostata su TRUE o FALSEcolumn_tracking is TRUE or FALSE

  • logical_record_level_conflict_detection è impostata su FALSElogical_record_level_conflict_detection is FALSE

  • logical_record_level_conflict_resolution è impostata su FALSElogical_record_level_conflict_resolution is FALSE

    In questo caso, il rilevamento è a livello di riga o di colonna e la risoluzione è a livello di riga.In this case, detection is at the row or column level and resolution is at the row level. Queste impostazioni consentono di replicare tutte le modifiche apportate a un record logico come singola unità, senza rilevare o risolvere conflitti a livello del record logico.These settings are used to take advantage of having all changes to a logical record replicate as a unit, but without conflict detection or resolution at the logical record level.

Rilevamento a livello di colonna, risoluzione a livello di record logicoColumn Level Detection, Logical Record Resolution

In questo esempio, la pubblicazione è configurata come segue:In this example, the publication is configured with:

  • column_tracking è impostata su TRUEcolumn_tracking is TRUE

  • logical_record_level_conflict_detection è impostata su FALSElogical_record_level_conflict_detection is FALSE

  • logical_record_level_conflict_resolution è impostata su TRUElogical_record_level_conflict_resolution is TRUE

    Un server di pubblicazione e un Sottoscrittore dispongono dello stesso set di dati iniziale e tra le tabelle orders e customers viene definito un record logico.A Publisher and Subscriber start with the same data set, and a logical record is defined between the orders and customers tables. Il server di pubblicazione modifica la colonna custcol1 della tabella customers e la colonna ordercol1 della tabella orders .The Publisher changes the custcol1 column in the customers table and the ordercol1 in the orders table. Il Sottoscrittore modifica la stessa riga della colonna custcol1 nella tabella customers e la stessa riga della colonna ordercol2 nella tabella orders .The Subscriber changes custcol1 in the same row of the customers table and the ordercol2 column in the same row of the orders table. Le modifiche apportate alla stessa colonna della tabella customers risultano in conflitto, mentre le modifiche apportate alla tabella orders non lo sono.The changes to the same column in the customer table result in a conflict, but the changes to the orders table are not in conflict.

    Dato che i conflitti vengono risolti a livello dei record logici, le modifiche confermate apportate nel server di pubblicazione sostituiscono le modifiche inserite nelle tabelle del Sottoscrittore durante l'elaborazione della replica.Because the conflicts are resolved at the logical record level, the winning changes made at the Publisher replace the changes made in the Subscriber tables during replication processing.

    Serie di tabelle in cui sono visualizzate le modifiche alle righe correlateSeries of tables showing changes to related rows

Rilevamento a livello di riga, risoluzione a livello di record logicoRow Level Detection, Logical Record Resolution

In questo esempio, la pubblicazione è configurata come segue:In this example, the publication is configured with:

  • column_tracking è impostata su FALSEcolumn_tracking is FALSE

  • logical_record_level_conflict_detection è impostata su FALSElogical_record_level_conflict_detection is FALSE

  • logical_record_level_conflict_resolution è impostata su TRUElogical_record_level_conflict_resolution is TRUE

    Un server di pubblicazione e un Sottoscrittore dispongono dello stesso set di dati iniziale.A Publisher and Subscriber start with the same data set. Il server di pubblicazione modifica la colonna custcol1 della tabella customers .The Publisher changes the custcol1 column in the customers table. Il Sottoscrittore modifica la colonna custcol12 della tabella customers e la colonna ordercol2 della tabella orders .The Subscriber changes custcol2 in the customers table and the ordercol2 column in the orders table. Le modifiche apportate alla stessa riga della tabella customers risultano in conflitto, mentre le modifiche apportate nel Sottoscrittore alla tabella orders non lo sono.The changes to the same row in the customers table result in a conflict, but the Subscriber changes to the orders table are not in conflict.

    Dato che i conflitti vengono risolti a livello dei record logici, le modifiche confermate apportate nel server di pubblicazione sostituiscono le modifiche inserite nelle tabelle del Sottoscrittore durante la sincronizzazione.Because the conflicts are resolved at the logical record level, during synchronization the winning changes made at the Publisher replace the changes made in the Subscriber tables.

    Serie di tabelle in cui sono visualizzate le modifiche alle righe correlateSeries of tables showing changes to related rows

Rilevamento a livello di record logico, risoluzione a livello di record logicoLogical Record Detection, Logical Record Resolution

In questo esempio, la pubblicazione è configurata come segue:In this example, the publication is configured with:

  • logical_record_level_conflict_detection è impostata su TRUElogical_record_level_conflict_detection is TRUE

  • logical_record_level_conflict_resolution è impostata su TRUElogical_record_level_conflict_resolution is TRUE

    Un server di pubblicazione e un Sottoscrittore dispongono dello stesso set di dati iniziale.A Publisher and Subscriber start with the same data set. Il server di pubblicazione modifica la colonna custcol1 della tabella customers .The Publisher changes the custcol1 column in the customers table. Il Sottoscrittore modifica la colonna ordercol1 della tabella orders .The Subscriber changes the ordercol1 column in the orders table. Non vi sono modifiche alla stessa riga o colonna. Tuttavia, dato che le modifiche sono state apportate allo stesso record logico per custid=1, le modifiche vengono rilevate come conflitto a livello dei record logici.There are no changes to the same row or columns, but because the changes are made in the same logical record for custid=1, the changes are detected as a conflict at the logical record level.

    Dato che i conflitti vengono ugualmente risolti a livello dei record logici, la modifica confermata apportata nel server di pubblicazione sostituisce la modifica inserita nelle tabelle del Sottoscrittore durante la sincronizzazione.Because the conflicts are also resolved at the logical record level, during synchronization the winning change made at the Publisher replaces the change made in the Subscriber tables.

    Serie di tabelle in cui sono visualizzate le modifiche alle righe correlateSeries of tables showing changes to related rows

Vedere ancheSee Also

Raggruppare modifiche alle righe correlate con record logiciGroup Changes to Related Rows with Logical Records