Śledź nas na:



Transakcje. Transakcje zagnieżdżone.

W dzisiejszych bazach danych wykonuje się wiele złożonych operacji na danych. Aby uzyskać większą kontrolę nad integralnością bazy danych stworzono transakcje. Transakcja jest to szereg pojedynczych instrukcji do wykonania na danych, który po wykonaniu pozostawia bazę danych spójną, czyli wykonanie transakcji w spójnej bazie danych pozostawia ją spójną (zgodną z modelowaną rzeczywistością).

Transakcja jest operacją atomową, co oznacza, że powinny wykonać się wszystkie instrukcje wchodzące w jej skład lub żadna. W praktyce wykonuje się instrukcje transakcji po kolei, a w przypadku niepowodzenia którejś z nich wycofuje poprzednio wykonane instrukcje (jest to tzw. wycofanie transakcji, czyli rollback). Takie rozwiązanie daje gwarancje spójności danych, co jest szczególnie ważne w systemach bankowych, gdzie wykonywane są złożone operacje bezgotówkowe na bardzo dużych kwotach. W przypadku awarii serwera lub jakiegoś innego elementy informatycznego systemu bankowego nie wykonana do końca transakcja zostaje w całości wycofana i ewentualnie powtórzona od nowa.

Przykładowo, kasjer w banku przelewa $500000 z rachunku rozliczeniowego na rachunek bieżący. Kasjer może obciążać rachunek na $500000 a następnie zapisać oszczędności na $500000. Co się stanie, jeżeli kasjer zapomni przełożyć pieniądze na rachunek bieżący? Większość ludzi byłaby bardzo zmartwiona z tego powodu. Spodziewaliby się, że jeżeli pieniądze zostały zdjęte z rachunku rozliczeniowego powinny wpłynąć do oszczędności. Jest to transakcja. Jednostka pracy przetwarza wszystkie polecenia kończąc je sukcesem, lub kończy się niepowodzeniem i wycofuje wszystko co zostało wykonane Do sterowania transakcjami używa się języka DCL - Data Control Language.

Jednym z rodzajów transakcji są transakcje zagnieżdżone (nested transaction). Są to transakcje powstałe w skutek działania innej transakcji i są jej częścią. Innymi słowy, jeżeli mamy do wykonania jakąś dużą transakcje możemy wewnątrz niej wykonywać jakąś mniejszą transakcje, jedną lub kilka po sobie. W transakcjach zagnieżdżonych możemy znów zagnieżdżać kolejne itd. W przypadku tego rodzaju transakcji, stają się one nie tylko zbiorem operacji, ale i zbiorem transakcji. Możemy porównać to do lasu, którego liśćmi drzew są poszczególne operacje, węzłami wewnętrznymi drzew są transakcje, a korzeń każdego z drzew stanowi transakcja najwyższego poniomu. Zagnieżdżone transakcje umożliwiają więc strukturalizowanie dostępu do krotek.

Zagnieżdżanie transakcji ma tą zaletę, że jeżeli wystąpi błąd w wykonywanej transakcji zagnieżdżonej, zewnętrzna transakcja wykonuje się dalej bez zakłóceń, a wycofywane są tylko operacje z transakcji zagnieżdżonej.

Jeżeli jednak wszystkie zagnieżdżone transakcje zostaną zatwierdzone, to wycofanie z jakiegoś powodu transakcji zewnętrznej (tej, w której zagnieżdżone były pozostałe) spowoduje, że wszystkie zatwierdzone wcześniej transakcje zagnieżdżone zostaną również wycofane. Do odwoływania wszelkich zmian wprowadzonych podczas bieżącej transakcji służy polecenie ROLLBACK. Jeśli transakcja jest zagnieżdżona, to odwoływane są jedynie te zmiany, które zostały wprowadzone od momentu wydania ostatniego polecenia rozpoczęcia transakcji. Założone podczas wykonywania transakcji blokady rekordów lub plików są zwalniane.

Jeśli transakcja jest zagnieżdżona, polecenie zakończenia transakcji powoduje przesunięcie wszystkich buforowanych aktualizacji na następny, wyższy poziom transakcji. Zagnieżdżone transakcje mogą zastępować zmiany danych wprowadzone na wyższym poziomie transakcji.

Transakcje zagnieżdżone nie tylko dają gwarancję bezpieczeństwa i integralności bazy danych (baz danych), lecz także umożliwiają celowe częściowe wycofywanie transakcji w momencie, gdy administrator lub system uzna, że z jakiegoś powodu transakcja nie może zostać wykonana w całości. Dzięki transakcjom zagnieżdżonym możliwa jest taka operacja bez naruszenia spójności bazy danych. Podobny efekt można uzyskać, stosując punkty kontrolne w transakcji (savepoints) i wycofywanie do nich (rollback to savepoint).

Transakcje zagnieżdżone powinny mieć możliwość współdziałania z zewnętrznym monitorem transakcyjnym, szczególnie w przypadku rozproszonych baz danych, gdy transakcje zmieniają na wiele tabel w wielu bazach danych. Podnosi to niezawodność i bezpieczeństwo systemu. Każda transakcja powinna być w miarę możliwości jak najkrótsza, dlatego, jeśli tylko jest to możliwe należy unikać zagnieżdżania transakcji. Im dłuższa transakcja, tym dłuższy jest czas jej wykonywania i tym samym dłuższy jest czas oczekiwania innych transakcji na możliwość modyfikacji rekordów używanych przez wykonywaną transakcję. Im krótsza jest transakcja, tym szybciej działa system i ty większa jest szansa, że wykona się bezbłędnie w całości.



Zobacz także