Cómo se inicializan publicaciones y suscripciones en la réplica de mezcla

La réplica de mezcla debe inicializar tanto el publicador como el suscriptor para que puedan fluir datos entre ellos. En este tema se proporciona información sobre los pasos que tienen lugar durante la inicialización.

Inicializar la publicación

En la siguiente lista se detallan los pasos de inicialización para una publicación que tienen lugar cuando se ejecuta cada procedimiento almacenado presentado o una vez que ha finalizado el Asistente para nueva publicación. El proceso de inicialización continúa 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 publicaciones se marca para réplica. Esta base de datos no puede quitarse a menos que se quite la réplica.
    • Las tablas del sistema se agregan a la base de datos de publicaciones (a menos que ya haya una publicación de mezcla en la base de datos). Para obtener una lista completa de las tablas del sistema, vea la sección "Tablas del sistema creadas en las bases de datos de publicaciones y suscripciones" de este tema.
  • sp_addmergepublication
    • Se agregan las entradas de la publicación a las tablas del sistema.
  • sp_addpublication_snapshot
    • Se agrega un trabajo del Agente de instantáneas al sistema del Agente SQL Server. El nombre del trabajo tiene el formato: <publicador>-<baseDeDatosDePublicaciones>-<publicación>-<entero>.
  • sp_addmergearticle
    • Cada objeto replicado se marca para réplica. No es posible eliminar el objeto, a menos que se quite el artículo correspondiente de todas las publicaciones.
    • Se agregan las entradas de cada artículo a las tablas del sistema.

El resto de la inicialización de la base de datos de publicaciones se produce durante la ejecución inicial del Agente de instantáneas para una publicación (la base de datos de publicaciones no se vuelve a inicializar durante las siguientes ejecuciones del Agente de instantáneas). Si se utiliza el Asistente para nueva publicación, la instantánea inicial se crea de forma predeterminada una vez que ha finalizado el asistente. Si se utilizan procedimientos almacenados, es necesario ejecutar el trabajo del agente o ejecutar éste directamente. Para obtener más información acerca de la ejecución de agentes, vea Cómo iniciar y detener un agente de réplica (SQL Server Management Studio) y Programming Replication Agent Executables.

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

  • Se agrega una columna denominada rowguid a todas las tablas publicadas, a menos que la tabla ya tenga una columna del tipo de datos uniqueidentifier con la propiedad ROWGUIDCOL definida (en cuyo caso se utiliza dicha columna). La columna rowguid se utiliza para identificar de forma exclusiva cada fila de cada tabla publicada. Si la tabla se quita de la publicación, la columna rowguid se elimina; si se ha utilizado una columna existente para realizar el seguimiento, la columna no se quita.
  • En la base de datos de publicaciones de cada tabla publicada se crean los siguientes objetos (todos los objetos se crean en el esquema dbo):
    • Se agregan desencadenadores Insert, Update y Delete a las tablas publicadas para realizar un seguimiento de los cambios. Los nombres de los desencadenadores tienen el formato: MSmerge_ins_<GUID>, MSmerge_upd_<GUID> y MSmerge_del_<GUID>. El valor GUID se deriva de la entrada del artículo en la tabla del sistema sysmergearticles.
    • Se crean procedimientos almacenados para controlar inserciones, actualizaciones y eliminaciones en las tablas publicadas, así como para realizar otras operaciones relacionadas con la réplica.
    • Se crean vistas para administrar las inserciones, las actualizaciones, las eliminaciones y el filtrado.
    • Se crean tablas de conflictos para almacenar información sobre conflictos. Las tablas de conflictos coinciden con el esquema de las tablas publicadas: se crean secuencias de comandos para cada tabla publicada. Después, las secuencias de comandos se utilizan para crear la tabla de conflictos de la base de datos de publicaciones. Los nombres de las tablas de conflictos tienen el formato: dbo.MSmerge_conflict_<publicación>_<artículo>.

Cada vez que se ejecuta el Agente de instantáneas, se crean los siguientes tipos de archivos (con las extensiones que se indican) para cada artículo de la base de datos de publicaciones:

  • Esquema (.sch)
  • Restricciones e índices (.dri)
  • Desencadenadores (.trg)
  • Datos de tabla del sistema (.sys)
  • Tablas de conflictos (.cft)
  • Datos (.bcp): no se crean para las publicaciones con filtros con parámetros
    Si la publicación no utiliza filtros con parámetros, la instantánea contiene los datos de las tablas publicadas en un conjunto de archivos .bcp. Si la publicación utiliza filtros con parámetros (lo que es típico de las publicaciones de mezcla), la instantánea inicial no contiene ningún dato. Los datos se proporcionan mediante una instantánea de la partición de un suscriptor. Esto se explica en la sección "Inicializar una suscripción".

