Quindi abbiamo iniziato a esplorare utilizzando l'acquisizione dei dati di modifica su uno dei nostri database di produzione. Vorremmo conoscere il datetime di ogni modifica. Leggendo le procedure dettagliate, i tutorial, ecc., Sembra che l'approccio standard sia utilizzare l'LSN per fare riferimento alla cdc.lsn_time_mapping
tabella di sistema. Questo approccio funziona ma non è molto semplice né efficace quando si parla di centinaia di migliaia di modifiche al giorno.
In un ambiente di test ho apportato le seguenti modifiche alle tabelle delle tracce di modifica. Ho rilasciato una ALTER TABLE
dichiarazione per aggiungere una colonna alla fine chiamata [__ChangeDateTime]
e ho reso il suo valore predefinito GetDate()
. L'approccio sembra funzionare, il rilevamento delle modifiche funziona ancora normalmente, i datetime vengono acquisiti. Ma scherzare con i tavoli di sistema mi rende un po 'nervoso.
Se questo non è un campo di sistema che Microsoft ha aggiunto dall'inizio , devono averne avuto le ragioni. Dato che invece hanno optato per l'LSN per l'approccio cdc.lsn_time_mapping, mi sto preparando per i problemi creando il mio hack in questo modo?
AGGIORNARE:
Scoperto durante i test che GetDate () a volte non è abbastanza preciso per le nostre esigenze: più modifiche condividono contemporaneamente. Consiglia di usare sysdatetime () e datetime2 per spostare il valore al nanosecondo. Opzione per il 2008+ solo ovviamente.