Cómo se administra la caducidad de la suscripción y la limpieza de los metadatos en la replicación de mezcla

Una suscripción a una publicación de mezcla caduca si no se ha sincronizado con el publicador dentro del período de retención de la publicación. El período de retención predeterminado es de 14 días; se establece mediante los parámetros @retention y @retention_period_unit de sp_addmergepublication (Transact-SQL). El parámetro @retention_period_unit requiere que el nivel de compatibilidad de la publicación sea 90RTM o superior. Para los suscriptores que ejecutan versiones anteriores de Microsoft SQL Server, @retention_period_unit se establece siempre en 'día'. Para obtener más información acerca del nivel de compatibilidad, vea la sección sobre el nivel de compatibilidad para las publicaciones de mezcla en el tema Usar varias versiones de SQL Server en una topología de replicación.

Cuando una suscripción caduca, debe reinicializarse, ya que los metadatos de la misma se quitan (vea la sección "Limpieza de metadatos" de este tema para obtener más información). El trabajo de limpieza de suscripciones caducadas que se ejecuta en el publicador elimina las suscripciones que no se han reinicializado. Este trabajo se ejecuta diariamente de forma predeterminada; quita todas las suscripciones de inserción que no se han sincronizado durante el doble del período de retención de la publicación. Por ejemplo:

  • Si una publicación tiene un período de retención de 14 días, una suscripción puede caducar si no se ha sincronizado en 14 días.

    Si el publicador está ejecutando SQL Server 2005 o una versión posterior y el agente de la suscripción es de SQL Server 2005 o una versión posterior, una suscripción caduca únicamente si se han producido cambios en los datos de la partición de esa suscripción. Por ejemplo, imagine que un suscriptor recibe datos únicamente de clientes de Alemania. Si el período de retención se establece en 14 días, la suscripción caducará en el día 14 sólo si se han producido cambios en los datos del cliente alemán en los últimos 14 días.

  • Entre los días 14 a 27 tras la última sincronización, la suscripción se puede reinicializar.

  • 28 días después de la última sincronización, la suscripción es eliminada por el trabajo de limpieza de suscripciones caducadas. Si una suscripción de inserción caduca, se puede quitar por completo, a diferencia de lo que ocurre con las suscripciones de extracción. Las suscripciones de extracción deben limpiarse en el suscriptor. Para obtener más información, vea Cómo eliminar una suscripción de extracción (programación de la replicación con Transact-SQL).

Consideraciones para configurar el período de retención de la publicación

Tenga en cuenta lo siguiente al configurar el período de retención para las publicaciones de mezcla:

  • La limpieza de los metadatos de replicación de mezcla depende del período de retención de la publicación:

    • La replicación no puede limpiar metadatos en las bases de datos de suscripciones y publicaciones hasta que se haya alcanzado el período de retención. Tenga cuidado al especificar un valor elevado para el período de retención, ya que puede afectar negativamente al rendimiento de la replicación. Se recomienda utilizar un valor bajo si puede prever con exactitud que todos los suscriptores se sincronizarán con regularidad dentro del período establecido.

    • Es posible especificar que las suscripciones no caduquen nunca, (valor de 0 para @retention), pero se recomienda encarecidamente no utilizar ese valor, ya que los metadatos no se podrían limpiar.

  • El período de retención de cualquier republicador debe establecerse en un valor igual o menor que el período de retención establecido en el publicador original. Si utiliza asociados de sincronización alternativos, debe usar los mismos valores de retención de la publicación para los publicadores y para todos los asociados de sincronización alternativos. El uso de valores distintos podría conducir a la no convergencia. Si necesita cambiar el valor de retención de la publicación, vuelva a inicializar el suscriptor a fin de evitar la no convergencia de los datos.

  • Si después de realizar una limpieza aumenta el período de retención y una suscripción intenta mezclarse con el publicador (que ya ha eliminado los metadatos), la suscripción no caducará debido al aumento del valor de retención. No obstante, el publicador no tendrá suficientes metadatos para descargar los cambios al suscriptor, lo que daría lugar a una no convergencia.

Limpieza de metadatos

La limpieza de los metadatos en la replicación de mezcla se lleva a cabo mediante el procedimiento almacenado sp_mergemetadataretentioncleanup (Transact-SQL); el momento de la limpieza se basa en el período de retención de la publicación. Cada vez que el Agente de mezcla se ejecuta para una suscripción, llama al procedimiento de limpieza. El procedimiento quita los metadatos que sean más antiguos que el período de retención de la publicación de las siguientes tablas del sistema:

Estas tablas las utilizan todas las publicaciones de una base de datos de publicaciones: si existe más de una publicación, se utiliza siempre el período de retención más largo para determinar cuándo pueden quitarse los metadatos.