SQL Server w logistyce

Tabela _error w bazie danych SQL Server

Rejestr błędów zgłoszonych przez aplikację — wiąże komunikat z użytkownikiem, dokumentem i momentem wystąpienia.

sql.server.net.pl/sql/
Uśmiechnięty analityk w garniturze przy szerokim monitorze
Uśmiechnięty analityk w garniturze przy szerokim monitorze
W skrócie
  • Każdy wiersz łączy treść błędu z kontekstem: kto go wywołał, na którym dokumencie i w którym module.
  • Kolumna TYTUL pełni funkcję kategorii zdarzenia i pozwala grupować powtarzające się problemy.
  • Cztery indeksy obsługują trzy podstawowe pytania: co się dziś wydarzyło, co dotyczyło danego dokumentu i co działo się określonego dnia.
  • Rejestr ma wartość tylko wtedy, gdy ktoś go regularnie przegląda — sam zapis błędu niczego nie naprawia.

Do czego służy tabela [dbo].[_error]

Użytkownik zgłaszający problem rzadko potrafi powtórzyć komunikat, który zobaczył. Zwykle pamięta, że „coś wyskoczyło przy zapisie” i mniej więcej o której godzinie. Tabela [dbo].[_error] zamienia taką relację w konkret: przechowuje pełną treść komunikatu razem z loginem, numerem referencyjnym dokumentu i dokładnym czasem zdarzenia.

Podział na kolumny TYTUL i KOMUNIKAT jest tu istotny. Tytuł opisuje rodzaj zdarzenia i powtarza się dla podobnych przypadków, dzięki czemu nadaje się do grupowania. Komunikat zawiera szczegóły konkretnego wystąpienia — treść wyjątku, wartość, która nie przeszła kontroli, albo odpowiedź usługi zewnętrznej. Pierwsza kolumna służy do znalezienia wzorca, druga do rozwiązania pojedynczego przypadku.

Kolumny PRX i REFNO wiążą błąd z modułem i konkretnym dokumentem, a DDOWOD przechowuje datę zdarzenia gospodarczego, która nie zawsze pokrywa się z datą zapisu. Ta różnica bywa istotna przy błędach ujawniających się dopiero podczas przetwarzania wsadowego.

Od komunikatu na ekranie do rozpoznanej przyczyny
Zdarzenie ZdarzenieAplikacja przerywa operację i zapisuje komunikat w rejestrze
Grupowanie GrupowanieKolumna TYTUL pozwala policzyć wystąpienia tego samego problemu
Analiza AnalizaREFNO i LOGIN wskazują dokument oraz warunki wystąpienia
Weryfikacja WeryfikacjaSpadek liczby wpisów potwierdza skuteczność poprawki

Ostatni krok bywa pomijany. Bez sprawdzenia, czy błąd przestał się pojawiać, poprawka pozostaje domysłem.

Budowa tabeli — wykaz kolumn

Struktura jest zwięzła: identyfikacja wpisu, treść zdarzenia oraz trzy kolumny wiążące błąd z jego kontekstem biznesowym.

Wykaz kolumn tabeli
KolumnaTypWymaganaZnaczenie
DDOWODdate
data
nieData powstania błędu
ID_ERRORint
liczba całkowita
takUniklany identyfikator wiersza tabeli
KIEDYdatetime
data i godzina
takData i czas zapisu błędu
KOMUNIKATvarchar(max)
tekst bez limitu długości
nieOpis błędu powodującego zapis w tabeli
LOGINvarchar(50)
tekst do 50 znaków
nieNazwa użytkownika który wykonał błędną operację - zapis do tabeli
PRXvarchar(5)
tekst do 5 znaków
nieKod PRX dokumentu
REFNOvarchar(20)
tekst do 20 znaków
takNumer referencyjny dokumentu / kartoteki
STAMPtimestamp
znacznik wersji wiersza
takUnikalny identyfikator wiersza / stanu
TYTULvarchar(max)
tekst bez limitu długości
takTytuł zdarzenia

Kolumny KOMUNIKAT i TYTUL mają typ varchar(max), co pozwala zapisać pełny ślad wyjątku. W praktyce warto ograniczyć zapisywaną treść do fragmentu istotnego diagnostycznie — pełne ślady stosu potrafią zdominować objętość tabeli.

