Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Después de inicializar una publicación o suscripción, la replicación de mezcla realiza un seguimiento y enumera todos los cambios realizados en los datos de las tablas publicadas. Se realiza un seguimiento de los cambios a través de desencadenadores (que la replicación crea para cada tabla publicada) y las tablas del sistema en las bases de datos de publicación y suscripción. Estas tablas del sistema de replicación se rellenan con metadatos que indican qué cambios se deben propagar. Cuando el Agente de mezcla se ejecuta durante la sincronización, el agente enumera los cambios y, a continuación, se aplica al publicador y al suscriptor según sea necesario.
Change Tracking
La replicación de mezcla usa los siguientes desencadenadores y tablas del sistema para realizar un seguimiento de los cambios en todas las tablas publicadas:
MSmerge_ins_<GUID>: insert trigger (el valor GUID para este desencadenador y los demás desencadenadores se derivan desysmergearticles)MSmerge_upd_<GUID>: desencadenador de actualizaciónMSmerge_del_<GUID>: se ha eliminado el desencadenadorMSmerge_contentsMSmerge_tombstoneMSmerge_genhistory
La replicación de mezcla utiliza las siguientes tablas adicionales del sistema para hacer un seguimiento de los cambios en las tablas filtradas:
MSmerge_partition_groupsMSmerge_current_partition_mappingsMSmerge_past_partition_mappings
Nota:
Las tablas del sistema enumeradas son usadas por todas las publicaciones y suscripciones mezcladas en una base de datos; por ejemplo, si tiene más de una publicación en una base de datos de publicaciones, MSmerge_contents contiene filas de artículos en todas las publicaciones.
Seguimiento de cambios para tablas sin filtrar
Tablas del sistema
Las tablas del sistema usadas para las tablas sin filtrar y filtradas contienen los metadatos siguientes:
MSmerge_contentscontiene una fila para cada fila insertada o actualizada en una tabla publicada de la base de datos.MSmerge_tombstonecontiene una fila para cada fila eliminada de una tabla publicada en la base de datos.MSmerge_genhistorycontiene una fila para cada generación. Una generación es una colección de cambios que se entregan a un publicador o suscriptor. Las generaciones se cierran cada vez que se ejecuta el Agente de mezcla; Los cambios posteriores de una base de datos se agregan a una o varias generaciones abiertas.
Proceso de seguimiento de cambios
El siguiente proceso de seguimiento de cambios se usa para todas las tablas sin filtrar:
Cuando se produce una inserción o actualización en una tabla publicada, se activa el desencadenador
MSmerge_ins_<GUID>oMSmerge_upd_<GUID>y se inserta una fila en la tabla del sistemaMSmerge_contents. La columnarowguiddeMSmerge_contentscontiene el GUID de la fila insertada o actualizada, lo que indica que la próxima vez que se produzca la sincronización, la fila insertada o actualizada correspondiente en la tabla de usuarios debe enviarse al publicador o a los suscriptores. Si se producen actualizaciones posteriores en una fila de una tabla de usuario, la fila deMSmerge_contentsse actualiza para reflejar este estado.Cuando se produce una eliminación en una tabla publicada, el desencadenador
MSmerge_del_<GUID>se activa y se inserta una fila en la tabla del sistemaMSmerge_tombstone. La columnarowguiddeMSmerge_tombstonecontiene el GUID de la fila eliminada, lo que indica que la próxima vez que se produzca la sincronización, se debe enviar una eliminación al publicador o a los suscriptores para la fila eliminada correspondiente en la tabla de usuarios. Si se hace referencia a la fila eliminada enMSmerge_contents(porque se insertó o actualizó desde la última sincronización), la fila se elimina deMSmerge_contents.
Seguimiento de cambios para tablas filtradas
Tablas del sistema
Además de las tablas del sistema descritas en la sección anterior, tres tablas de la base de datos de publicación contienen metadatos para realizar el seguimiento de los cambios en las tablas filtradas:
MSmerge_partition_groupscontiene una fila para cada partición definida en una publicación. Las particiones pueden ser:Se define explícitamente mediante
sp_addmergepartitiono la página Particiones de datos del cuadro de diálogo Propiedades de la publicación.Se crea automáticamente cuando un suscriptor se sincroniza si el suscriptor requiere una partición que aún no tiene una entrada en
MSmerge_partition_groups.
MSmerge_current_partition_mappingscontiene una fila para cada combinación única de filas enMSmerge_contentsyMSmerge_partition_groups. Por ejemplo, si una fila de una tabla de usuario pertenece a dos particiones y la fila se actualiza, se inserta una fila enMSmerge_contentspara reflejar la actualización y dos filas se insertan enMSmerge_current_partition_mappings, para indicar que la fila actualizada pertenece a las dos particiones.MSmerge_past_partition_mappingscontiene una fila para cada fila que ya no pertenece a una partición determinada. Una fila sale de una partición si:La fila se elimina. Si se elimina una fila de una tabla de usuario, se inserta una fila en
MSmerge_tombstoney una o varias filas se insertan enMSmerge_past_partition_mappings.El valor de una columna usada para el filtrado ha cambiado. Por ejemplo, si un filtro parametrizado se basa en el estado en el que tiene su sede una empresa y esta se traslada, la fila correspondiente a la empresa (y las filas relacionadas en otras tablas) podría pasar de la partición de datos de un comercial a la partición de otro comercial. Si se actualiza una fila de modo que ya no pertenece a una partición, se inserta o actualiza una fila en
MSmerge_contentsy se insertan una o varias filas enMSmerge_past_partition_mappings.
Nota:
Si se usan particiones no superpuestas con una suscripción por partición (un valor de 3 para el parámetro @partition_options de sp_addmergearticle), las tablas del sistema MSmerge_current_partition_mappings y MSmerge_past_partition_mappings no se usan para realizar un seguimiento de las asignaciones de particiones de las filas, ya que cada fila pertenece a solo una partición y solo se puede cambiar en solo un Suscriptor.
Proceso de seguimiento de cambios
El proceso descrito anteriormente (en la sección Seguimiento de cambios para tablas sin filtrar) para tablas sin filtrar también se usa para las tablas filtradas, con las siguientes adiciones:
Cuando se produce una inserción en una tabla publicada, además de los datos que se actualizan o insertan en
MSmerge_contents, se agrega una asignación de particiones aMSmerge_current_partition_mappingspara cada partición a la que pertenece la fila.Cuando se produce una actualización en una tabla publicada, además de los datos que se actualizan o insertan en
MSmerge_contents, si enMSmerge_current_partition_mappingsno existe una asignación de particiones para cada partición a la que pertenece la fila, se agrega una. Si la actualización dio lugar a que una fila se moviera de una partición a otra, se actualiza una fila enMSmerge_current_partition_mappingsy se agrega aMSmerge_past_partition_mappings.Cuando se produce una eliminación en una tabla publicada, además de una fila que se inserta en
MSmerge_tombstone, se elimina una fila deMSmerge_current_partition_mappingsy se agrega aMSmerge_past_partition_mappings.
Cambiar enumeración
Tablas y procedimientos del sistema
Cuando se ejecuta el Agente de mezcla, los cambios se enumeran mediante varias tablas del sistema y procedimientos almacenados:
MSmerge_genhistorycontiene una fila para cada generación. Una generación es una colección de cambios que se entregan a un publicador o suscriptor. Las generaciones se cierran cada vez que se ejecuta el Agente de mezcla; Los cambios posteriores de una base de datos se agregan a una o varias generaciones abiertas.sysmergesubscriptionscontiene información sobre las suscripciones, incluido un registro de las últimas generaciones de cambios que un nodo ha enviado y recibido. En la base de datos de publicación, esta tabla contiene una fila para el publicador y una fila para cada suscriptor. En una base de datos de suscripciones, esta tabla normalmente contiene una fila para el suscriptor y una fila para el publicador.MSmerge_generation_partition_mappingssolo se usa para tablas filtradas, registrando si una generación determinada contiene cambios relevantes para una partición determinada. Esta tabla de la base de datos de publicación contiene una fila para cada combinación única de filas deMSmerge_genhistoryyMSmerge_partition_groups.sp_MSmakegenerationcierra todas las generaciones abiertas al principio del proceso de enumeración.sp_MSenumchangesenumera los cambios de las tablas (varios procedimientos relacionados que tienen nombres que comienzan porsp_MSenumchangestambién se usan en este proceso).sp_MSgetmetadatadetermina si un cambio de un nodo se debe aplicar en otro nodo como inserción, actualización o eliminación.
Cambio del proceso de enumeración
El siguiente proceso se produce durante la enumeración de cambios:
Al procedimiento
sp_MSmakegenerationdel sistema se le llama:Para las tablas sin filtrar y filtradas, este procedimiento cierra todas las generaciones abiertas a las que se hace referencia en
MSmerge_genhistory(las generaciones cerradas tienen un valor de1o2en la columnagenstatus).Para las tablas filtradas, este procedimiento rellena la tabla
MSmerge_generation_partition_mappingsdel sistema . Si una generación contiene uno o varios cambios relevantes para una partición, se inserta una fila en la tabla del sistema. Si una generación no contiene ningún cambio relevante para una partición determinada, no se inserta una fila enMSmerge_generation_partition_mappingsy los cambios no se enumeran para ningún suscriptor que reciba esa partición.
Se llaman al procedimiento almacenado
sp_MSenumchangesy a los procedimientos relacionados. Estos procedimientos enumeran los cambios que se produjeron desde la última vez que se produjo la sincronización:Los procedimientos determinan primero la generación en la que se inicia la enumeración, en función de las columnas
sentgen(última generación enviada) yrecgen(última generación recibida) de la tablasysmergesubscriptions.Por ejemplo, al determinar qué cambios de las generaciones se deben enumerar para un suscriptor determinado, se comparan el
sentgendel suscriptor (almacenado en la base de datos de publicación) y elrecgendel suscriptor (almacenado en la base de datos de suscripción). Si los valores son los mismos (lo que indica que el Suscriptor recibió correctamente la última generación enviada desde el Publicador), los cambios se enumeran a partir de la próxima generación enMSmerge_genhistory. Si los valores no son los mismos, se usa la parte inferior de los dos valores para asegurarse de que se envían todos los cambios necesarios.A continuación, los procedimientos enumeran los cambios:
Para las tablas sin filtrar, todos los cambios contenidos en las generaciones después de la generación en
sentgenorecgense enumeran:MSmerge_genhistoryse combinan conMSmerge_contentsyMSmerge_tombstonepara determinar qué cambios se deben enviar.En el caso de las tablas filtradas,
MSmerge_generation_partition_mappingsestá unido a:MSmerge_current_partition_mappingsyMSmerge_contents; yMSmerge_past_partition_mappingsMSmerge_tombstonepara determinar qué cambios son pertinentes para la partición que recibe el suscriptor.
Se llama al procedimiento
sp_MSgetmetadataalmacenado para determinar si se debe aplicar un cambio como inserción, actualización o eliminación. En este momento se llevan a cabo la detección y la resolución de conflictos; para más información, consulte Cómo la replicación de mezcla detecta y resuelve conflictos.
Contenido relacionado
- Replicación de mezcla
- MSmerge_contents (Transact-SQL)
- MSmerge_current_partition_mappings
- MSmerge_generation_partition_mappings (Transact-SQL)
- MSmerge_genhistory (Transact-SQL)
- MSmerge_partition_groups (Transact-SQL)
- MSmerge_past_partition_mappings (Transact-SQL)
- MSmerge_tombstone (Transact-SQL)
- sp_addmergearticle (Transact-SQL)
- sp_addmergepartition (Transact-SQL)
- sysmergearticles (Transact-SQL)
- sysmergesubscriptions (Transact-SQL)
- Filtros de combinación
- Filtros con parámetros: filtros de fila con parámetros