9

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

3

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ść:

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

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

+0

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

+0

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

Powiązane problemy