Od dawna chcieliśmy stworzyć system zarządzania sprawami, w którym nigdy nie utracimy historii. Po wprowadzeniu zmiany chcemy zapisać tę zmianę, ale mamy możliwość powrotu do dowolnej chwili i sprawdzenia, jak wyglądała płyta. Chciałem zadać to pytanie społeczności Stack przepełnienia, aby zobaczyć, co można zrobić, czy jest już technologia, aby to osiągnąć?Sposoby utrzymywania historii danych w bazie danych SQL Server 2008
Odpowiedz
Tak, ta technologia zdecydowanie istnieje - jest to trochę trudu, aby ją wdrożyć i zrobić to poprawnie.
Co szukasz nazywa czasowych baz - patrz niektóre zasoby:
ja nie jestem pewnie jak czasowy w bazie jak marc_s wymienione prace, ale jeśli używasz SQL Server 2008 lub nowszy, można skorzystać z jego wbudowanym przechwytywania zmian danych (CDC) funkcjonalność:
- Change Data Capture (MSDN)
- Basics of Change Data Capture (MSDN)
- Using Change Data Capture
- Sql Server 2008: Change Data Capture (CDC)
Włączanie CDC wykorzystuje dziennik transakcji replikacja przechowywanie wkładek, aktualizacje i usuwa dla tabela i tworzy funkcje o wartościach tabelarycznych, które umożliwiają pobieranie wierszy z określonej daty/godziny lub pobieranie tylko tych zmian.
Nie można jednak polegać wyłącznie na CDC, ponieważ dziennik transakcji stanie się niepokojąco duży i wolny. Więc co zrobić, to:
- umożliwić CDC,
- utworzyć tabelę historię przy użyciu tego samego schematu jak w oryginalnej tabeli, ale dodanie kilku więcej kolumn do przechowywania informacji o wersji rząd (podobnie jak slowly-changing dimension w relacyjnej baza danych OLAP) i
- stworzyć pracę, która będzie okresowo odpytuje Funkcje do CDC dla zmian od ostatniego obciążenia i popycha je do tabeli historii
następnie można następnie użyć tabeli historii w zapytaniach, dołączając do tego, jak zwykle, ale z dodatkowy predykat (y), aby uzyskać rekord "tak jak" w dowolnej dacie.
- 1. jak znaleźć nieużywaną kolumnę w bazie danych (SQL Server 2008).
- 2. Przechowywanie nieznanego typu danych w bazie danych MS SQL Server
- 3. Kodowanie kolorami Bazy danych SQL Server 2008
- 4. Przechowywanie wartości C# DateTimeOffset w bazie danych SQL Server 2005
- 5. Zarządzanie podzestawem bazy danych w SQL Server 2008 Projekt DB
- 6. Czy narzędzia danych SQL Server mogą współpracować z SSIS programu SQL Server 2008?
- 7. Kreator publikacji bazy danych SQL z SQL Server 2008
- 8. Visual Studio "Projekt serwera SQL Server 2008 a projekt bazy danych Sql Server 2008"?
- 9. Jak znaleźć indeksowanie pełnotekstowe w bazie danych w SQL Server 2008?
- 10. Zapisz bajt [] w bazie danych programu SQL Server z C#
- 11. Czy można przekazać parametr wyzwalający w bazie danych SQL Server?
- 12. Drzewo wszystkich zależności w bazie danych SQL Server
- 13. Jak znaleźć największe obiekty w bazie danych SQL Server?
- 14. Czy mogę zapisać "Obiekt" w bazie danych SQL Server?
- 15. Zapisywanie wielowymiarowej tablicy bajtów w bazie danych SQL Server
- 16. Jak wstawić symbol indyjskich rupii w bazie danych (Oracle 10g, MySql 5.0 i Sql Server 2008)?
- 17. określić typ danych z kolumny aliasu w SQL Server 2008
- 18. Czy mamy danych typu array w SQL Server 2008
- 19. Role bazy danych SQL Server
- 20. Przechowywanie sekundy przestępnej w SQL Server 2008
- 21. Hierarchia danych typu SQL Server 2008 Wydajność typu?
- 22. SQL Server Managment Studio 2008 R2 + Struktura eksportu danych
- 23. Mapowanie NHibernate dla SQL Server 2008 Hierarchia Typ danych
- 24. Jak przechowywać rekordy historyczne w tabeli historii w SQL Server
- 25. Generowanie skryptu wszystkich indeksów w bazie danych
- 26. Włóż dane UTF8 do SQL Server 2008
- 27. Najlepszy sposób na reprezentowanie koloru w bazie danych SQL?
- 28. ORDER BY w Sql Server 2008 view
- 29. Przywróć bazę SQL Server 2008 do SQL Server 2000
- 30. TWORZENIE INDEKSU SQL Server 2008
Wygląda na to, że istnieje wiele dodatkowych warstw dla czegoś, co może wywołać czynnik uruchamiający, aby wypełnić tę samą tabelę historii, o której wspomniałeś. – Chris
To prawda; chociaż, w zależności od liczby kolumn, może również wymagać wielu wyzwalaczy. Oba sposoby mogą być programowane skryptowo, więc złożoność nie powinna stanowić problemu. Obie metody mają swoje wady i zalety, a która z nich jest właściwa zależy bardzo od twoich wymagań. Oto dobra dyskusja: http: // sqlserverplanet.com/design/triggers-service-broker-cdc-or-change-tracking/ – utexaspunk
Używam osobnych tabel + wyzwalaczy do zarządzania historią rekordów i dwoma innymi tabelami, aby nagrać, kiedy i kto wprowadził zmiany, do których rekord. +1 do wyzwalaczy! – Achilles