wtorek, 9 listopada 2010

Kurs Oracle SQL. Zarządzanie transakcjami


Transakcja jest zbiorem operacji wykonywanych w ramach jednej sesji. Wszystkie operacje na bazie danych realizowane są w postaci ciągu transakcji. Transakcyjność zapewnia zapewnia nam bezpieczeństwo i stabilną pracę bazy danych. Wszystkie instrukcje w ramach jednej transakcji zostają wykonane w całości lub w całości zostają wycofane. Dzięki temu nie powstaje sytuacja w której tylko część danych modyfikowanych w przerwanej transakcji zostaje zmieniona.
Dane które podlegają zmianie, są odizolowane od innych użytkowników i procesów pracujących na bazie danych do czasu zakończenia transakcji.




Instrukcja COMMIT



Transakcja jest zatwierdzana i kończy się w chwili wykonania instrukcji COMMIT. Wszystkie modyfikacje danych zostają zapisane w bazie. W przypadku wykonania którejkolwiek z instrukcji należącej do grupy DML wykonywany jest niejawny COMMIT.
Należy również zwrócić uwagę na ustawienia naszych edytorów SQL. Często jest w nich ustawiony domyślnie autocommit (jak na rysunku poniżej). Transakcje w takim wypadku zatwiedzane są bez wykonania przez nas instrukcji COMMIT.




Instrukcja ROLLBACK


Instrukcja ROLLBACK wycofuje wszystkie modyfikacje danych w ramach jednej transakcji.
Możemy ją zastosować jeśli się np. pomylimy. Ta instrukcja nie zadziała jeśli wykonamy COMMIT. Transakcja w takim wypadku jest już zakończona.



Instrukcja SAVEPOINT



Instrucja SAVEPOINT pozwala zachowywać punkty przywracania – działa to tak jak zapisywanie stanu w czasie gry :) W przypadku pomyłki możemy wrócić do miejsca zapisania SAVEPOINT bez straty tych instrukcji które zostały wykonane przed nim i konieczności rozpoczynania „gry” od początku.
Aby założyć nowy savepoint stosujemy:


SAVEPOINT NAZWA_SAVEPOINTA;


Aby przywrócić stan do określonego savepointa stosujemy:


ROLLBACK TO NAZWA_SAVEPOINTA;
 

3 komentarze:

  1. Wszystkie modyfikacje danych zostają zapisane w bazie. W przypadku wykonania którejkolwiek z instrukcji należącej do grupy DML wykonywany jest niejawny COMMIT. - czyli, select wymaga zatwierdzenia?

    OdpowiedzUsuń
  2. Nie, absolutnie nie. Wymagają tego tylko operacje DML czyli UPDATE, INSERT, DELETE

    OdpowiedzUsuń
  3. Dziękuję, w takim razie chyba ma Pan nieścisłość we wpisie "Podstawowe definicje".

    OdpowiedzUsuń