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;

Оставить комментарий к «SET TRANSACTION»