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

System-Versioned Temporal Tables

Termin Definicja
System-Versioned Temporal Tables

Tabele temporalne z wersjonowaniem systemowym automatycznie zachowują historię zmian każdego wiersza.

Na czym polega wersjonowanie systemowe

System-Versioned Temporal Tables to mechanizm dostępny w Microsoft SQL Server od wersji SQL Server 2016, który automatycznie przechowuje kolejne wersje rekordów zmienianych w tabeli. Rozwiązanie składa się z tabeli bieżącej oraz powiązanej z nią tabeli historii. Tabela bieżąca zawiera aktualny stan danych, natomiast tabela historii przechowuje wcześniejsze wersje wierszy wraz z przedziałami czasu, w których te wersje obowiązywały. Okres obowiązywania jest reprezentowany przez dwie kolumny typu datetime2, zwykle oznaczane jako początek i koniec okresu.

Kolumny okresu definiuje się w SQL Server przy użyciu składni GENERATED ALWAYS AS ROW START oraz GENERATED ALWAYS AS ROW END, a następnie wskazuje klauzulą PERIOD FOR SYSTEM_TIME. SQL Server sam ustala wartości tych kolumn podczas operacji modyfikujących dane. Wartości czasu opisują czas systemowy transakcji, a nie czas biznesowy podany ręcznie przez użytkownika. Dzięki temu aplikacja nie musi samodzielnie kopiować zmienianych rekordów do tabeli archiwalnej ani pilnować, aby przedziały czasowe nie nakładały się na siebie.

Co dzieje się podczas zmian danych

Przy aktualizacji wiersza SQL Server zapisuje jego poprzednią wersję w tabeli historii, a w tabeli bieżącej pozostawia wersję zaktualizowaną. Poprzedni wiersz otrzymuje czas zakończenia obowiązywania, natomiast nowy stan otrzymuje nowy czas rozpoczęcia. Przy usunięciu rekordu jego ostatnia wersja również trafia do tabeli historii. Zwykłe zapytanie kierowane do tabeli temporalnej zwraca aktualny stan, dlatego odczyt historii wymaga użycia specjalnej klauzuli FOR SYSTEM_TIME.

SQL Server obsługuje kilka sposobów wyboru danych historycznych. FOR SYSTEM_TIME AS OF zwraca stan tabeli z określonego momentu. FROM ... TO wybiera wersje obowiązujące w przedziale czasu, przy czym granica początkowa jest uwzględniana, a końcowa nie. BETWEEN ... AND uwzględnia obie granice, CONTAINED IN wybiera wersje całkowicie zawarte w podanym przedziale, a ALL zwraca zarówno aktualne rekordy, jak i ich wersje z tabeli historii. Przykładowe zapytanie może mieć postać SELECT * FROM dbo.Orders FOR SYSTEM_TIME AS OF '2026-01-15T10:00:00', jeśli tabela nosi nazwę Orders.

Konfiguracja tabeli i ograniczenia praktyczne

Wersjonowanie włącza się podczas tworzenia tabeli albo później poleceniem ALTER TABLE ... SET (SYSTEM_VERSIONING = ON ...). Można wskazać istniejącą tabelę historii lub pozwolić SQL Server utworzyć ją automatycznie. Tabela historii musi odpowiadać strukturze tabeli bieżącej w zakresie wymaganym przez mechanizm temporalny. SQL Server kontroluje także poprawność kolumn okresu i integralność wersji. Tabela historii nie powinna być traktowana jako zwykły dziennik tekstowy, ponieważ jej rekordy są częścią modelu danych i służą do odtwarzania stanu w czasie.

Temporalne wersjonowanie nie zastępuje kopii zapasowych, replikacji ani dziennika transakcji. Historia może szybko zwiększać rozmiar bazy, szczególnie gdy aplikacja często aktualizuje duże wiersze. Trzeba więc zaplanować indeksy, sposób partycjonowania oraz monitorowanie miejsca na dysku. SQL Server pozwala również wyłączyć automatyczne wersjonowanie przed zmianą struktury tabeli, na przykład przy dodawaniu lub modyfikowaniu kolumn. Operacje administracyjne tego typu wymagają ostrożności, ponieważ nieprawidłowa modyfikacja tabeli historii może utrudnić późniejszą analizę zmian.

Diagnostyka i zastosowanie w serwisie komputerowym

System-Versioned Temporal Tables są użyteczne tam, gdzie trzeba ustalić, jaki stan danych obowiązywał w konkretnym momencie. Można dzięki nim analizować zmiany konfiguracji, rejestrować modyfikacje zleceń, odtwarzać wcześniejsze wartości cenników albo sprawdzać, kiedy zmieniły się parametry urządzenia zapisane w bazie. Mechanizm działa na poziomie SQL Server, więc rejestruje zmiany wykonywane przez polecenia INSERT, UPDATE i DELETE, niezależnie od tego, czy operacja pochodzi z aplikacji, skryptu czy narzędzia administracyjnego.

Podczas diagnostyki problemu należy sprawdzić, czy tabela ma włączone SYSTEM_VERSIONING, jakie kolumny definiują okres oraz gdzie znajduje się tabela historii. Warto także porównać wyniki zwykłego zapytania z zapytaniem FOR SYSTEM_TIME ALL, ponieważ aktualny rekord nie pokazuje wcześniejszych wartości. Trzeba pamiętać, że czas zapisany w kolumnach okresu opisuje chronologię zatwierdzonych zmian w SQL Server; nie jest automatycznie dowodem, kto wykonał operację ani dlaczego została wykonana. Do ustalenia użytkownika lub źródła zmiany potrzebne są dodatkowe mechanizmy audytowe i informacje z aplikacji.

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