Compartir a través de


Cómo la replicación de mezcla inicializa las publicaciones y suscripciones

La replicación de mezcla debe inicializar tanto el publicador como el suscriptor antes de que los datos puedan fluir entre ellos. En este artículo se proporciona información sobre los pasos que se producen durante la inicialización.

Inicialización de la publicación

En la lista siguiente se detallan los pasos de inicialización de una publicación, que se producen cuando se ejecuta cada procedimiento almacenado enumerado o después de completar el Asistente para nueva publicación. La inicialización adicional se produce después de que el Agente de instantáneas se ejecute por primera vez para una publicación.

  • sp_replicationdboption

    • La base de datos de publicación está marcada para la replicación. La base de datos no se puede quitar a menos que se quite la replicación.

    • Las tablas del sistema se agregan a la base de datos de publicación (a menos que ya exista una publicación de combinación en la base de datos). Para obtener una lista completa de las tablas del sistema, consulte la sección "Tablas del sistema creadas en las bases de datos de publicación y suscripción" de este artículo.

  • sp_addmergepublication

    • Las entradas para la publicación se agregan a las tablas del sistema.
  • sp_addpublication_snapshot

    • Se agrega una tarea de agente de instantáneas al sistema de agente de SQL Server. El nombre del trabajo tiene el formato <Publisher>-<PublicationDatabase>-<Publication>-<Integer>.
  • sp_addmergearticle

    • Cada objeto replicado está marcado para la replicación. El objeto no se puede eliminar a menos que se quite el artículo correspondiente de todas las publicaciones.

    • Las entradas de cada artículo se agregan a las tablas del sistema.

El resto de la inicialización de la base de datos de publicación se produce durante la ejecución inicial del Agente de instantáneas para una publicación. La base de datos de publicaciones no se reinicia durante las siguientes ejecuciones del agente de instantáneas. Si usa el Asistente para nueva publicación, la instantánea inicial se crea automáticamente después de completar el asistente. Si usa procedimientos almacenados, debe ejecutar el trabajo del agente o ejecutar el agente directamente. Para obtener más información sobre la ejecución de agentes, vea Iniciar y detener un Agente de replicación (SQL Server Management Studio) y Conceptos de ejecutables del Agente de replicación.

La primera vez que se ejecuta el agente de instantáneas para una publicación:

  • Se agrega una columna denominada rowguid a cada tabla publicada, a menos que la tabla ya tenga una columna de tipo de datos uniqueidentifier con el ROWGUIDCOL conjunto de propiedades (en cuyo caso se usa esta columna). La rowguid columna se usa para identificar de forma única todas las filas de cada tabla publicada. Si la tabla se quita de la publicación, se quita la rowguid columna; si se ha usado una columna existente para el seguimiento, la columna no se quita.

  • Los objetos siguientes se crean en la base de datos de publicación para cada tabla publicada (todos los objetos se crean en el dbo esquema):

    • Los desencadenadores de inserción, los desencadenadores de actualización y los desencadenadores de eliminación se agregan a las tablas publicadas para realizar un seguimiento de los cambios. Los desencadenadores se denominan con el formato MSmerge_ins_<GUID>, MSmerge_upd_<GUID>y MSmerge_del_<GUID>. El valor GUID se deriva de la entrada para el artículo en la tabla del sistema sysmergearticles.

    • Los procedimientos almacenados se crean para controlar las inserciones, las actualizaciones y las eliminaciones en las tablas publicadas y para realizar otras operaciones relacionadas con la replicación.

    • Las vistas se crean para administrar inserciones, actualizaciones, eliminaciones y filtrado.

    • Las tablas de conflictos se crean para almacenar información de conflictos. Las tablas de conflictos siguen el esquema de las tablas publicadas: se genera un script para cada tabla publicada y luego se utiliza ese script para crear la tabla de conflictos en la base de datos de la publicación. Las tablas de conflictos se denominan con el formato dbo.MSmerge_conflict_<Publication>_<Article>.

