Propozycje wdrożenia tabel audytu w SQL Server?

Jedną z prostych metod, których używałem w przeszłości, jest po prostu utworzenie drugiej tabeli, której struktura odzwierciedla tę, którą chcę skontrolować, a następnie utworzenie wyzwalacza aktualizacji/usuwania na głównej tabeli. Przed aktualizacją/usunięciem rekordu bieżący stan jest zapisywany w tabeli audytu za pomocą wyzwalacza.

Chociaż dane w tabeli audytu są skuteczne, nie są najbardziej przydatne lub proste do raportowania. Zastanawiam się, czy ktoś ma lepszą metodę kontroli zmian danych?

Tam nie powinno być zbyt wielu aktualizacji tych rekordów, ale są to bardzo wrażliwe informacje, dlatego ważne jest dla klienta, aby wszystkie zmiany były kontrolowane i łatwo raportowane.

Author: Mark Harrison, 2008-08-06

6 answers

Ile pisania vs. czytania tej tabeli(S) oczekujesz?

Użyłem pojedynczej tabeli audytu, z kolumnami Dla Table, Column, OldValue, NewValue, User i ChangeDateTime - generic wystarczająco uniwersalny, aby pracować z innymi zmianami w DB, i chociaż wiele danych zostało zapisanych do tej tabeli, raporty na tych danych były na tyle rzadkie, że mogły być uruchamiane w okresach o niskim zużyciu w ciągu dnia.

Dodano: Jeśli chodzi o ilość danych a raportowanie, tabela audytu może być replikowane na serwer bazy danych tylko do odczytu, co pozwala na uruchamianie raportów w razie potrzeby bez obciążania serwera głównego od wykonywania ich pracy.

 17
Author: Greg Hurlman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-06 19:35:51

Używamy do tego projektu dwóch tabel.

Jedna tabela przechowuje dane dotyczące transakcji (baza danych, nazwa tabeli, schemat, kolumna, aplikacja, która uruchomiła transakcję,Nazwa hosta dla loginu, który rozpoczął transakcję, Data, liczba dotkniętych wierszy i kilka innych).

Druga tabela jest używana tylko do przechowywania zmian danych, dzięki czemu możemy cofnąć zmiany w razie potrzeby i raportować stare / nowe wartości.

Inną opcją jest użycie do tego narzędzia innej firmy, takiego jak ApexSQL Audyt lub zmiana funkcji przechwytywania danych w SQL Server.

 6
Author: John Emeres,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-10 09:41:37

Znalazłem te dwa linki przydatne:

Korzystanie z CLR i pojedynczej tabeli audytu.
Tworzenie generycznego wyzwalacza audytu za pomocą SQL 2005 CLR

Używanie wyzwalaczy i oddzielnej tabeli audytu dla każdej tabeli poddawanej audytowi.
Jak przeprowadzić audyt zmian w danych SQL Server?

 2
Author: HadleyHope,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-27 12:44:00

Czy są jakieś wbudowane Pakiety audytu? Oracle ma fajny pakiet, który wysyła nawet 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ć o każdej osobie modyfikującej tabele audytu.

 1
Author: Mark Harrison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-06 18:49:23

OmniAudit może być dobrym rozwiązaniem dla Twoich potrzeb. Nigdy wcześniej z niego nie korzystałem, bo jestem całkiem zadowolony pisząc własne procedury kontrolne, ale brzmi dobrze.

 1
Author: GateKiller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-06 19:56:14

Używam podejścia opisanego przez Grega w jego odpowiedzi i wypełniam tabelę audytu procedurą składowaną wywoływaną z wyzwalaczy tabeli.

 1
Author: Chris Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:13:34