| Termin | Definicja |
|---|---|
| SYSTEM_TIME AS OF | SYSTEM_TIME AS OF zwraca stan wiersza tabeli temporalnej z dokładnie wskazanego momentu. SYSTEM_TIME AS OF jako odczyt stanu w czasieSYSTEM_TIME AS OF jest wyrażeniem używanym przy pracy z tabelą temporalną, czyli taką strukturą, w której oprócz bieżących danych przechowywane są także informacje pozwalające odtworzyć wcześniejszy stan rekordów. Najważniejszą cechą tego mechanizmu jest możliwość zapytania o dane tak, jak wyglądały w określonym momencie. Nie chodzi więc wyłącznie o sprawdzenie aktualnej wartości kolumny, lecz o odtworzenie wersji wierszy obowiązującej w przeszłości. W praktyce składnia SYSTEM_TIME AS OF pozwala dołączyć do zapytania punkt odniesienia na osi czasu. Może nim być konkretna data i godzina, znacznik czasu zapisany w zmiennej albo wyrażenie obliczane przez system. Wynik przedstawia dane zgodne ze stanem tabeli z wybranego momentu, o ile system przechowuje odpowiednią historię. Jeżeli wiersz został później zmieniony, usunięty albo zastąpiony inną wersją, zapytanie historyczne może nadal pokazać jego wcześniejszą postać. Takie zapytanie nie jest tym samym co zwykłe sortowanie rekordów według daty modyfikacji. Sortowanie pokazuje wartości zapisane w tabeli, natomiast SYSTEM_TIME AS OF wpływa na sposób, w jaki silnik wybiera wersje rekordów należące do określonego obrazu danych. Dzięki temu można analizować zbiór jako całość, a nie tylko pojedyncze wpisy opatrzone znacznikiem czasu. SYSTEM_TIME AS OF a historia tabel temporalnychTabela temporalna zazwyczaj rozróżnia dane aktualne i dane historyczne albo przechowuje obie warstwy w sposób obsługiwany przez silnik bazy danych. Każda zmiana może powodować zapisanie poprzedniej wersji wiersza wraz z okresem jej obowiązywania. W rezultacie odczyt dla wybranego momentu wybiera te wersje, których przedział ważności obejmuje wskazany czas. Użytkownik otrzymuje spójny obraz danych, nawet jeśli obecna zawartość tabeli wygląda już inaczej. Warto odróżnić odczyt AS OF od odczytów typu BETWEEN, CONTAINED IN lub podobnych konstrukcji służących do badania przedziałów czasu. SYSTEM_TIME AS OF odpowiada na pytanie: jaki stan był widoczny w jednym wskazanym momencie. Zapytanie przedziałowe może natomiast służyć do wyszukania wszystkich wersji, które obowiązywały między początkiem a końcem wybranego okresu. Oba podejścia korzystają z historii, ale służą innym celom analitycznym. Znaczenie ma także rodzaj czasu obsługiwany przez konkretną bazę. Niektóre rozwiązania rozróżniają czas obowiązywania biznesowego od czasu zarejestrowania zmiany przez system. W pierwszym przypadku analizuje się to, od kiedy dana informacja miała obowiązywać według reguł działalności. W drugim sprawdza się, kiedy baza faktycznie przyjęła i zapisała zmianę. SYSTEM_TIME AS OF odnosi się do modelu temporalnego zdefiniowanego przez używany silnik, dlatego przed użyciem należy sprawdzić jego dokumentację oraz sposób interpretowania znacznika czasu. Różnica względem kopii zapasowej jest równie istotna. Kopia może przywrócić stan całej bazy lub określonego obszaru, ale zwykle wymaga osobnej operacji odtworzeniowej. Odczyt temporalny pozwala przeanalizować dawny stan bez zmiany bieżących danych i bez zastępowania aktualnej bazy wcześniejszą kopią. Nie oznacza to jednak, że historia będzie dostępna bez ograniczeń. Okres przechowywania, polityka czyszczenia danych historycznych i konfiguracja retencji mają bezpośredni wpływ na zakres możliwego odczytu. SYSTEM_TIME AS OF w typowych problemach technicznychJednym z częstych zastosowań jest wyjaśnianie, kiedy i w jaki sposób zmieniły się dane. Jeżeli użytkownik zauważy nieprawidłową wartość, można porównać wynik bieżący z obrazem tabeli sprzed wystąpienia problemu. Pozwala to ustalić, czy błąd powstał podczas ręcznej edycji, importu, działania aplikacji czy procesu synchronizacji. Takie porównanie jest szczególnie przydatne wtedy, gdy nie istnieje osobny dziennik zmian zawierający pełny kontekst operacji. Mechanizm bywa stosowany przy analizie przypadkowego usunięcia rekordu. Odczyt wcześniejszego stanu może pokazać, że wpis istniał przed określonym momentem, jakie miał wartości i z jakimi innymi danymi był powiązany. Nie należy jednak automatycznie traktować wyniku jako gotowej instrukcji odtworzenia. Przywracanie danych wymaga oceny zależności, kluczy, ograniczeń integralności i możliwych zmian w tabelach powiązanych. Innym przykładem jest kontrola raportu, który po ponownym uruchomieniu zwrócił inny rezultat niż wcześniej. SYSTEM_TIME AS OF może pomóc odtworzyć dane źródłowe z momentu przygotowania raportu. Dzięki temu można sprawdzić, czy różnica wynikała ze zmiany danych, korekty zapytania, innego filtra, opóźnionego importu lub odmiennej strefy czasowej. W analizie należy zachować ten sam sposób interpretacji dat, ponieważ pozornie identyczny moment może zostać zapisany lub wyświetlony w innej strefie. Problemy pojawiają się także wtedy, gdy wybrany moment wykracza poza zachowany zakres historii. W takim przypadku zapytanie może zwrócić błąd, pusty wynik albo rezultat zależny od reguł konkretnej platformy. Podobna ostrożność jest potrzebna przy bardzo częstych zmianach, dużych tabelach oraz zapytaniach obejmujących wiele obiektów. Odtworzenie dawnego stanu może wymagać odczytu znacznej ilości danych historycznych i obciążać zasoby systemu. SYSTEM_TIME AS OF i praktyczne zasady bezpiecznego użyciaPrzed wykonaniem analizy warto jednoznacznie ustalić, jaki moment ma zostać odtworzony. Nie powinno się opierać wyłącznie na opisie słownym, takim jak „przed importem” albo „z początku dnia”. Lepszym rozwiązaniem jest użycie konkretnego znacznika czasu wraz z informacją o strefie. Jeżeli moment pochodzi z logów aplikacji, należy sprawdzić, czy logi i baza posługują się tym samym standardem czasu. Dobrą praktyką jest rozpoczęcie od zapytania ograniczonego do potrzebnych kolumn i rekordów. Najpierw można sprawdzić niewielki fragment danych, a dopiero potem rozszerzyć analizę o pełny zakres. Przydatne bywa porównanie dwóch obrazów temporalnych: jednego sprzed wykrytej zmiany oraz drugiego z chwili obecnej. Różnice powinny być interpretowane razem z kluczami rekordów, ponieważ ta sama wartość może występować w wielu wierszach. Warto również rozdzielić odczyt diagnostyczny od operacji modyfikującej dane. SYSTEM_TIME AS OF służy do odczytu historycznego i nie powinien być mylony z poleceniem przywracającym rekordy. Jeśli potrzebne jest odtworzenie danych, rezultat należy najpierw zapisać w kontrolowanym miejscu, sprawdzić zależności i dopiero później przygotować osobną operację. Przed zmianą bieżącej zawartości wskazane jest zachowanie kopii oraz udokumentowanie kryteriów wyboru. Przy większych zbiorach należy zwrócić uwagę na plan wykonania, indeksy, partycjonowanie i zakres przechowywanej historii. Zapytanie historyczne może być kosztowniejsze niż zwykły odczyt, zwłaszcza gdy silnik musi przeszukać wiele wersji tych samych rekordów. Ograniczenie przedziału, wybór potrzebnych kolumn i filtr po kluczu mogą znacząco ułatwić pracę. Należy też pamiętać, że usunięta historia, skrócona retencja albo migracja do innej struktury może uniemożliwić pełne odtworzenie dawnego obrazu. Przykładowy schemat logiczny można opisać następująco: najpierw ustala się znacznik czasu, następnie wskazuje tabelę temporalną w trybie SYSTEM_TIME AS OF, a na końcu stosuje zwykłe warunki filtrowania i sortowania. Sama obecność wyrażenia czasowego nie zastępuje kontroli jakości danych. Jeżeli wcześniejszy stan zawierał już błąd, zapytanie wiernie go pokaże, ale nie wskaże automatycznie przyczyny jego powstania. Kiedy SYSTEM_TIME AS OF wymaga wsparcia serwisowegoWsparcie może być potrzebne, gdy odczyt historyczny zwraca niespójne wyniki, pojawiają się komunikaty o braku historii albo nie jest jasne, czy problem dotyczy bazy, aplikacji, kopii zapasowej czy samego urządzenia. Przed przekazaniem sprzętu lub nośnika warto zanotować objawy, moment zauważenia nieprawidłowości oraz wykonywane wcześniej operacje. Takie informacje ułatwiają odtworzenie kolejności zdarzeń i ograniczają ryzyko przypadkowego nadpisania danych. W przypadku komputera używanego do pracy z bazą danych pomoc może obejmować sprawdzenie stabilności systemu, nośnika danych, pamięci, połączeń oraz sposobu wykonywania kopii. Nie należy samodzielnie uruchamiać narzędzi naprawczych na jedynej kopii ważnych danych, jeśli nie ma pewności, jaki będzie ich wpływ. Najpierw powinno się zabezpieczyć materiał do analizy, a następnie przeprowadzić działania na kopii roboczej. W Warszawie konsultację dotyczącą komputera wykorzystywanego przy analizie SYSTEM_TIME AS OF można zlecić firmie Warszawskie Pogotowie Komputerowe 24/7. Przed zgłoszeniem dobrze jest przygotować informacje o systemie, używanej bazie, rodzaju problemu i dostępnych kopiach danych. Pozwala to trafniej określić zakres diagnostyki oraz dobrać bezpieczny sposób dalszego postępowania bez ingerowania w dane, których historia ma zostać zachowana. |