Indeksy i wydajność zapytań

Indeksy odpowiadają trzem najczęstszym punktom wyjścia przy diagnozie: czasowi, dacie zdarzenia gospodarczego i konkretnemu dokumentowi.

Indeksy zdefiniowane na tabeli
IndeksKolumnyRodzaj
DDOWODDDOWODzwykły
KIEDYKIEDYzwykły
PK__errorID_ERRORklucz główny
REFNOREFNOzwykły

Indeks na kolumnie KIEDY obsługuje pytanie o ostatnie godziny pracy systemu i jest w praktyce używany najczęściej. Indeks na REFNO pozwala zebrać wszystkie błędy dotyczące jednego dokumentu — przydaje się, gdy użytkownik zgłasza, że „ten dokument w ogóle się nie zapisuje”.

Jak czytać rejestr, żeby coś z niego wynikało

Rejestr błędów bez ustalonego rytmu przeglądania zamienia się w archiwum, do którego nikt nie zagląda. Poniższe podejście sprawdza się przy utrzymaniu instalacji StudioSystem i wymaga kilkunastu minut tygodniowo.

  • Zacznij od liczby, nie od treści. Zestawienie liczby wystąpień w podziale na tytuł zdarzenia od razu pokazuje, co jest problemem systemowym, a co jednorazową awarią.
  • Oddziel błędy użytkownika od błędów systemu. Nieudana kontrola poprawności danych to informacja o procesie albo o szkoleniu, nie o wadzie oprogramowania.
  • Sprawdź rozkład w czasie. Skupienie wpisów w jednej godzinie zwykle wskazuje na zdarzenie zewnętrzne — restart serwera, przerwę w łączu, przeciążenie usługi.
  • Powiąż z jednym użytkownikiem. Błędy występujące wyłącznie u jednej osoby częściej wynikają z uprawnień lub konfiguracji stanowiska niż z kodu.
  • Zamknij pętlę. Po wdrożeniu poprawki wróć do zestawienia za tydzień i sprawdź, czy dana kategoria zniknęła.

Warto też ustalić próg, powyżej którego wpis przestaje być informacją, a staje się zgłoszeniem. Kilka wystąpień miesięcznie mieści się w normalnej pracy systemu; kilkadziesiąt dziennie oznacza, że użytkownicy nauczyli się obchodzić problem i przestali go zgłaszać — co jest gorsze niż awaria, bo pozostaje niewidoczne.

Jak korzystać z tabeli w praktyce

Przy korzystaniu z rejestru błędów sprawdzają się następujące zasady:

  • Grupuj po kolumnie TYTUL, zanim zaczniesz czytać pojedyncze komunikaty — skala problemu jest ważniejsza od jego pierwszego wystąpienia.
  • Ustaw cykliczne zestawienie liczby błędów z ostatniej doby; nagły wzrost jest sygnałem szybszym niż zgłoszenie użytkownika.
  • Wiąż wpis z dziennikiem zdarzeń przez REFNO, jeśli chcesz ustalić, co działo się z dokumentem tuż przed błędem.
  • Zwracaj uwagę na różnicę między KIEDY a DDOWOD — rozbieżność wskazuje na błąd ujawniony przy przetwarzaniu wsadowym, nie przy pracy operatora.
  • Nie zapisuj w komunikacie danych osobowych ani zawartości pól, które im podlegają; rejestr bywa udostępniany szerzej niż dane operacyjne.
  • Archiwizuj wpisy starsze niż kilka miesięcy — do analizy trendów wystarczą liczby, a pełne treści zajmują najwięcej miejsca.

Zestawienie kategorii błędów z ostatniego tygodnia uporządkowane według liczby wystąpień — punkt wyjścia do przeglądu:

SELECT  TYTUL,
        COUNT(*)                 AS WYSTAPIEN,
        COUNT(DISTINCT LOGIN)    AS UZYTKOWNIKOW,
        MIN(KIEDY)               AS PIERWSZY,
        MAX(KIEDY)               AS OSTATNI
FROM    dbo._error
WHERE   KIEDY >= DATEADD(DAY, -7, GETDATE())
GROUP BY TYTUL
HAVING  COUNT(*) > 1
ORDER BY WYSTAPIEN DESC;