Inicializar una suscripción

Las suscripciones se inicializan cuando su Agente de mezcla 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 hay en la base de datos de publicaciones (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, vea la sección "Tablas del sistema creadas en las bases de datos de publicaciones y suscripciones" de este tema. Si una suscripción se vuelve a inicializar, se sobrescriben todos los objetos replicados y los objetos del sistema de réplica.

Si ninguna de las tablas de la base de datos de publicaciones utiliza filtros con parámetros, se copia la misma instantánea de publicación en cada suscriptor. Se se utilizan uno o más filtros con parámetros, la forma en que se inicializa cada suscripción se rige por la siguiente lógica:

  • Si se ha proporcionado al Agente de mezcla la ubicación de la instantánea en la línea de comandos:
    • Aplica la instantánea desde esa ubicación.
  • De lo contrario, si la instantánea ha sido generada previamente:
    • Recupera la ubicación de la instantánea de MSmerge_dynamic_snapshots en la base de datos de publicaciones y aplica la instantánea desde esa ubicación.
  • De lo contrario, si la publicación permite a los suscriptores inicializar instantáneas:
    • Si ya se ha generado una instantánea para otro suscriptor con la misma partición, aplica esa instantánea al suscriptor.
    • De lo contrario, genera y aplica una instantánea al suscriptor.
  • De lo contrario, inicializa el suscriptor mediante instrucciones SELECT en las tablas de la publicación. Este sistema es más lento que el uso de una instantánea de la partición del suscriptor.

Si la transferencia de la instantánea se interrumpe en algún momento, continuará inmediatamente y no se volverá a enviar ningún archivo que ya hubiera sido transferido en su totalidad. La unidad de entrega del Agente de instantáneas es el archivo bcp de cada artículo de la publicación, de modo que los archivos entregados parcialmente deben volverse a entregar completamente. No obstante, continuar con la instantánea puede reducir de forma significativa la cantidad de datos transmitidos y garantizar una entrega a tiempo de la instantánea aunque la conexión no sea de confianza. Para obtener más información acerca de la creación de instantáneas, vea Instantáneas para publicaciones de mezcla con filtros 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 predeterminada o alternativa de la instantánea; si la publicación utiliza una ruta UNC o un recurso compartido FTP para la carpeta de instantáneas; y si la publicación utiliza filtros con parámetros. En estos ejemplos, se supone que la ubicación de la carpeta de instantáneas es: \\<miPC>\<miCarpeta>\:

  • Si la publicación utiliza UNC, la primera parte de la ruta de acceso es: \\<miPC>\<miCarpeta>\unc\. Si utiliza FTP, es: \\<miPC>\<miCarpeta>\ftp\.
  • Si la publicación utiliza UNC y no emplea filtros con parámetros, la ruta de acceso es: \\<miPC>\<miCarpeta>\unc\<publicador>_<baseDeDatosDePublicaciones>_<publicación>
  • Si la publicación utiliza UNC y filtros con parámetros, la ubicación se basa en la ruta de acceso de la carpeta de instantáneas y en el criterio de filtro de fila con parámetros de la publicación. Por ejemplo, si el artículo se filtra mediante la función HOST_NAME() 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: \\<miPC>\<miCarpeta>\unc\<publicador>_<baseDeDatosDePublicaciones>_<publicación>\ SalesLaptop_12\, donde 12 es el Id. utilizado internamente para la partición.

Tablas del sistema creadas en las bases de datos de publicaciones y suscripciones

En la base de datos de publicaciones y en cada base de datos de suscripciones se crean las siguientes tablas.

Tabla Descripción

MSdynamicsnapshotjobs (Transact-SQL)

Contiene información sobre los trabajos de instantáneas de las publicaciones con filtros con parámetros.

MSdynamicsnapshotviews (Transact-SQL)

Realiza un seguimiento de todas las vistas de instantáneas temporales creadas por el Agente de instantáneas. El sistema la utiliza para limpiar vistas en caso de un cierre anómalo del Agente SQL Server o del Agente de instantáneas.

MSmerge_altsyncpartners (Transact-SQL)

Realiza un seguimiento de la asociación de quiénes son los asociados de sincronización actuales de un publicador.

MSmerge_articlehistory (Transact-SQL)

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 por cada artículo en el que se han realizado cambios.

MSmerge_conflicts_info (Transact-SQL)

Realiza un seguimiento de los conflictos que se producen al sincronizar una suscripción con una publicación de mezcla.

MSmerge_contents (Transact-SQL)

Contiene una fila por cada fila modificada en la base de datos actual desde que fue publicada. El proceso de mezcla utiliza esta tabla para determinar las filas que han cambiado.

MSmerge_current_partition_mappings

Contiene una fila por cada partición a la que pertenece un fila modificada concreta.

MSmerge_dynamic_snapshots (Transact-SQL)

Realiza un seguimiento de la instantánea de cada partición definida para una publicación de mezcla.

MSmerge_errorlineage (Transact-SQL)

Contiene filas eliminadas del suscriptor, pero cuya eliminación no se ha propagado al publicador.

MSmerge_generation_partition_mappings (Transact-SQL)

Realiza un seguimiento para controlar si una generación concreta contiene algún cambio importante para una partición específica.

MSmerge_genhistory (Transact-SQL)

Contiene una fila por cada generación. Una generación es una colección de cambios que se entregan a un publicador o a un suscriptor. Las generaciones se cierran cada vez que se ejecuta el Agente de mezcla; los cambios posteriores en una base de datos se agregan a una o más generaciones abiertas.

MSmerge_history (Transact-SQL)

Contiene filas de historial con descripciones detalladas de los resultados de las sesiones de trabajo anteriores del Agente de mezcla.

MSmerge_identity_range (Transact-SQL)

Realiza un seguimiento de los intervalos numéricos asignados a las columnas de identidad de las suscripciones a publicaciones en las que la réplica está administrando automáticamente las asignaciones de intervalos.

MSmerge_metadataaction_request (Transact-SQL)

Contiene una fila por cada acción de compensación necesaria. Una acción de compensación se utiliza para revertir un cambio en un nodo si se ha producido un error en el cambio en otro nodo.

MSmerge_partition_groups (Transact-SQL)

Contiene una fila por cada partición precalculada de una base de datos concreta.

MSmerge_past_partition_mappings (Transact-SQL)

Contiene una fila por cada partición a la que que pertenecía una fila modificada, pero a la que ya no pertenece.

MSmerge_replinfo (Transact-SQL)

Contiene una fila por cada suscripción. Esta tabla hace un seguimiento de la información interna relativa a las generaciones enviadas y recibidas.

MSmerge_sessions (Transact-SQL)

Contiene filas de historial con los resultados de sesiones de trabajo anteriores del Agente de mezcla.

MSmerge_settingshistory (Transact-SQL)

Contiene un historial de los cambios realizados en las propiedades de artículos y publicaciones, con una fila para cada cambio realizado.

MSmerge_tombstone (Transact-SQL)

Contiene información sobre las filas eliminadas y permite propagar las eliminaciones a otros suscriptores.

MSrepl_errors (Transact-SQL)

Contiene información detallada sobre cualquier error de un agente.

sysmergearticles (Transact-SQL)

Contiene una fila por cada artículo de mezcla.

sysmergepartitioninfo (Transact-SQL)

Contiene información sobre las particiones de cada artículo, con una fila por cada artículo.

sysmergepartitioninfoview (Transact-SQL)

Contiene información de particiones para los artículos de una tabla.

sysmergepublications (Transact-SQL)

Contiene una fila por cada publicación de mezcla.

sysmergeschemaarticles (Transact-SQL)

Realiza un seguimiento de los artículos de sólo esquema, como los procedimientos almacenados.

sysmergeschemachange (Transact-SQL)

Contiene información acerca de los artículos publicados generados por el Agente de instantáneas.

sysmergesubscriptions (Transact-SQL)

Contiene una fila por cada suscriptor.

sysmergesubsetfilters (Transact-SQL)

Contiene información de filtro de combinación para los artículos con particiones.

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

Tabla Descripción

MSsnapshotdeliveryprogress (Transact-SQL)

Realiza un seguimiento de los archivos que se han entregado correctamente al suscriptor cuando se aplica una instantánea. Estos datos se utilizan para continuar con la entrega de archivos en caso de que el Agente de mezcla no entregue todos los archivos durante la sesión.

MSsubscription_properties (Transact-SQL)

Contiene la información de parámetros necesaria para ejecutar agentes de réplica en el suscriptor.

Vea también

Conceptos

Cómo funciona la réplica de mezcla

Otros recursos

sp_addmergearticle (Transact-SQL)
sp_addmergepublication (Transact-SQL)
sp_addpublication_snapshot (Transact-SQL)
sp_replicationdboption (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005