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_TIME FROM TO

Termin Definicja
SYSTEM_TIME FROM TO

SYSTEM_TIME FROM TO zwraca wersje wiersza nakładające się na podany przedział czasowy.

Znaczenie SYSTEM_TIME FROM TO w zapytaniach czasowych

Składnia SYSTEM_TIME FROM TO służy do odczytywania danych przechowywanych w tabeli temporalnej w odniesieniu do wybranego zakresu czasu. Nie chodzi przy tym o zwykłe filtrowanie wartości zapisanej w kolumnie daty, lecz o wskazanie, które wersje wierszy obowiązywały w określonym okresie historii systemowej. Mechanizm pozwala prześledzić zmiany rekordu, odtworzyć wcześniejszy stan danych albo sprawdzić, czy dana informacja była aktywna w chwili związanej z konkretnym zdarzeniem.

W praktyce zakres podany po FROM i TO jest traktowany jako przedział czasu, którego granice mają określone znaczenie dla wyniku. Wiersze są wybierane wtedy, gdy ich okres obowiązywania przecina się z analizowanym zakresem. Oznacza to, że wynik może zawierać kilka wersji tego samego logicznego obiektu, jeżeli w czasie objętym zapytaniem następowały jego modyfikacje. Taka właściwość odróżnia SYSTEM_TIME FROM TO od zapytania skierowanego wyłącznie do bieżącego obrazu tabeli.

Najczęściej stosuje się tę konstrukcję razem z tabelą posiadającą wersjonowanie systemowe. Tabela główna zawiera aktualny stan, natomiast tabela historii przechowuje wcześniejsze wersje. Silnik bazy danych korzysta z okresu systemowego przypisanego do każdego wiersza i na tej podstawie wyznacza, które rekordy należy zwrócić. Dla osoby analizującej dane ważne jest to, że historia może być odczytywana podobnie jak zwykła tabela, ale interpretacja wyniku wymaga uwzględnienia czasu obowiązywania każdej wersji.

SYSTEM_TIME FROM TO a inne sposoby odczytu historii

W porównaniu z zapytaniem odnoszącym się do jednej chwili, wariant FROM TO służy do badania odcinka czasu. Zapytanie punktowe odpowiada na pytanie, jaki stan obowiązywał w konkretnym momencie. Zapytanie zakresowe odpowiada natomiast na pytanie, jakie wersje pojawiały się w trakcie wskazanego przedziału. Jest to istotna różnica podczas tworzenia raportu zmian, analizy audytowej albo ustalania kolejności aktualizacji.

Warto odróżnić ten wariant także od odczytu całej historii. Pobranie wszystkich wersji bez ograniczenia czasowego może zwrócić dużą liczbę rekordów, w tym informacje nieistotne dla bieżącego problemu. Ograniczenie zakresu przez FROM TO ułatwia zawężenie analizy do okresu obejmującego reklamację, zmianę konfiguracji, korektę danych lub inne zdarzenie. Dzięki temu wynik jest czytelniejszy i łatwiejszy do porównania z logami aplikacji.

Przy interpretacji danych nie należy zakładać, że jeden rekord odpowiada zawsze jednemu wierszowi w wyniku. Każda modyfikacja może utworzyć kolejną wersję, a usunięcie rekordu również pozostawia ślad w historii. Jeżeli zapytanie obejmuje dłuższy okres, ten sam identyfikator może wystąpić wielokrotnie. W celu uporządkowania wyniku przydatne bywa sortowanie według identyfikatora oraz początku albo końca okresu obowiązywania.

Granice czasu powinny być przygotowane w sposób jednoznaczny. Należy zwrócić uwagę na typ danych, dokładność zapisu oraz strefę czasową używaną przez aplikację i bazę danych. Różnica pomiędzy czasem lokalnym a czasem zapisanym przez system może spowodować pozorny brak wersji w wyniku. Szczególnej uwagi wymagają także zdarzenia następujące dokładnie na granicy przedziału, ponieważ sposób traktowania końca zakresu wpływa na to, czy dana wersja zostanie uwzględniona.

Typowe problemy przy użyciu SYSTEM_TIME FROM TO

Jednym z częstych problemów jest użycie składni na obiekcie, który nie został skonfigurowany jako tabela z historią systemową. W takiej sytuacji zapytanie może zakończyć się błędem składniowym albo błędem informującym o nieodpowiednim typie tabeli. Przed rozpoczęciem analizy należy więc potwierdzić, że tabela ma zdefiniowany okres systemowy, a wersjonowanie jest aktywne lub że dany silnik obsługuje wymagany sposób odczytu.

Inny problem wynika z mylenia czasu zdarzenia z czasem rejestracji zmiany. Wersjonowanie systemowe opisuje moment, w którym baza danych przyjęła zmianę, a niekoniecznie moment, w którym użytkownik rozpoczął działanie w aplikacji. Opóźniony zapis, kolejka komunikatów lub ponowienie operacji może sprawić, że historia bazy i historia aplikacji będą wskazywały różne chwile. W razie rozbieżności trzeba porównać oba źródła, zamiast uznawać jeden czas za automatycznie nadrzędny.

