9

Per molto tempo, abbiamo voluto creare un sistema di gestione dei casi in cui nessuna storia è mai andata persa. Quando viene apportata una modifica, vogliamo registrare tale modifica, ma avere la possibilità di tornare indietro in qualsiasi momento e vedere che aspetto aveva il disco. Volevo porre questa domanda alla comunità di Stack Overflow per vedere quali sono alcuni modi per farlo, esiste già una tecnologia per raggiungere questo obiettivo?Metodi per conservare la cronologia dei dati nel database di SQL Server 2008

risposta

3

io non sono certo come una banca dati temporali come marc_s menzionato opere, ma se si utilizza SQL Server 2008 o versioni successive, è possibile trarre vantaggio dalla sua (CDC), la funzionalità built-in Change Data Capture:

Abilitazione CDC utilizza il log delle transazioni di replica per memorizzare i inserimenti, aggiornamenti ed eliminazioni per un tabella e crea funzioni con valori di tabella che consentono di recuperare le righe a partire da una determinata data/ora o di recuperare solo le modifiche.

Tuttavia, non è possibile fare affidamento su CDC, poiché il log delle transazioni diventerà ingestibilmente grande e lento. Quindi, ciò che si fa è:

  • abilitare CDC,
  • creare una tabella di storia utilizzando lo stesso schema della tabella originale, ma l'aggiunta di un paio di colonne per la memorizzazione di informazioni sulla versione di fila (molto simile a un slowly-changing dimension in un relazionale OLAP database), e
  • creare un lavoro che periodicamente sondaggi le funzioni CDC per i cambiamenti dal suo ultimo carico e li spinge al tavolo la storia

quindi è possibile quindi utilizzare la tabella storia nelle query, unendo ad esso come faresti normalmente, ma con un (i) predicato (i) aggiuntivo (i) per ottenere il record "as-of" qualunque sia la data desiderata.

+1

Sembra un sacco di livelli aggiuntivi per qualcosa che un trigger può fare per popolare la stessa tabella cronologica che hai menzionato. – Chris

+0

Questo è vero; sebbene, a seconda del numero di colonne, potrebbe richiedere anche molti trigger. Ad ogni modo può essere programmato a livello di codice, quindi la complessità non dovrebbe essere troppo di un problema. Entrambi i metodi hanno i loro pro e contro e il modo giusto dipende molto dalle tue esigenze. Ecco una buona discussione: http: // sqlserverplanet.com/design/trigger-service-broker-cdc-or-change-tracking/ – utexaspunk

+0

Uso tabelle separate + Trigger per gestire la cronologia record e altre due tabelle per registrare quando e chi ha apportato le modifiche a quale record. +1 ai trigger! – Achilles

Problemi correlati