Diario de SQL Server

Replicación funciona, pero sigue marcando error


El monitor de replicación es tremendamente útil, pero no por ellos perfecto. Es frecuente que tras reparar un error, nos queden agentes o réplicas que, aun estando funcionando como se espera, persisten en aparecer con el aspa roja del error. Hay una forma rápida de forzar a que se actualice la tabla que el monitor de replicación utiliza para leer los estados, que consiste en ejecutar manualmente el procedimiento sp_MSLoad_replication_status (sin parámetros, ejecutado en la base de datos publicada). De esta manera conseguimos que se quiten esas marcas de error y que nuestro Replication Monitor vuelva a ser de utilidad.

 

La explicación es un extraño comportamiento de los sistemas de monitorización de replicación, se basan en el estado de la última ejecución de los jobs (viene siendo así desde SQL Server 7). El log reader o cualquier agente de suscripción transaccional siempre están corriendo. Sólo se paran si hay algún problema de comunicación, algún dato que no puede ser aplicado. Y cuando se paran, o se han detenido o han finalizado con error. Así, aunque se vuelvan a arrancar, la última ejecución fue un error, y así se queda.

 

Internamente, cualquier puede comprobarlo, se hace una consulta a una tabla que sólo se recarga si está vacía. Si ya tiene datos, sólo se actualizan los mismos. Si resulta que se eliminó una suscripción para volver a crearla después, se eliminan y crean los jobs que se ocupan de la acción, pero de esta tabla de estados no se borran, los registros quedan huérfanos. Como el estado general es el peor de los estados de los distintos agentes implicados, es frecuente que se marque un error por un job que ya ni siquiera existe. El procedimiento almacenado mencionado permite purgar esa tabla, se recarga con lo que haya en ese momento y ya está, tenemos nuestro estado de replicación marcando lo que está teniendo lugar exactamente.

 

 

Comentarios

No hay ningún comentario

Añadir un Comentario: