| Termin | Definicja |
|---|---|
| Punkt zapisu (SAVEPOINT) | SAVEPOINT to punkt w transakcji, do którego można wycofać zmiany bez anulowania całej operacji. Punkt zapisu (SAVEPOINT) jako bezpieczny etap transakcjiPunkt zapisu, określany w języku baz danych jako SAVEPOINT, jest nazwanym miejscem wewnątrz rozpoczętej transakcji. Pozwala podzielić większą operację na logiczne odcinki i zachować możliwość cofnięcia tylko wybranej części zmian. Dzięki temu nie trzeba od razu anulować całej transakcji, gdy jeden z późniejszych etapów okaże się niepoprawny albo wymaga ponownego wykonania. SAVEPOINT nie zapisuje danych w taki sam sposób jak zatwierdzenie transakcji. Jest raczej znacznikiem kontrolnym utrzymywanym do chwili zakończenia bieżącej transakcji. Mechanizm bywa przydatny wszędzie tam, gdzie pojedyncza operacja obejmuje wiele zależnych działań. Przykładem może być przetwarzanie zamówienia, aktualizacja kilku powiązanych tabel, rejestracja dokumentu albo wykonanie serii zmian podczas importu danych. Po utworzeniu punktu zapisu można kontynuować pracę, a w razie problemu wrócić właśnie do niego. Zmiany wykonane po tym punkcie zostają wycofane, natomiast wcześniejsza część transakcji nadal pozostaje aktywna i może zostać później zatwierdzona. Warto odróżnić punkt zapisu od kopii bezpieczeństwa, dziennika transakcji oraz trwałego zapisu rekordu. SAVEPOINT działa tylko w ramach konkretnej transakcji i nie jest przeznaczony do odzyskiwania danych po awarii całego systemu. Jego zadaniem jest kontrolowanie przebiegu jednej operacji, a nie archiwizowanie zawartości bazy. Po zatwierdzeniu transakcji znaczenie punktów zapisu wygasa, podobnie jak po całkowitym wycofaniu transakcji. Punkt zapisu (SAVEPOINT) na tle COMMIT i ROLLBACKNajłatwiej zrozumieć działanie SAVEPOINT przez porównanie go z poleceniami COMMIT i ROLLBACK. COMMIT kończy transakcję i utrwala wykonane zmiany zgodnie z zasadami używanego systemu bazodanowego. ROLLBACK bez dodatkowego wskazania cofa całą bieżącą transakcję, o ile nie została ona wcześniej zatwierdzona. ROLLBACK TO SAVEPOINT działa wężej: cofa zmiany wykonane od wybranego punktu, pozostawiając wcześniejsze działania w tej samej transakcji. Możliwy jest przykładowy przebieg: rozpoczyna się transakcję, wykonywana jest pierwsza grupa zmian, tworzony jest punkt zapisu, a następnie wykonywana jest kolejna grupa operacji. Jeżeli druga grupa zakończy się błędem, można cofnąć transakcję do wskazanego punktu. Pierwsza grupa zmian nadal istnieje w ramach transakcji, natomiast druga wymaga poprawy albo może zostać pominięta. Po sprawdzeniu danych całość może zostać zatwierdzona lub wycofana. Istotne jest również to, że cofnięcie do SAVEPOINT nie oznacza automatycznego zatwierdzenia wcześniejszych modyfikacji. Dane pozostają częścią otwartej transakcji. Inni użytkownicy i procesy mogą nadal podlegać blokadom wynikającym z tej transakcji, a zasoby mogą być utrzymywane aż do COMMIT albo pełnego ROLLBACK. Z tego powodu punkt zapisu ułatwia obsługę błędów, lecz nie zwalnia z obowiązku rozsądnego zarządzania długością transakcji. W różnych silnikach baz danych szczegóły mogą się różnić. Niektóre systemy pozwalają ponownie użyć nazwy punktu zapisu, inne mają określone zasady dotyczące zagnieżdżania, blokad, wyzwalaczy lub operacji zmieniających strukturę tabel. Dokumentacja konkretnego silnika ma więc znaczenie przed wdrożeniem rozwiązania w działającym środowisku. Punkt zapisu (SAVEPOINT) a typowe problemy z transakcjamiJednym z częstych problemów jest traktowanie SAVEPOINT jako niezależnej transakcji. Punkt zapisu nie może samodzielnie utrwalić danych i nie zastępuje COMMIT. Jeżeli proces zakończy się pełnym ROLLBACK, także zmiany wykonane przed punktem zapisu zostaną anulowane. Jeżeli natomiast transakcja zostanie zatwierdzona, wszystkie pozostawione w niej modyfikacje mogą stać się trwałe, również te, które nie zostały dokładnie sprawdzone. Inny problem pojawia się przy błędnym zarządzaniu nazwami punktów. W dłuższym kodzie kilka podobnie nazwanych znaczników może utrudnić ustalenie, do którego miejsca rzeczywiście następuje powrót. Pomaga stosowanie opisowych nazw związanych z etapem operacji, spójnego układu instrukcji oraz komentarzy wyjaśniających, jakie zmiany powinny zostać zachowane po cofnięciu. Przydatne jest także rejestrowanie błędów wraz z informacją o aktualnym etapie przetwarzania. Nie każda instrukcja zachowuje się tak samo w odniesieniu do punktów zapisu. Operacje dotyczące struktury bazy, zmiany ustawień lub działania zależne od konkretnego silnika mogą mieć szczególne zasady zatwierdzania i wycofywania. Z tego powodu nie należy zakładać, że każdą instrukcję da się cofnąć w identyczny sposób. Weryfikacja na kopii testowej pozwala sprawdzić, czy oczekiwany zakres zmian rzeczywiście zostaje odtworzony. Ryzyko stanowi również pozostawienie otwartej transakcji po obsłużeniu błędu. Samo cofnięcie do SAVEPOINT nie zawsze kończy pracę z transakcją. Kod powinien zdecydować, czy po poprawieniu danych kontynuować operację, czy wykonać pełne wycofanie. Brak takiej decyzji może prowadzić do blokad, nieoczekiwanego zużycia zasobów i trudnych do odtworzenia rozbieżności między procesami. Punkt zapisu (SAVEPOINT) w praktycznej obsłudze danychPrzy projektowaniu transakcji warto najpierw określić granice logicznych etapów. Punkt zapisu powinien pojawiać się przed fragmentem, który może zakończyć się błędem i który można bezpiecznie powtórzyć. Nie ma potrzeby tworzyć znacznika przed każdą pojedynczą instrukcją, ponieważ nadmiar punktów komplikuje kod i utrudnia analizę przebiegu. Lepszy efekt daje kilka jasno opisanych miejsc odpowiadających rzeczywistym etapom procesu. Każdy etap powinien mieć zdefiniowaną reakcję na błąd. Możliwe warianty obejmują ponowienie fragmentu, pominięcie opcjonalnej części, zapisanie informacji o odrzuconym elemencie albo zakończenie całej transakcji. Takie zasady warto zapisać w dokumentacji technicznej i odzwierciedlić w kodzie obsługi wyjątków. Dzięki temu cofanie nie staje się przypadkową reakcją, lecz elementem zaplanowanego przepływu. Przed użyciem mechanizmu w codziennej pracy wskazane jest wykonanie testów dla kilku scenariuszy: poprawnego przejścia przez wszystkie etapy, błędu przed punktem zapisu, błędu po punkcie, ponowienia operacji oraz pełnego wycofania. Należy sprawdzić nie tylko zawartość tabel, ale także blokady, logi, komunikaty błędów i zachowanie połączenia z bazą. Szczególną uwagę warto zwrócić na sytuację, w której błąd pojawia się podczas obsługi wcześniejszego błędu. W zastosowaniach wymagających dużej powtarzalności przydatne jest rozdzielenie logiki biznesowej od obsługi transakcji. Kod wykonujący operacje na danych powinien jasno sygnalizować błąd, a warstwa zarządzająca transakcją powinna decydować o powrocie do SAVEPOINT, ponowieniu lub zakończeniu pracy. Taki podział ułatwia testowanie i ogranicza ryzyko, że jedna ścieżka błędu pozostawi dane w niejednoznacznym stanie. Kiedy sprawdzić działanie punktu zapisu (SAVEPOINT) w systemieWarto przeanalizować użycie SAVEPOINT, gdy operacja obejmuje wiele zależnych zapisów, a pojedynczy błąd nie powinien usuwać poprawnie wykonanej części pracy. Dotyczy to między innymi importów, synchronizacji danych, przetwarzania dokumentów, aktualizacji kartotek oraz zadań wykonywanych etapami. Szczególnie ważne jest to w sytuacji, gdy ponowienie całej operacji byłoby kosztowne albo mogłoby spowodować powielenie danych. Nie należy jednak wprowadzać punktów zapisu bez rozpoznania ograniczeń konkretnej aplikacji. Jeżeli występują niespójności, zawieszanie procesów, długie blokady, błędy połączeń lub trudności z ustaleniem, które zmiany zostały utrwalone, potrzebna jest spokojna diagnostyka całego przepływu. Należy przeanalizować kod, konfigurację, logi oraz sposób zamykania transakcji. Samo dodanie kolejnego SAVEPOINT może ukryć przyczynę problemu, zamiast ją usunąć. W sprawach związanych z działaniem laptopa lub komputera PC można skonsultować objawy z firmą Warszawskie Pogotowie Komputerowe 24/7. Przy zgłoszeniu warto opisać moment występowania problemu, komunikaty, wykonywaną operację oraz to, czy błąd powtarza się przy tych samych danych. Takie informacje ułatwiają odróżnienie problemu aplikacji od kłopotów z systemem, nośnikiem danych albo środowiskiem pracy. Przed rozpoczęciem zmian zalecane jest zachowanie kopii ważnych danych i unikanie przerywania procesu, gdy transakcja może być nadal otwarta. |