Совокупность команд SQL, результаты действия которых еще не стали постоянными, называется транзакцией или логической единицей работы.
Транзакции начинаются с выполнения первой исполняемой команды SQL и заканчиваются либо фиксацией изменений в базе данных, либо отказом от фиксации (откатом). Окончанием транзакции может служить одно из следующих событий:
- выполнение команды COMMIT или ROLLBACK;
- выполнение команды DDL или DCL (автоматическая фиксация);
- ошибка, завершение сеанса работы или аварийный останов системы.
При выполнении команд SQL COMMIT или ROLLBACK происходит явная обработка транзакции. При этом обеспечивается согласованность данных; появляется возможность проверить изменения в данных прежде, чем сделать их постоянными; взаимосвязанные операции логически группируются.
Неявная обработка транзакций приводит к автоматической фиксации изменений или автоматическому откату.
Автоматическая фиксация изменений (COMMIT) происходит в следующих случаях:
- выполнение команды DDL (например, CREATE);
|
|
- выполнение команды DCL (например, GRANT);
- нормальный выход из SQL * Plus без явной посылки команды COMMIT или ROLLBACK.
Автоматический откат (ROLLBACK) выполняется в случае аварийного прекращения сеанса работы в SQL * Plus или отказа системы.
Состояние данных до и после завершения транзакции
Состояние данных перед выполнением команд COMMIT или ROLLBACK:
- Предыдущее состояние данных может быть восстановлено, т.к. изменения производятся в буфере базы данных.
- Текущий пользователь может просмотреть результаты своих операций DML с помощью команды SELECT.
- Другие пользователи не могут видеть результаты команд DML, выполняемых текущим пользователем.
- Измененяемые строки блокируются, и другие пользователи не могут обновлять их содержимое.
Состояние данных после выполнения команды COMMIT:
- Измененные данные записываются в базу данных.
- Предшествующее состояние данных теряется.
- Все пользователи могут видеть результаты.
- Измененные строки разблокируются, и другие пользователи получают доступ к ним для обработки данных.
- Все точки сохранения стираются.
Состояние данных после выполнения команды ROLLBACK:
- Все незавершенные изменения отменяются.
- Данные возвращаются в прежнее состояние.
- Блокировка строк, над которыми выполнялись операции, отменяется.
3. Фиксация изменений в данных.
Синтаксис:
COMMIT;
4. Откат результатов
Синтаксис
ROLLBACK [TO метка];
где метка - имя маркера, определяющего точку сохранения