Автономные транзакции

Материал из Seo Wiki - Поисковая Оптимизация и Программирование

Перейти к: навигация, поиск

Автономные транзакции в СУБД Oracle представляют собой новый метод управления транзакциями. Автономные транзакции позволяют создавать новые подтранзакции (subtransaction), которые могут сохранять или отменять изменения вне зависимости от родительской транзакции.

Содержание

Могут использоваться

  • в анонимных блоках верхнего уровня;
  • в локальных, отдельных или входящих в пакеты процедурах и функциях;
  • в методах объектных типов;
  • в триггерах базы данных.

Когда удобно использовать

  • Проверка, записи которой не могут быть отменены.
  • Ошибка изменяющейся таблицы (Чаще всего она возникает при попытке читать данные из таблицы, в ответ на изменение которой сработал триггер).
  • Выполнение операторов ЯОД в триггерах
  • Запись в базу данных
    • строгая проверка; необходимо знать, какие данные видел каждый из пользователей, или надо записать идентификатор каждой записи, запрошенной у системы;
    • средство создания отчетов позволяет выполнять только SQL-операторы SELECT; абсолютно необходимо по ходу построения отчета вызывать хранимую процедуру, выполняющую ряд вставок (например, заполняющую таблицу параметров для другого отчета).
  • Разработка модульного кода.

Проблемы

  • Невозможность использования в распределенных транзакциях.
  • Автономные транзакции доступны только в среде PL/SQL.
  • Откатывается вся транзакция
  • Временные таблицы уровня транзакции (нельзя одновременно использовать в нескольких транзакциях в одном сеансе).
  • Изменяющиеся таблицы (обязательно проверять корректность каждого триггера)

Ошибки

  • ORA-06519: выполнен откат назад для незавершенной автономной транзакции
    • Причина: Перед выходом из автономного PL/SQL-блока все начатые в нём автономные транзакции должны быть завершены (зафиксированы или отменены). В противном случае активная автономная транзакция неявно откатывается и выдаётся это сообщение об ошибке.
    • Действие: Убедиться, что перед выходом из автономного PL/SQL-блока все активные автономные транзакции явно зафиксированы или отменены.
  • ORA-14450: попытка доступа к уже используемой временной таблице транзакций
    • Причина: Выполнена попытка доступа к временной таблице уровня транзакции, данные в которую поместила другая транзакция, одновременно выполняющаяся в том же сеансе.
    • Действие: Не пытаться обращаться ко временной таблице, пока одновременно выполняющаяся транзакция не будет зафиксирована или отменена.
  • ORA-00060: взаимная блокировка при ожидании ресурса
    • Причина: Произошла взаимная блокировка транзакций при ожидании ресурса.
    • Действие: Определить по трассировочному файлу, какие транзакции и ресурсы стали причиной взаимной блокировки. При необходимости повторить транзакцию.

Ссылки


Личные инструменты

Served in 0.057 secs.