Cada vez que se ejecuta el Agente de instantáneas, se crean los siguientes tipos de archivos (con sus extensiones de archivo correspondientes) para cada artículo de la base de datos de publicación:

  • Esquema (.sch)

  • Restricciones e índices (.dri)

  • Desencadenadores (.trg)

  • Datos de tabla del sistema (.sys)

  • Tablas de conflictos (.cft)

  • Datos (.bcp): no se crean para publicaciones con filtros parametrizados.

    Si la publicación no usa ningún filtro con parámetros, la instantánea contiene los datos de las tablas publicadas en un conjunto de .bcp archivos. Si la publicación usa filtros con parámetros (lo que es típico para las publicaciones de combinación), la instantánea inicial no contiene ningún dato. Los datos se proporcionan usando una instantánea de la partición de un suscriptor, la cual se describe en la sección siguiente.

Inicialización de una suscripción

Cada suscripción se inicializa cuando el agente de mezcla para la suscripción se ejecuta y copia la instantánea inicial en la base de datos de suscripciones. Además del esquema y los datos de los objetos replicados, la instantánea contiene las tablas del sistema, las vistas, los desencadenadores y los procedimientos almacenados que existen en la base de datos de publicación. También se copian una o dos tablas del sistema adicionales en la base de datos de suscripciones. Para obtener una lista completa de las tablas del sistema, consulte la sección Tablas del sistema creadas en las bases de datos de publicación y suscripción de este artículo. Si se reinicializa una suscripción, se sobrescriben todos los objetos replicados y los objetos del sistema de replicación.

Si ninguna de las tablas de la base de datos de publicaciones usa filtros parametrizados, se copiará la misma instantánea de publicación en cada suscriptor. Si se usan uno o varios filtros con parámetros, la forma en que se inicializa cada suscripción se rige por la siguiente lógica:

  • Si la ubicación de la instantánea se proporciona al agente de mezcla en la línea de comandos:

    • Aplique la instantánea desde esta ubicación.
  • De lo contrario, si la instantánea se ha generado previamente:

    • Recupere la ubicación de la instantánea de MSmerge_dynamic_snapshots en la base de datos de publicaciones y aplique la instantánea desde esa ubicación.
  • De lo contrario, si la publicación permite a los suscriptores iniciar instantáneas:

    • Si ya se ha generado una instantánea para otro suscriptor con la misma partición, aplique esa instantánea al suscriptor.

    • De lo contrario, genere y aplique una instantánea al suscriptor.

  • De lo contrario, inicialice el suscriptor usando declaraciones de SELECT contra las tablas de la publicación. Este enfoque es más lento que usar una instantánea para la partición del suscriptor.

Si la transferencia de instantáneas se interrumpe en cualquier momento, se reanuda automáticamente y no vuelve a enviar ningún archivo que ya se haya transferido por completo. La unidad de entrega del Agente de Instantáneas es el archivo bcp para cada artículo de publicación, por lo que los archivos que se entregan parcialmente deben ser entregados nuevamente en su totalidad. Sin embargo, reanudar la instantánea puede reducir significativamente la cantidad de datos transmitidos y garantizar la entrega de instantáneas oportuna incluso si la conexión no es confiable. Para obtener más información sobre cómo crear instantáneas, vea Filtros con parámetros: filtros de fila con parámetros.

Ubicación de la instantánea

La ubicación de la instantánea depende de: la ruta de acceso especificada para la ubicación de instantánea predeterminada o alternativa; si la publicación usa una ruta de acceso UNC o un recurso compartido FTP para la carpeta de instantáneas; y si la publicación usa filtros con parámetros. En estos ejemplos, supongamos que la ubicación de la carpeta de instantáneas es: : \\<MyComputer>\<MyFolder>

  • Si la publicación usa UNC, la primera parte de la ruta es: \\<MyComputer>\<MyFolder>\unc\. Si usa FTP, es \\<MyComputer>\<MyFolder>\ftp\.

  • Si la publicación utiliza UNC y no emplea filtros parametrizados, la ruta de acceso es\\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>

  • Si la publicación utiliza UNC y emplea filtros con parámetros, la ubicación se determina en función de la ruta de acceso a la carpeta de instantáneas y los criterios de filtrado por filas parametrizados para la publicación. Por ejemplo, si el artículo se filtra mediante la HOST_NAME() función y el valor de HOST_NAME() para la partición es SalesLaptop, la ruta de acceso a la instantánea de esa partición es \\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>\SalesLaptop_12, donde 12 es el identificador utilizado internamente para la partición.

Tablas del sistema creadas en las bases de datos de publicación y suscripción

Las tablas siguientes se crean en la base de datos de publicación y en cada base de datos de suscripciones.

