Replica di tipo mergeMerge Replication

In genere la replica di tipo merge, come la replica transazionale, inizia con uno snapshot degli oggetti e dei dati del database di pubblicazione.Merge replication, like transactional replication, typically starts with a snapshot of the publication database objects and data. Eventuali modifiche dei dati e dello schema apportate successivamente nel server di pubblicazione e nei Sottoscrittori vengono rilevate tramite trigger.Subsequent data changes and schema modifications made at the Publisher and Subscribers are tracked with triggers. Al momento della connessione alla rete il Sottoscrittore esegue la sincronizzazione con il server di pubblicazione e scambia con esso le righe modificate dopo l'ultima sincronizzazione.The Subscriber synchronizes with the Publisher when connected to the network and exchanges all rows that have changed between the Publisher and Subscriber since the last time synchronization occurred.

In genere la replica di tipo merge è utilizzata in ambienti server-to-client.Merge replication is typically used in server-to-client environments. La replica di tipo merge è adatta alle seguenti situazioni:Merge replication is appropriate in any of the following situations:

  • Più Sottoscrittori potrebbero richiedere l'aggiornamento dei dati in ore diverse e la distribuzione delle modifiche al server di pubblicazione e ad altri Sottoscrittori.Multiple Subscribers might update the same data at various times and propagate those changes to the Publisher and to other Subscribers.

  • I Sottoscrittori devono ricevere i dati, eseguire le modifiche offline e sincronizzarle successivamente con il server di pubblicazione e i Sottoscrittori.Subscribers need to receive data, make changes offline, and later synchronize changes with the Publisher and other Subscribers.

  • Per ogni Sottoscrittore è necessaria una diversa partizione di dati.Each Subscriber requires a different partition of data.

  • È necessario essere in grado di individuare e risolvere tempestivamente eventuali conflitti che potrebbero verificarsi.Conflicts might occur and, when they do, you need the ability to detect and resolve them.

  • È necessario lo scambio di dati net piuttosto che l'accesso a stati di dati intermedi.The application requires net data change rather than access to intermediate data states. Ad esempio, se una riga viene modificata cinque volte nel Sottoscrittore prima della sincronizzazione con un server di pubblicazione, la riga verrà modificata solo una volta nel server di pubblicazione per riflettere la modifica dei dati net, ovvero il quinto valore.For example, if a row changes five times at a Subscriber before it synchronizes with a Publisher, the row will change only once at the Publisher to reflect the net data change (that is, the fifth value).

    La replica di tipo merge consente a vari siti di eseguire elaborazioni in modo autonomo e di unire quindi gli aggiornamenti in un unico risultato uniforme.Merge replication allows various sites to work autonomously and later merge updates into a single, uniform result. Dato che gli aggiornamenti vengono eseguiti in più nodi, è possibile che dati uguali siano aggiornati dal server di pubblicazione e da più Sottoscrittori,Because updates are made at more than one node, the same data may have been updated by the Publisher and by more than one Subscriber. con la conseguente possibilità di conflitti quando viene eseguito il merge degli aggiornamenti. La replica di tipo merge offre tuttavia diversi modi di risoluzione dei conflitti.Therefore, conflicts can occur when updates are merged and merge replication provides a number of ways to handle conflicts.

    La replica di tipo merge viene implementata dall'agente snapshot e dall'agente di merge di SQL ServerSQL Server .Merge replication is implemented by the SQL ServerSQL Server Snapshot Agent and Merge Agent. Se la pubblicazione non è filtrata o utilizza filtri statici, l'agente snapshot crea un singolo snapshot.If the publication is unfiltered or uses static filters, the Snapshot Agent creates a single snapshot. Se la pubblicazione utilizza filtri con parametri, l'agente snapshot crea uno snapshot per ogni partizione di dati.If the publication uses parameterized filters, the Snapshot Agent creates a snapshot for each partition of data. L'agente di merge applica gli snapshot iniziali ai SottoscrittoriThe Merge Agent applies the initial snapshots to the Subscribers. e unisce le modifiche ai dati incrementali apportate nel server di pubblicazione o nei Sottoscrittori dopo la creazione dello snapshot iniziale, quindi rileva e risolve eventuali conflitti in base alle regole configurate.It also merges incremental data changes that occurred at the Publisher or Subscribers after the initial snapshot was created, and detects and resolves any conflicts according to rules you configure.

    Per tener traccia delle modifiche, tramite la replica di tipo merge e la replica transazionale con sottoscrizioni ad aggiornamento in coda deve essere possibile identificare in modo univoco ogni riga di ogni tabella pubblicata.To track changes, merge replication (and transactional replication with queued updating subscriptions) must be able to uniquely identify every row in every published table. A tale scopo, tramite la replica di tipo merge la colonna rowguid viene aggiunta a ogni tabella, a meno che in essa non sia già inclusa una colonna di tipo di dati uniqueidentifier con il set di proprietà ROWGUIDCOL , in questo caso viene utilizzata la colonna in questione.To accomplish this merge replication adds the column rowguid to every table, unless the table already has a column of data type uniqueidentifier with the ROWGUIDCOL property set (in which case this column is used). Se la tabella viene rimossa dalla pubblicazione, la colonna rowguid viene eliminata; se per il rilevamento è stata utilizzata una colonna esistente, questa non viene eliminata.If the table is dropped from the publication, the rowguid column is removed; if an existing column was used for tracking, the column is not removed. In un filtro non deve essere inclusa la colonna rowguidcol utilizzata dalla replica per identificare le righe.A filter must not include the rowguidcol used by replication to identify rows. La funzione newid() è predefinita per la colonna rowguid , in ogni caso i clienti possono fornire un GUID per ogni riga, se necessario.The newid() function is provided as a default for the rowguid column, however customers can provide a guid for each row if needed. Non specificare tuttavia il valore 00000000-0000-0000-0000-000000000000.However, do not provide value 00000000-0000-0000-0000-000000000000.

    Nella figura seguente vengono illustrati i componenti utilizzati nella replica di tipo merge.The following diagram shows the components used in merge replication.

    Componenti e flusso di dati per la replica di tipo mergeMerge replication components and data flow