SQL Server w logistyce

Tabela _revision_sql w bazie danych SQL Server

Dziennik zmian wprowadzanych w samej bazie — kto, kiedy i co zmienił w rozwiązaniu podstawowym lub wdrożeniowym.

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
  • Tabela odnotowuje zmiany wprowadzane w konfiguracji i strukturze bazy — nie w danych operacyjnych.
  • Znacznik CUSTOM rozdziela zmiany rozwiązania podstawowego od modyfikacji wykonanych dla konkretnego wdrożenia.
  • Numer NRIDREV spina wpisy należące do jednej operacji, a WERSJA wiąż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ść.

Co odnotowuje wpis w dzienniku zmian systemowych
Zmiana ZmianaModyfikacja konfiguracji lub struktury bazy danych
Pochodzenie PochodzenieZnacznik rozdziela rozwiązanie podstawowe od wdrożeniowego
Autor AutorLogin i rola osoby, która wprowadziła modyfikację
Kontekst KontekstNumer rewizji i wersja wiążące powiązane wpisy

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.

Wykaz kolumn tabeli
KolumnaTypWymaganaZnaczenie
CUSTOMbit
wartość logiczna 0/1
nieWskaźnik, czy wpis dotyczy rozwiązania podstawowego (root) czy niestandardowego (custom) dla klienta
DATA_ZMIANdatetime
data i godzina
nieData i czas wprowadzenia zmian w bazie danych
ID_REVISION_SQLint
liczba całkowita
takUnikalny identyfikator wiersza w tabeli
KIEDYdatetime
data i godzina
takData i czas wykonania wpisu w bazie danych
LOGINvarchar(50)
tekst do 50 znaków
takLogin użytkownika, który dokonał zmiany w zapisie
NRIDREVbigint
liczba całkowita 64-bitowa
takUnikalny numer rewizji, łączący poszczególne zapisy w ramach jednej rewizji
OPISvarchar(5000)
tekst do 5000 znaków
takOpis wprowadzonych zmian w bazie danych
ROLAvarchar(5)
tekst do 5 znaków
nieRola użytkownika, który wprowadził modyfikacje
WERSJAvarchar(50)
tekst do 50 znaków
nieNumer 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.

Skutki braku indeksów w dzienniku zmian
ObszarSkutekZalecenie
Odczyt historiiKażde zapytanie przegląda całą tabelęIndeks na kolumnie KIEDY przy kilku tysiącach wpisów
Wyszukiwanie po rewizjiBrak wsparcia, mimo że to główny sposób grupowaniaIndeks na kolumnie NRIDREV
Duplikaty wpisówNic ich nie blokujeSprawdzenie przed założeniem ograniczenia unikalności
Odwołania z innych tabelNiemożliwe — brak kolumny do wskazaniaKlucz 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 CUSTOM zgodnie ze stanem faktycznym; to on rozstrzyga, czy zmiana przetrwa aktualizację.
  • Wypełniaj kolumnę WERSJA przy zmianach wchodzących razem z wydaniem — pozwala zebrać je w spójną całość.
  • Grupuj powiązane modyfikacje wspólnym numerem NRIDREV zamiast zapisywać je jako niezależne wpisy.
  • Zestawiaj dziennik z tabelą _dbup przy diagnozie różnic między środowiskami — pierwsza opisuje zamiar, druga wykonanie.
  • Rozważ założenie klucza głównego i indeksu na kolumnie KIEDY przy 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:

FAQ

Najczęściej zadawane pytania o tabelę _revision_sql

01

Czym ten dziennik różni się od tabeli _revision?

Przedmiotem zapisu. _revision rejestruje zmiany w danych — wartości pól w dokumentach i kartotekach. _revision_sql odnotowuje zmiany w samym systemie: w konfiguracji, definicjach zapytań i strukturze bazy. Pierwszy dotyczy pracy użytkowników, drugi pracy wdrożeniowca.

02

Do czego służy znacznik CUSTOM?

Rozdziela zmiany rozwiązania podstawowego, przychodzące z aktualizacją i wspólne dla wszystkich instalacji, od modyfikacji wykonanych dla konkretnego klienta. To rozróżnienie rozstrzyga, czy przy najbliższej aktualizacji zmiana zostanie zachowana, czy nadpisana — i dlatego warto ustawiać je świadomie.

03

Czym różni się DATA_ZMIAN od KIEDY?

Pierwsza kolumna to moment wprowadzenia zmiany w bazie danych, druga — moment zapisania wpisu w dzienniku. Przy zmianach dokumentowanych na bieżąco obie wartości są zbieżne. Rozbieżność oznacza wpis uzupełniony po fakcie, co samo w sobie bywa użyteczną informacją.

04

Czy brak klucza głównego jest problemem?

Przy typowym wdrożeniu, gdzie powstaje kilkadziesiąt wpisów rocznie — nie. Konsekwencje to brak ochrony przed duplikatami i odczyt całej tabeli przy każdym zapytaniu. Przy instalacjach utrzymywanych od wielu lat albo obsługujących kilka baz z jednego miejsca warto uzupełnić klucz główny oraz indeks na kolumnie z datą.

Słownik pojęć

Słownik pojęć

Pojęcia związane z dokumentowaniem zmian w konfiguracji systemu.

MMigracja danych
Przeniesienie kartotek i historii ze starego systemu do nowego. Etap, na którym najczęściej ujawnia się rzeczywista jakość danych w firmie.
AAktualizacja wersji
Wgranie nowego wydania oprogramowania wraz ze zmianami wynikającymi z przepisów. Wymaga testów na kopii bazy przed wdrożeniem produkcyjnym.
WWdrożenie
Proces uruchomienia systemu w firmie: analiza procesów, konfiguracja, migracja danych, szkolenia i uruchomienie produkcyjne.
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.
RRole i uprawnienia
Mechanizm przypisywania użytkownikom dostępu do funkcji i danych. Zamiast nadawać uprawnienia pojedynczo, przypisuje się je do roli odpowiadającej stanowisku.

Zobacz to w praktyce

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