2008-08-06 15 views
27

Jedną z prostych metod, z których korzystałem w przeszłości, jest po prostu tworzenie drugiej tabeli, której struktura jest podobna do tej, którą chcę kontrolować, a następnie utworzenie wyzwalacza aktualizacji/usuwania na głównej tablicy. Zanim rekord zostanie zaktualizowany/usunięty, bieżący stan zostanie zapisany w tabeli kontroli za pomocą wyzwalacza.Sugestie dotyczące wdrażania tabel kontroli w SQL Server?

Dane skuteczne w tabeli kontroli nie są najbardziej użyteczne i łatwe do raportowania. Zastanawiam się, czy ktoś ma lepszą metodę kontroli zmian danych?

Nie powinno być zbyt wielu aktualizacji tych rekordów, ale są to informacje bardzo poufne, dlatego ważne jest dla klienta, aby wszystkie zmiany były kontrolowane i łatwe do raportowania.

+2

SQL Server 2008 ma wbudowaną obsługę z nową funkcją zmiany przechwytywania danych andyp

+1

Należy zwrócić uwagę, że ta funkcja jest tylko dostępne w edycji Enterprise. – user17060

+0

Funkcja zmiany przechwytywania danych wydaje się być bardziej przydatna do zapewnienia, że ​​obiekty aplikacji są utrzymywane w zgodności z bazą danych, a nie rozwiązaniem audytującym. (Przechowuje na przykład tylko 2 dni zmian.) Nadal będziesz musiał sondować zmiany i zapisywać je w tabeli, więc równie dobrze możesz po prostu tworzyć i używać wyzwalaczy, by pisać do centralnej tabeli kontroli, jak poniżej. Och, a powyższy URL jest uszkodzony, użyj tego [link] (http://msdn.microsoft.com/en-us/library/bb933874.aspx). – BJury

Odpowiedz

17

Ile oczekujesz od zapisu i odczytu tabeli?

Użyłem pojedynczej tabeli kontroli, z kolumnami dla tabeli, kolumny, starej wartości, nowej wartości, użytkownika i ChangeDateTime - generycznych na tyle, aby współpracować z innymi zmianami w DB i podczas gdy wiele danych zostało zapisanych do w tej tabeli, sprawozdania na temat tych danych były na tyle rzadkie, że mogły być uruchamiane w okresach o niskim wykorzystaniu w ciągu dnia.

Dodano: Jeśli ilość danych vs. raportowania jest problemem, tabeli audytu mogą być replikowane do serwera bazy danych tylko do odczytu, co pozwala na generowanie raportów, gdy potrzeby bez ściągają w dół z serwera głównego robi ich praca.

1

Czy są jakieś wbudowane pakiety kontroli? Oracle ma ładną paczkę, która nawet wyśle ​​zmiany audytu na oddzielny serwer poza dostępem każdego złego faceta, który modyfikuje SQL.

Ich przykład jest niesamowity ... pokazuje, jak alarmować kogokolwiek, kto modyfikuje tabele kontroli.

1

OmniAudit może być dobrym rozwiązaniem, jeśli potrzebujesz. Nigdy wcześniej tego nie używałem, ponieważ jestem całkiem zadowolony z pisania własnych procedur audytu, ale brzmi to dobrze.

1

Używam podejścia opisanego przez Grega w jego answer i zapełniać tabelę kontroli procedurą przechowywaną wywoływaną z wyzwalaczy tabel.

6

Do tego używamy dwóch wzorów tabel.

Jedna tabela zawiera dane dotyczące transakcji (baza danych, nazwa tabeli, schemat, kolumna, aplikacja, która spowodowała uruchomienie transakcji, nazwa hosta dla logowania, na którym rozpoczęła się transakcja, data, liczba dotkniętych wierszy i kilka innych).

Druga tabela służy tylko do przechowywania zmian danych, abyśmy mogli cofnąć zmiany w razie potrzeby i zgłosić stare/nowe wartości.

Inną opcją jest użycie narzędzia innej firmy do takich funkcji, jak ApexSQL Audit lub Zmiana funkcji przechwytywania danych w SQL Server.