Así que comenzamos a explorar el uso de la captura de datos de cambios en una de nuestras bases de datos de producción. Nos gustaría saber la fecha y hora de cada cambio. Leyendo los tutoriales y tutoriales, etc., parece que el enfoque estándar es utilizar el LSN para relacionarse con la cdc.lsn_time_mapping
tabla del sistema. Este enfoque funciona, pero no es muy directo ni eficaz cuando se habla de cientos de miles de cambios por día.
En un entorno de prueba, realicé el siguiente ajuste en las tablas de seguimiento de cambios. Emití una ALTER TABLE
declaración para agregar una columna al final llamado [__ChangeDateTime]
e hice su valor predeterminado GetDate()
. El enfoque parece funcionar, el seguimiento de cambios todavía funciona normalmente, se están capturando las fechas y horas. Pero jugar con las tablas del sistema me pone un poco nervioso.
Si este no es un campo del sistema que Microsoft agregó desde el principio , deben haber tenido sus razones. Dado que en su lugar optaron por el LSN para el enfoque cdc.lsn_time_mapping, ¿me estoy preparando para los problemas creando mi propio truco de esta manera?
ACTUALIZAR:
Descubrimos durante las pruebas que GetDate () a veces no es lo suficientemente preciso para nuestras necesidades: múltiples cambios que se comparten al mismo tiempo. Se recomienda usar sysdatetime () y datetime2 para mover el valor al nanosegundo. Opción para 2008+ solo obviamente.
La única advertencia que daría es que esas tablas se eliminan automáticamente cuando CDC está deshabilitado. La columna no se volverá a crear automáticamente cuando la vuelva a alinear
fuente