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
Sì, quella tecnologia esiste sicuramente - è un po 'uno sforzo per implementarlo e farlo correttamente.
Quello che stai cercando è chiamato basi di dati temporali - vedere alcune risorse:
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:
- Change Data Capture (MSDN)
- Basics of Change Data Capture (MSDN)
- Using Change Data Capture
- Sql Server 2008: Change Data Capture (CDC)
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. Numero massimo di database nel server sql 2008
- 2. Inserire dati UTF8 in SQL Server 2008
- 3. Il modo migliore per copiare un database (SQL Server 2008)
- 4. Codice colore Database SQL Server 2008
- 5. Visual Studio 'Progetto server SQL Server 2008' vs 'Progetto database SQL Server 2008'?
- 6. Sql Server 2008 - Eliminazione di un sinonimo
- 7. SQL Server 2008 di posizione Filestream
- 8. SQL Server 2008 Dati verticali su orizzontale
- 9. SQL Server 2008 - creare script di database (schema + dati) con la riga di comando
- 10. SQL Server 2008 best practice di backup
- 11. SQL Server Management Studio 2008 R2 Export Struttura + dati
- 12. Creare un utente per SQL Server 2008?
- 13. Downgrade di SQL Server 2008 a SQL Server 2005
- 14. viste aggiornabili - SQL Server 2008
- 15. Come forzare l'avvio di un database di SQL Server 2008
- 16. Utilizzo di ODBC per la connessione a SQL SERVER 2008
- 17. iOS - Best practice per la sincronizzazione dei database core e dei database dei server
- 18. Gerarchia di SQL Server 2008 Tipo di dati Prestazioni?
- 19. Ripristino del database di SQL Server 2008 su SQL Server 2000
- 20. Livello di compatibilità di SQL Server 2008
- 21. Gestione dei dati di gerarchia nel database
- 22. Rimuovere sql server 2005 express per installare SQL Server 2008
- 23. conserva la cronologia in un database
- 24. Aggiornamento da SQL Server 2008 Express a 2008 Developer
- 25. Procedure consigliate per l'inserimento/aggiornamento di grandi quantità di dati in SQL Server 2008
- 26. SQL Server 2008 Spatial: trova un punto nel poligono
- 27. Memorizzazione dei valori Java Double Infinity e NaN nel database MS SQL 2008
- 28. Qualsiasi utente ha utilizzato il tipo HierarchialID di SQl Server 2008 per archiviare i dati genealogici
- 29. Utilizzando Node.js per la connessione al database di Microsoft SQL Server 2008 (MSSQL)
- 30. Esporta database MS Access a SQL Server 2008 Express
Sembra un sacco di livelli aggiuntivi per qualcosa che un trigger può fare per popolare la stessa tabella cronologica che hai menzionato. – Chris
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
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