SQL Server Change Data Capture es una característica que lee datos históricos de los registros de transacciones de SQL Server y los almacena en una tabla especial.
Mediante el uso de funciones especiales de valores de tabla (TVF), permite al usuario consultar estos datos, lo que permite obtener todos los cambios en una tabla específica o solo los cambios netos que resultaron de los cambios dentro de un tiempo específico.
CDC tiene ciertas ventajas
- Se puede configurar para rastrear solo ciertas tablas o columnas.
- Es capaz de manejar cambios de modelo hasta cierto punto.
- No afecta el rendimiento tanto como los desencadenantes porque funciona con los registros de transacciones.
- Se habilita / deshabilita fácilmente y no requiere columnas adicionales en la tabla que se deban rastrear.
También tiene algunas desventajas:
- La cantidad de datos del historial puede llegar a ser enorme rápidamente.
- No puede rastrear quién realizó los cambios (al menos no para las eliminaciones).
- Los datos del historial tardan un poco en ponerse al día, ya que se basan en los registros de transacciones.
- Depende del Agente SQL Server. Si el Agente no se está ejecutando o se bloquea, no se realiza un seguimiento del historial.
He leído bastante sobre CDC y aunque ahora sé cómo usarlo, todavía no estoy seguro de si es la herramienta adecuada para mí.
- ¿Para qué tareas / escenarios es CDC la herramienta adecuada? (p. ej. ¿Permitir a los usuarios restaurar un objeto de datos en un momento determinado? ¿Auditoría? ¿Mostrar el historial completo de datos?)
- ¿Cuándo debería preferir no usar CDC, sino recurrir a una solución personalizada basada en disparadores?
- ¿Está bien usar CDC en una base de datos operativa y hacer uso de los datos de CDC dentro de una aplicación operativa? (por ejemplo, mostrándolo al usuario final) ¿ O es claramente un mal uso de esta función?
Comúnmente escucho que CDC es una herramienta de auditoría, pero ¿no es eso para lo que sirve SQL Server Audit ? ¿Son ambas herramientas diferentes para la misma tarea? ¿O pueden los CDC usarse para otras cosas?
Mi escenario actual es que me piden que construya un marco de datos confiable que se supone que es la base para múltiples aplicaciones futuras. Los requisitos exactos son borrosos, pero uno es que debería poder rastrear el historial de datos y restaurar las entradas más antiguas junto con todos los datos relacionados de otras tablas. Estoy evaluando los CDC en este momento como una opción, pero no estoy seguro si este es el camino a seguir, porque realmente no puedo encontrar ningún caso de uso recomendado.
Si bien agradezco los consejos para mi escenario específico, las respuestas deberían dar consejos generales sobre cuándo o cuándo no usar Change Data Capture.