Автономные транзакции представляют собой новый метод управления транзакциями. Автономные транзакции позволяют создавать новые подтранзакции (subtransaction), которые могут сохранять или отменять изменения вне зависимости от родительской транзакции.
Могут использоваться
- в анонимных блоках верхнего уровня;
- в локальных, отдельных или входящих в пакеты процедурах и функциях;
- в методах объектных типов;
- в триггерах базы данных.
Когда удобно использовать
- Проверка, записи которой не могут быть отменены.
- Ошибка изменяющейся таблицы (Чаще всего она возникает при попытке читать данные из таблицы, в ответ на изменение которой сработал триггер).
- Выполнение операторов ЯОД в триггерах
- Запись в базу данных
- строгая проверка; необходимо знать, какие данные видел каждый из пользователей, или надо записать идентификатор каждой записи, запрошенной у системы;
- средство создания отчетов позволяет выполнять только SQL-операторы SELECT; абсолютно необходимо по ходу построения отчета вызывать хранимую процедуру, выполняющую ряд вставок (например, заполняющую таблицу параметров для другого отчета).
- Разработка модульного кода.
Проблемы
- Невозможность использования в распределенных транзакциях.
- Автономные транзакции доступны только в среде PL/SQL.
- Откатывается вся транзакция
- Временные таблицы уровня транзакции (нельзя одновременно использовать в нескольких транзакциях в одном сеансе).
- Изменяющиеся таблицы (обязательно проверять корректность каждого триггера)
См. также
Уровни изолированности транзакций
Ссылки
- http://www.oracle.com/global/ru/oramag/may2001/at.html
- Автономные транзакции в IBM DB2