20июн Транзакция. Операторы DDL и фиксация транзакций.

В оракле существует одна команда фиксации транзакций COMMIT. Но существует такое понятие как неявный commit. Что это такое и как происходит такая фиксация транзакций.

Прочитайте, как об этом сказано в книге Тома Кайта:

Хочу вам напомнить одну простую вещь, о которой постоянно забывают: Если в вашем скрипте среди команд DML встречается команда DDL знайте – перед выполнением DDL-команды произойдет фиксация транзакции. И это не зависит от вашего желания.

Это делается путем помещения операторов DDL в неявные пары операторов фиксации (или фиксации и отката). Вот почему операторы DDL в Oracle всегда фиксируются. Операторы CREATE, ALTER и т.д. фактически выполняются, как показано в следующем псевдокоде:

Begin
Commit;
Оператор DDL
Commit;
Exception
When others then rollback;
End;

Поэтому операторы DDL всегда фиксируют транзакцию, даже если завершаются неудачно. Выполнение оператора DDL начинается с фиксации. Cначала выполняется фиксация, чтобы в случае отката не пришлось откатывать предыдущую часть транзакции. При выполнении оператора DDL фиксируются все выполненные ранее изменения, даже если сам оператор DDL выполнен неудачно. Если должен быть выполнен оператор DDL. но не требуется, чтобы он зафиксировал существующую транзакцию, можно использовать автономную транзакцию.

(Выдержка из Тома Кайта)

Комментарии (1)

[339] Комментарий от Alex Volny   16.10.2008(18:24:26)
Неявная фиксация касается и TRUNCATE, которая является DDL-оператором, поэтому разработчики которые хотят "сэкономить" на log-журналах и undo заменяя DELETE -> TRUNCATE, должны учитывать этот "подвох". Иначе, код выполняющийся после TRUNCATE и вызвавший exception будет откатан(rollback) обработчиком до ближайшего commit (до после TRUNCATE), и логическая целостность транзакции может быть нарушена.



Новый комментарий

Имя
Электронная почта
 
Ваш сайт
Защита от спама: укажите сумму 9 + 3
   
 

Поиск по блогам



Подпишись на RSS:

RSS - Подписаться на блог



Читателям


Рекомендую к прочтению





Разделы блога



Последние публикации



Последние коментарии