SET TRANSACTION
В Oracle пользователю разрешается выполнять несколько операторов изменения данных как одну логическую единицу работы, заканчиваемую или сохранением результатов в базе данных, или их отменой. Транзакция начинается с первого исполняемого SQL-оператора пользователя и заканчивается явной фиксацией (завершением) или откатом со стороны пользователя.
Транзакции обрабатываются группой управляющих средств, с помощью которых пользователь может выдать команду INSERT, UPDATE или DELETE, указывающую начало серии команд изменения данных. После внесения изменений в базу данных пользователь может сохранить данные в базе, закончив транзакцию явным образом. Если же в любой момент транзакции возникает ошибка, пользователь может отменить изменения в базе данных, возвратив ее в состояние, в котором она находилась до начала транзакции. Транзакции создаются посредством двух различных элементов базы данных Oracle. Первый – это набор команд, определяющий начало, контрольные точки и окончание транзакции, а второй – специальный механизм блокирования, предотвращающий изменение информации строк базы данных несколькими пользователями одновременно.
SET TRANSACTION
Транзакции описываются следующими командами:
- SET TRANSACTION – начинает транзакцию и устанавливает ее базовые характеристики.
- COMMIT – заканчивает текущую транзакцию сохранением изменений в базе данных и начинает новую транзакцию
- ROLLBACK – заканчивает текущую транзакцию отменой изменений в базе данных и начинает новую транзакцию
- SAVEPOINT – устанавливает контрольные точки (точки прерывания) для транзакции, разрешая неполный откат.
Команда SET TRANSACTION является необязательной, так как транзакция начинается:
- после регистрации пользователя в Oracle с помощью SQL*Plus и исполнения им первой команды
- после выдачи команды ROLLBACK или COMMIT, заканчивающей транзакцию
- после выхода пользователя из системы
- в результате аварии системы
- после выдачи команды описания данными, например ALTER DATABASE
Команда COMMIT в обработке транзакций представляет тот момент времени, когда пользователь уже внес необходимые изменения как одну логическую группу, а поскольку ошибок не произошло, он готов к сохранению результатов своей работы.
Выдачей команды COMMIT в базе данных еще и неявно закрывается текущая транзакция и начинается новая. Откат транзакции выполняется не только в результате выдачи команды ROLLBACK, но и неявно, когда выполнение оператора по той или иной причине заканчивается неудачно или когда пользователь отменяет оператор командой CTRL-C.
Установка контрольных точек с помощью команды SAVEPOINT позволяет разбить весь объем работы, выполняемой транзакцией, на отдельные сегменты. Откат можно производить только до конкретной точки сохранения, оставляя предшествующие изменения в силе. Точки сохранения очень полезны в ситуациях, когда необходимо восстановить часть незавершенной транзакции.
Следующий пример показывает, что в программном блоке сохраняются только те изменения, которые были внесены до описания точки сохранения:
UPDATE my_table.products SET price=50 WHERE product=10010; SAVEPOINT точка_сохранения;
UPDATE my_table.products SET price=200; ROLLBACK TO SAVEPOINT точка_сохранения; COMMIT;