Tabla Descripción
MSdynamicsnapshotjobs Contiene información sobre los trabajos de instantánea para publicaciones con filtros parametrizados.
MSdynamicsnapshotviews Realiza un seguimiento de todas las vistas de instantáneas temporales creadas por el Agente de instantáneas. Lo usa el sistema para limpiar las visualizaciones en el caso de un apagado anómalo del Agente SQL Server o del Agente de Instantáneas.
MSmerge_altsyncpartners Realiza un seguimiento de quiénes son los socios de sincronización actuales del publicador.
MSmerge_articlehistory Realiza un seguimiento de los cambios realizados en los artículos durante una sesión de sincronización del Agente de mezcla, con una fila para cada artículo en el que se realizaron cambios.
MSmerge_conflicts_info Realiza un seguimiento de los conflictos que se producen al sincronizar una suscripción con una publicación de mezcla.
MSmerge_contents Contiene una fila para cada fila modificada en la base de datos actual desde que se publicó. El proceso de combinación usa esta tabla para determinar las filas que han cambiado.
MSmerge_current_partition_mappings Contiene una fila para cada partición a la que pertenece una fila modificada determinada.
MSmerge_dynamic_snapshots Rastrea la ubicación de la instantánea para cada partición definida para una publicación de mezcla.
MSmerge_errorlineage Contiene filas que se han eliminado en el suscriptor, pero cuya eliminación no se ha propagado al publicador.
MSmerge_generation_partition_mappings Realiza un seguimiento de si una generación determinada contiene los cambios pertinentes para una partición determinada.
MSmerge_genhistory Contiene 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.
MSmerge_history Contiene filas de historial con descripciones detalladas de los resultados de las sesiones de trabajo anteriores del Agente de mezcla.
MSmerge_identity_range Realiza un seguimiento de los intervalos numéricos asignados a las columnas de identidad para las suscripciones a publicaciones para las que la replicación gestiona automáticamente las asignaciones de intervalos.
MSmerge_metadataaction_request Contiene una fila para cada acción de compensación necesaria. Una acción de compensación se usa para revertir un cambio en un nodo si se produjo un error en el cambio en otro nodo.
MSmerge_partition_groups Contiene una fila para cada partición precalpuesta en una base de datos determinada.
MSmerge_past_partition_mappings Contiene una fila para cada partición a la que una determinada fila modificada solía pertenecer, pero ya no pertenece.
MSmerge_replinfo Contiene una fila para cada suscripción. En esta tabla se realiza un seguimiento de la información interna sobre las generaciones enviadas y recibidas.
MSmerge_sessions Contiene filas de historial con los resultados de sesiones de trabajo anteriores del agente de mezcla.
MSmerge_settingshistory Contiene un historial de cambios realizados en las propiedades de artículo y publicación, con una fila para cada cambio realizado.
MSmerge_tombstone Contiene información sobre las filas eliminadas y permite que las eliminaciones se propaguen a otros suscriptores.
MSrepl_errors Contiene información detallada sobre los errores del agente.
sysmergearticles Contiene una fila para cada artículo de combinación.
sysmergepartitioninfo Contiene información sobre las particiones de cada artículo, con una fila para cada artículo.
sysmergepartitioninfoview Contiene información sobre la partición de los artículos de la tabla.
sysmergepublications Contiene una fila por cada publicación de mezcla.
sysmergeschemaarticles Rastrea artículos de solo esquema, como procedimientos almacenados.
sysmergeschemachange Contiene información sobre los artículos publicados generados por el Agente de instantáneas.
sysmergesubscriptions Contiene una fila para cada suscriptor.
sysmergesubsetfilters Contiene información de filtro de unión para artículos con particiones.

Además, la MSsnapshotdeliveryprogress tabla se crea en cada base de datos de suscripciones y la MSsubscription_properties tabla se crea en cada base de datos de suscripciones que usa una suscripción de extracción:

Tabla Descripción
MSsnapshotdeliveryprogress Realiza un seguimiento de los archivos que se entregaron correctamente al suscriptor cuando se está aplicando una instantánea. Estos datos se usan para reanudar la entrega de archivos en caso de que el Agente de mezcla no entregue todos los archivos durante la sesión.
Propiedades_de_suscripción_MS Contiene la información de parámetros necesaria para ejecutar agentes de replicación en el suscriptor