- Tabela odnotowuje zmiany wprowadzane w konfiguracji i strukturze bazy — nie w danych operacyjnych.
- Znacznik
CUSTOMrozdziela zmiany rozwiązania podstawowego od modyfikacji wykonanych dla konkretnego wdrożenia. - Numer
NRIDREVspina wpisy należące do jednej operacji, aWERSJAwiąże je z wydaniem oprogramowania. - Tabela nie ma zdefiniowanego indeksu, także klucza głównego — przy dłuższej historii warto to uzupełnić.
Do czego służy tabela [dbo].[_revision_sql]
Aktualizacja systemu magazynowego rzadko sprowadza się do podmiany plików. Dochodzą kolumny, zmieniają się definicje zapytań, powstają nowe pozycje menu. Po roku pytanie „skąd wzięła się ta zmiana i kto ją wprowadził” bywa trudniejsze, niż powinno. Tabela [dbo].[_revision_sql] odpowiada na nie, prowadząc dziennik zmian systemowych.
Kluczowe jest rozróżnienie w kolumnie CUSTOM. Zmiany rozwiązania podstawowego przychodzą z aktualizacją i dotyczą wszystkich instalacji. Modyfikacje oznaczone jako niestandardowe powstały na potrzeby konkretnego klienta i istnieją tylko u niego. To rozróżnienie decyduje o tym, czy przy najbliższej aktualizacji zmiana zostanie zachowana, czy nadpisana.
Opis o pojemności pięciu tysięcy znaków jest tu polem najważniejszym i jednocześnie najczęściej zaniedbywanym. Wpis „poprawki” nie mówi nic; wpis wskazujący, która definicja została zmieniona i po co, oszczędza godzin pracy przy późniejszej diagnozie. Numer rewizji i numer wersji pozwalają zebrać powiązane wpisy w spójną całość.
Rozróżnienie pochodzenia zmiany rozstrzyga, czy przetrwa ona najbliższą aktualizację systemu.
Budowa tabeli — wykaz kolumn
Dziewięć kolumn opisuje samą zmianę, jej autora oraz kontekst wydania.
| Kolumna | Typ | Wymagana | Znaczenie |
|---|---|---|---|
CUSTOM | bit wartość logiczna 0/1 | nie | Wskaźnik, czy wpis dotyczy rozwiązania podstawowego (root) czy niestandardowego (custom) dla klienta |
DATA_ZMIAN | datetime data i godzina | nie | Data i czas wprowadzenia zmian w bazie danych |
ID_REVISION_SQL | int liczba całkowita | tak | Unikalny identyfikator wiersza w tabeli |
KIEDY | datetime data i godzina | tak | Data i czas wykonania wpisu w bazie danych |
LOGIN | varchar(50) tekst do 50 znaków | tak | Login użytkownika, który dokonał zmiany w zapisie |
NRIDREV | bigint liczba całkowita 64-bitowa | tak | Unikalny numer rewizji, łączący poszczególne zapisy w ramach jednej rewizji |
OPIS | varchar(5000) tekst do 5000 znaków | tak | Opis wprowadzonych zmian w bazie danych |
ROLA | varchar(5) tekst do 5 znaków | nie | Rola użytkownika, który wprowadził modyfikacje |
WERSJA | varchar(50) tekst do 50 znaków | nie | Numer wersji aktualizacji, jeśli dotyczy więcej niż jednego wpisu w tabeli |
Kolumna DATA_ZMIAN i KIEDY nie są tym samym: pierwsza to moment wprowadzenia zmiany w bazie, druga — moment zapisania wpisu w dzienniku. Przy zmianach dokumentowanych po fakcie obie wartości się różnią.
Tabela bez klucza głównego — co z tego wynika
W definicji tej tabeli nie zdefiniowano żadnego indeksu, również klucza głównego. Przy kilkuset wpisach nie ma to praktycznego znaczenia, ale warto rozumieć konsekwencje.
| Obszar | Skutek | Zalecenie |
|---|---|---|
| Odczyt historii | Każde zapytanie przegląda całą tabelę | Indeks na kolumnie KIEDY przy kilku tysiącach wpisów |
| Wyszukiwanie po rewizji | Brak wsparcia, mimo że to główny sposób grupowania | Indeks na kolumnie NRIDREV |
| Duplikaty wpisów | Nic ich nie blokuje | Sprawdzenie przed założeniem ograniczenia unikalności |
| Odwołania z innych tabel | Niemożliwe — brak kolumny do wskazania | Klucz główny na ID_REVISION_SQL |
Kolumna ID_REVISION_SQL jest oznaczona jako wymagana i pełni rolę identyfikatora, brakuje jej jedynie formalnego ograniczenia.
Dziennik zmian systemowych rośnie znacznie wolniej niż rejestry operacyjne — przy typowym wdrożeniu to kilkadziesiąt wpisów rocznie. Uzupełnienie indeksów jest więc raczej porządkiem niż pilną potrzebą. Warto je jednak rozważyć przy instalacjach utrzymywanych od wielu lat albo obsługujących kilka baz z jednego miejsca.
Jak korzystać z tabeli w praktyce
Przy prowadzeniu dziennika zmian systemowych obowiązują następujące zasady:
- Opisuj zmianę tak, żeby dało się ją zrozumieć bez dostępu do samej bazy — nazwa zmienionej definicji i powód wystarczą.
- Ustawiaj znacznik
CUSTOMzgodnie ze stanem faktycznym; to on rozstrzyga, czy zmiana przetrwa aktualizację. - Wypełniaj kolumnę
WERSJAprzy zmianach wchodzących razem z wydaniem — pozwala zebrać je w spójną całość. - Grupuj powiązane modyfikacje wspólnym numerem
NRIDREVzamiast zapisywać je jako niezależne wpisy. - Zestawiaj dziennik z tabelą
_dbupprzy diagnozie różnic między środowiskami — pierwsza opisuje zamiar, druga wykonanie. - Rozważ założenie klucza głównego i indeksu na kolumnie
KIEDYprzy instalacjach utrzymywanych od lat.
Zmiany wdrożeniowe z ostatniego półrocza — te, które wymagają zabezpieczenia przed aktualizacją systemu:
SELECT DATA_ZMIAN,
KIEDY,
LOGIN,
ROLA,
WERSJA,
NRIDREV,
LEFT(OPIS, 250) AS OPIS_ZMIANY
FROM dbo._revision_sql
WHERE CUSTOM = 1
AND ISNULL(DATA_ZMIAN, KIEDY) >= DATEADD(MONTH, -6, GETDATE())
ORDER BY NRIDREV DESC, KIEDY DESC;
Funkcja ISNULL jest tu potrzebna, bo kolumna daty zmiany dopuszcza wartość pustą — przy wpisach uzupełnianych po fakcie bywa niewypełniona.
Warto też ustalić, kto ten dziennik prowadzi. W praktyce wpisy powstają wtedy, gdy zmianę wprowadza osoba przyzwyczajona do dokumentowania swojej pracy — i znikają, gdy robi to ktoś inny. Dziennik uzupełniany wybiórczo jest gorszy niż jego brak, bo tworzy złudzenie kompletności: skoro nie ma wpisu, znaczy że nic nie zmieniano, a to nieprawda. Rozwiązaniem jest włączenie wpisu do procedury wdrażania zmiany, na równi z jej przetestowaniem.
Dziennik zmian systemowych jest tak przydatny, jak staranne są jego opisy. Wpis „poprawki” zapisany dwa lata temu nie pomoże nikomu; jedno zdanie mówiące, co i po co zmieniono, potrafi zaoszczędzić dnia pracy przy diagnozie różnicy między dwoma wdrożeniami.
Powiązane tabele i dokumentacja
Dziennik zmian systemowych czyta się razem z pozostałymi zapisami dotyczącymi wersji i konfiguracji: