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.
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