Oracle: DDL и откат транзакции - PullRequest
17 голосов
/ 17 января 2011

Может ли в Oracle DDL (создать / изменить) быть транзакционным, как в MS SQL (запущен в 2005 году)?

Ответы [ 3 ]

19 голосов
/ 17 января 2011

DDL не является транзакционным в Oracle. Из 11,2 документа :

База данных Oracle неявно фиксирует текущую транзакцию до и после каждого оператора DDL.

15 голосов
/ 17 января 2011

Нет. В Oracle операторы DDL не являются транзакционными.

Выполнение инструкции DDL неявно фиксирует любую открытую транзакцию для этого сеанса до начала фактической работы.

Кроме того, некоторые операторы, такие как оператор alter table, могут не работать, если в другом сеансе имеется открытая транзакция для изменяемого объекта или одной из его зависимостей. Вы можете установить ddl_lock_timeout , чтобы указать, как долго вы хотите, чтобы Oracle ожидал, пока объект станет доступным.

См. Отчеты DDL для краткого изложения типов операторов DDL и информации об их поведении в отношении блокировок и транзакций.

3 голосов
/ 30 августа 2012

Только что обнаружил, поэтому требует дополнительного изучения, но Oracle создает схему авторизации , по крайней мере, позволяет объединять несколько операторов DDL в одну транзакцию, таким образом избегая нескольких коммитов, и гарантирует отсутствие побочных эффектов, т.е.откат, если какой-либо из операторов DDL завершился неудачей.

Неясно, применяется ли откат только к операторам wrapped DDL, как если бы схема создания запустила точку сохранения, иливнешняя транзакция, возможно, с некоторым предыдущим оператором DML.

Вы по-прежнему не можете избежать фиксации после успешного завершения последнего упакованного оператора DDL.

...