Pregunta

Los datos de otro sistema se replican en una base de datos SQL Server 2005 en tiempo real (durante el día, son cientos de transacciones / segundo) usando Goldengate. Me gustaría poder decir si ha habido una transacción recientemente, lo que me dirá si la replicación está ocurriendo actualmente. Incluso en las horas libres, puedo esperar una transacción cada pocos minutos, aunque no sabré en cuál de las 400 tablas entrará.

Aquí está mi proceso actual:

  1. Activador del DIU en la tabla replicada más popular
  2. Fecha de actualizaciones en " Notificación de sincronización " tabla cada vez que hay alguna actividad en esa tabla
  3. El trabajo del Agente SQL se ejecuta cada pocos minutos y compara esta fecha con GETDATE (). Si ha pasado demasiado tiempo, me envía un correo electrónico.

Esto funciona en su mayor parte, pero obtengo falsos positivos si hay actividad en otras tablas, pero no en la monitorizada, lo que puede suceder durante la noche.

¿Alguna otra sugerencia que no sea agregar este mismo disparador a cada tabla de la base de datos? Si agrego los desencadenantes, cómo evitar puntos muertos y contenciones en la " Notificación de sincronización " ¿mesa? Dado que no me importa que la fecha más reciente sea exacta durante los períodos de alta contención, ¿hay alguna forma en que SQL pueda intentar actualizar la fecha pero simplemente omitirla si algún otro proceso la ha bloqueado?

El único "nivel de aplicación" La opción que tengo es TELNET para el monitor Goldengate y pedir el retraso de la réplica, luego raspar la pantalla con los resultados. Estoy abierto a eso, pero me gustaría hacer algo del lado de SQL si es más factible.

¿Fue útil?

Solución

¿Es esto para un trabajo automatizado o algo que desea ver de vez en cuando? Si es lo último, entonces podría usar una herramienta de examen de registro de transacciones (Redgate Log Rescue, Apex SQLLog, probablemente otros).

Otra opción abierta para usted es mirar sysindexes (SQL Server 2000: dbo.sysindex; 2005: sys.sysindexes). La columna rowmodctr (para citar MSDN) " Cuenta el número total de filas insertadas, eliminadas o actualizadas desde la última vez que se actualizaron las estadísticas para la tabla " . Es posible que no le devuelva todo lo que necesita saber, pero, siempre que tenga índices de cobertura, le indicará cuántos y dónde se han producido los cambios si se muestrea de forma regular.

Otros consejos

Puede verificar SELECT * FROM :: fn_dblog (@startLSN, NULL) y ver si alguna operación LOP_MODIFY_ROW ocurrió desde la última verificación (desde la última LSN que revisó) .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top