Oracle: DDL и откат транзакций

может ли в Oracle DDL (create/alter) быть транзакционным, как в MS SQL (начиная с 2005)?

3 ответов


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

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

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

посмотреть операторы DDL для сводки типов инструкций DLL и информации об их поведении в отношении блокировок и транзакций.


DDL не является транзакционным в Oracle. От 11.2 doc:

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


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

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

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