Trudności może powodować również łączenie wersjonowanej tabeli z innymi tabelami. Jeżeli każda strona połączenia jest analizowana w innym zakresie czasowym, wynik może wyglądać logicznie, lecz nie przedstawiać stanu, który rzeczywiście istniał w jednej wspólnej chwili. Przy raportach historycznych trzeba ustalić, czy celem jest pokazanie wszystkich zmian, czy rekonstrukcja spójnego obrazu danych. W drugim przypadku zakresy czasowe i warunki połączenia powinny być zaprojektowane jako jeden model analizy.

Warto uważać na zapytania zwracające zbyt wiele kolumn. Oprócz danych biznesowych często przydają się kolumny okresu systemowego, ponieważ umożliwiają sprawdzenie, dlaczego dany wiersz trafił do wyniku. Pominięcie tych informacji utrudnia wykrycie nakładających się wersji, nieoczekiwanych przerw lub wielokrotnych zmian dokonanych w krótkim czasie.

Praktyczne wskazówki dla SYSTEM_TIME FROM TO

Analizę najlepiej rozpocząć od jasnego określenia pytania. Jeżeli potrzebne jest ustalenie stanu danych przed zmianą, przydatny będzie zakres kończący się przed momentem modyfikacji. Jeżeli celem jest raport zmian, należy objąć przedziałem cały okres, w którym mogły wystąpić aktualizacje. Takie rozróżnienie ogranicza ryzyko uzyskania wyniku, który zawiera prawidłowe technicznie rekordy, ale nie odpowiada celowi analizy.

Daty używane w zapytaniu powinny być przekazywane jako parametry, a nie składane przez łączenie tekstów pochodzących od użytkownika. Poprawia to czytelność, ogranicza ryzyko błędnej interpretacji formatu i ułatwia ponowne wykorzystanie zapytania. Parametry są szczególnie pomocne wtedy, gdy ten sam raport ma być uruchamiany dla wielu przedziałów czasowych.

Po uzyskaniu wyniku warto sprawdzić kilka przypadków brzegowych: okres bez żadnych zmian, zakres obejmujący dokładnie jedną aktualizację, zakres obejmujący usunięcie rekordu oraz przedział rozciągający się poza najstarszą dostępną historię. Testy tego rodzaju pokazują, czy oczekiwane zachowanie wynika ze składni, czy z dodatkowych filtrów. Dobrą praktyką jest również porównanie wyniku z ręcznie wybranym identyfikatorem, którego historia jest znana.

W środowisku produkcyjnym należy obserwować rozmiar tabeli historii. Długi okres przechowywania i częste aktualizacje mogą zwiększać ilość danych, a tym samym czas odczytu. Pomocne bywają właściwe indeksy, ograniczenie wybieranych kolumn oraz zawężanie zakresu już na początku zapytania. Nie należy jednak usuwać historii bez sprawdzenia wymagań dotyczących audytu, zgodności i możliwości odtworzenia wcześniejszego stanu.

Jeżeli wynik ma służyć jako dowód przebiegu zmian, powinien zostać zapisany razem z parametrami zapytania, momentem wykonania i informacją o źródle danych. Sama lista wersji bez tych danych może być trudniejsza do zweryfikowania po czasie. W dokumentacji warto opisać, czy prezentowany czas oznacza czas systemowy, czas lokalny, czy czas po przeliczeniu na wspólną strefę.

Kiedy zgłosić problem z SYSTEM_TIME FROM TO do serwisu

Wsparcie serwisowe może być przydatne, gdy zapytanie zwraca puste wyniki mimo dostępnej historii, pojawiają się błędy po aktualizacji oprogramowania, tabela historii przestaje być dostępna albo odczyt zakresowy wyraźnie obciąża komputer. Dotyczy to także sytuacji, w której dane są widoczne w aplikacji, lecz nie można ich odnaleźć podczas analizy wersji. Przed zgłoszeniem warto przygotować nazwę tabeli, używany fragment zapytania, zakres czasu oraz opis oczekiwanego rezultatu, bez przekazywania zbędnych danych wrażliwych.

W przypadku komputera stacjonarnego diagnoza kosztuje 200 zł. W odniesieniu do laptopa diagnoza jest darmowa. Warszawskie Pogotowie Komputerowe 24/7 zajmuje się oceną problemów sprzętowych i systemowych, dlatego można zgłosić się wtedy, gdy trudność z odczytem historii łączy się z awarią nośnika, niestabilnością systemu lub problemem z uruchamianiem narzędzi bazodanowych. Przy opisie usterki warto zaznaczyć, czy problem występuje stale, czy tylko dla określonych przedziałów czasu, ponieważ ta informacja ułatwia dalsze rozpoznanie.