Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Wyzwalacz z funkcją GETDATE

Termin Definicja
Wyzwalacz z funkcją GETDATE

Wyzwalacz z funkcją GETDATE zapisuje znacznik czasu operacji w tabeli audytowej.

Znacznik czasu wstawiany automatycznie przy zapisie

Wyzwalacz to fragment kodu przypisany do tabeli i uruchamiany przez serwer bazy danych przy operacji wstawiania, aktualizacji albo usuwania wiersza. Wywołanie funkcji zwracającej bieżącą datę i godzinę wewnątrz takiego kodu pozwala zapisać moment zdarzenia bez udziału aplikacji klienckiej, co jest kluczowe dla wiarygodności dziennika. Aplikację można obejść, można w niej wpisać dowolną datę, natomiast wartość ustalona przez serwer w chwili zapisu jest niezależna od tego, co robi program po drugiej stronie połączenia.

W SQL Server kod wyzwalacza ma do dyspozycji dwie tabele pomocnicze: inserted z nowym stanem wierszy oraz deleted ze stanem sprzed operacji. Przy aktualizacji obie są wypełnione, co pozwala zapisać w dzienniku wartość starą i nową obok siebie.

Różnice między funkcjami zwracającymi czas

Klasyczna funkcja zwraca czas lokalny serwera z dokładnością do kilku milisekund. Jej nowsza odpowiedniczka daje typ o wyższej precyzji, a osobna wersja zwraca czas w strefie uniwersalnej. Wybór ma realne konsekwencje. Dziennik oparty na czasie lokalnym w kraju ze zmianą czasu letniego ma w październiku godzinę, która występuje dwa razy, przez co porządek zdarzeń przestaje być jednoznaczny. Dla systemów pracujących w kilku strefach albo replikowanych między serwerami bezpieczniejszy jest czas uniwersalny lub typ przechowujący razem z wartością przesunięcie strefy.

Skutki uboczne, których nikt się nie spodziewa

Pierwsza i najgroźniejsza pułapka to założenie, że wyzwalacz odpala się raz na wiersz. W SQL Server uruchamia się raz na całą operację, więc kod napisany dla pojedynczego wiersza przy imporcie tysiąca rekordów zapisze do dziennika jeden wpis zamiast tysiąca. Poprawny kod musi operować na zbiorze. Druga to wydajność: każdy zapis do tabeli głównej pociąga zapis do tabeli audytowej w tej samej transakcji, więc masowa aktualizacja wydłuża się wielokrotnie i puchnie dziennik transakcji. Trzecia to rosnąca w nieskończoność tabela dziennika, której nikt nie czyści i która po latach zajmuje więcej miejsca niż same dane.

Osobno trzeba pilnować obsługi błędów. Wyzwalacz, który zgłosi wyjątek, wycofuje całą transakcję, więc błąd w kodzie audytu potrafi zablokować normalną pracę użytkowników wystawiających dokumenty.

Audyt zmian w bazach systemów handlowych

Pytanie kto i kiedy zmienił cenę na dokumencie wraca w firmach regularnie, zwykle po fakcie i w atmosferze pośpiechu. Dobrze zaprojektowany dziennik zdarzeń odpowiada na nie w kilka sekund, a jego brak oznacza żmudne grzebanie w kopiach zapasowych. Wdrażamy i serwisujemy oprogramowanie handlowe oparte o SQL Server, w tym Subiekt, WAPRO i Comarch, zajmujemy się też wydajnością baz i porządkowaniem przerośniętych tabel dziennikowych. Serwer możemy obsłużyć zdalnie albo zabrać własnym transportem, o dowolnej porze dnia i nocy.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę