[ Pobierz całość w formacie PDF ]
.Można to zrobić, umieszczając na końcu bloku else z wiersza 18) następującą instrukcję:EXEC SQL ROLLBACK;Jednakże w tym przypadku, czyli przy wyborze tej ścieżki w programie, nie pojawiły się żadne instrukcje modyfikacji, tj.żadne zmiany chwilowe nie następują, a zatem jest zupełnie obojętne czy zastosujemy instrukcję COMMIT, Czy ROLLBACK.a7.2.4.Transakcje tylko do odczytuTransakcje, opisane w przykładach 7.11 i 7.12, obejmowały odczytanie, a następnie w pewnych okolicznościach zapisanie danych do bazy danych.Omawiane transakcje przypominają problem sekwencyjności.Przed7.2.TRANSAKCJE W JĘZYKU SQL 441stawiliśmy w przykładzie 7.11 konsekwencje jednoczesnego wywołania funkcji rezerwującej to samo miejsce w samolocie, a z kolei w przykładzie 7.12 uwidoczniono skutki awarii, która zdarza się w trakcie przetwarzania funkcji.Jednakże w przypadku transakcji, które powodują tylko odczyt danych, istnieje więcej swobody w równoległym przetwarzaniu wielu transakcj i'.PRZYKŁAD 7.14Rozważmy funkcję, która wczytuje dane z bazy po to, by stwierdzić, czy pewne miejsce jest dostępne; jej tekst stanowi fragment z rys.7.8 zapisany w wierszach od 1) do 11).Oczywiście bez szkody dla bazy danych możemy przetwarzać jednocześnie wiele wywołań tej funkcji.Najgorsze co może się stać, to że w trakcie odczytu dostępności miejsca inna funkcja właśnie to miejsce rezerwowała albo zwalniala.Można by zatem uzyskać informację o tym, że miejsce jest dostępne albo że jest niedostępne w pewnym niewielkim przesunięciu w czasie, ale odpowiedź ma sens.0Jeśli system SQL zostanie poinformowany o tym, że bieżąca transakcja jest tylko do odczytu, tzn.że jej działanie nie powoduje zmiany stanu bazy danych, to najczęściej ta informacja zostanie wykorzystana.Mimo że nie opiszemy tutaj szczegółów tego mechanizmu, to należy zapamiętać, iż umożliwia on jednoczesne przetwarzanie wielu transakcji tylko do odczytu, które działają na tych samych danych, ale z kolei blokuje dane w przypadku transakcji, które zapisująnowe wartości w bazie.W języku SQL transakcje określa się jako tylko do odczytu w następujący sposób:SET TRANSACTION READ ONLY;Ta instrukcja musi wystąpić, zanim rozpocznie się transakcja.Gdyby to dotyczyło fragmentu funkcji zapisanej w wierszach od 1) do 11) na rys.7.8, to należaloby umieścić następującą instrukcjęEXEC SQL SET TRANSACTION READ ONLY;tuż przed wierszem 9), w którym transakcja się rozpoczyna.Umieszczenie tej deklaracji po wierszu 9) jest zbyt późne.Można przedstawić pewne porównanie transakcji z kursorami.Na przykład w p.7.1.10 zwróciliśmy uwagę na to, że można stosować więcej równoległości w przypadku kursorów przeznaczonych tylko do czytania danych niż w przypadku dowolnych kursów.Podobnie rzecz się ma z transakcjami, transakcje tylko do odczytu umożliwiają stosowanie równoległości w szerszym zakresie niż zwykłe transakcje.442 7 SYSTEMOWE ASPEKTY JĘZYKA SQLMożna także poinformować system SQL o tym, że transakcja powoduje zapis nowych wartości w bazie i stosuje się wówczas następującą instrukcję:SET TRANSACTION READ WRITE;Jednakże jest to opcja, która zazwyczaj występuje w języku SQL przez domniemanie, a zatem przeważnie nie trzeba jej stosować.7.2.5.Czytanie brudnopisuBrudnopis jest popularnym terminem dla danych zapisanych przez transakcję, która jeszcze nie została zatwierdzona.Czytanie brudnopisu oznacza po prostu czytanie danych brudnopisu.Ryzyko przy czytaniu tych danych polega na tym, że w końcowym efekcie transakcja może nie zostać zatwierdzona.Jeśli tak się stanie, to dane brudnopisu zostaną usunięte z bazy danych i wszystkie funkcje powinny dawać takie wyniki, jakby tych danych nigdy nie było w bazie.Jeśli jednak jakieś inne transakcje odczytały dane z brudnopisu, który został w rezultacie usunięty, to mogłoby to spowodować niekorzystne konsekwencje.Niekiedy odczytanie danych z brudnopisu ma znaczenie.A niekiedy ryzyko jest tak niewielkie, że warto skorzystać z tej możliwości przy czasochłonnym przetwarzaniu i uniknąć w ten sposób dodatkowych czynności związanych z ochroną przed czytaniem brudnopisu
[ Pobierz całość w formacie PDF ]