Kolumna UZYTKOWNIKOW jest tu istotna: błąd występujący u wielu osób wskazuje na problem systemowy, a u jednej — częściej na uprawnienia albo konfigurację stanowiska.

Rejestr błędów nie naprawia niczego samodzielnie. Jego wartość zaczyna się w momencie, gdy ktoś regularnie zestawia liczby i reaguje na zmiany — a kończy, gdy staje się wyłącznie miejscem, w którym błędy są zapisywane i zapominane.

Powiązane tabele i dokumentacja

Rejestr błędów najczęściej analizuje się razem z pozostałymi zapisami diagnostycznymi systemu:

FAQ

Najczęściej zadawane pytania o tabelę _error

01

Czym różni się kolumna TYTUL od KOMUNIKAT?

TYTUL opisuje rodzaj zdarzenia i powtarza się dla podobnych przypadków, dlatego nadaje się do grupowania i liczenia wystąpień. KOMUNIKAT zawiera szczegóły pojedynczego wystąpienia — treść wyjątku, wartość odrzuconą przez kontrolę poprawności albo odpowiedź usługi zewnętrznej. Pierwsza kolumna służy do znalezienia wzorca, druga do rozwiązania konkretnego przypadku.

02

Po co osobna kolumna DDOWOD obok KIEDY?

KIEDY to moment zapisu wiersza, DDOWOD — data zdarzenia gospodarczego, którego błąd dotyczy. Przy pracy operatora obie wartości są zwykle zbieżne, ale przy przetwarzaniu wsadowym potrafią się różnić o dni. Rozbieżność jest wskazówką, że problem ujawnił się przy przetwarzaniu, a nie przy wprowadzaniu danych.

03

Jak ustalić, czy błąd jest problemem systemowym?

Najprościej licząc, ilu różnych użytkowników go doświadczyło. Zdarzenie występujące u wielu osób i na różnych dokumentach wskazuje na wadę w oprogramowaniu lub konfiguracji systemu. Błąd ograniczony do jednego loginu częściej wynika z uprawnień, ustawień stanowiska albo specyficznego sposobu pracy tej osoby.

04

Czy w rejestrze można zapisywać dane z formularzy?

Ostrożnie. Rejestr błędów bywa udostępniany szerszemu gronu niż dane operacyjne — także osobom spoza firmy przy zgłoszeniu serwisowym. Zapisywanie w komunikacie zawartości pól z danymi osobowymi tworzy kopię tych danych poza kontrolą przyjętą dla tabel operacyjnych, co ma znaczenie dla zgodności z RODO.

Słownik pojęć

Słownik pojęć

Pojęcia przydatne przy diagnostyce i utrzymaniu systemu.

MMicrosoft SQL Server
Serwer relacyjnej bazy danych, na którym pracują aplikacje SoftwareStudio. Odpowiada za spójność danych, uprawnienia dostępu, kopie zapasowe i wydajność zapytań.
IIndeks bazodanowy
Struktura przyspieszająca wyszukiwanie wierszy w tabeli. Dobrze dobrane indeksy skracają czas zapytań, ale spowalniają zapisy i zajmują miejsce na dysku.
ŚŚlad rewizyjny
Nieusuwalny zapis, kto i kiedy zmienił dane w systemie. Podstawa wiarygodności ewidencji podczas audytu i kontroli.
RRODO
Rozporządzenie o ochronie danych osobowych. Wymaga ograniczenia dostępu do danych, rejestrowania operacji na nich i wskazania podstawy przetwarzania.
SSLA
Umowa określająca gwarantowany poziom usługi — czas reakcji, czas naprawy i dostępność systemu. Ustala, czego klient może wymagać od dostawcy.
AAPI
Interfejs programistyczny, przez który dwa systemy wymieniają dane w czasie rzeczywistym. Pozwala zintegrować oprogramowanie magazynowe z ERP, sklepem lub przewoźnikiem.
WWydajność zapytań
Czas, w jakim baza danych zwraca wynik. Zależy od indeksów, planu wykonania i objętości przetwarzanych danych.

Zobacz to w praktyce

Sprawdź, jak systemy SoftwareStudio oparte na MS SQL Server wspierają ten obszar Twojej firmy.