Oracle:DDL和事务回滚

时间:2011-01-17 09:02:11

标签: oracle transactions ddl

Oracle DDL(创建/更改)是否可以像MS SQL(从2005年开始)那样是事务性的?

3 个答案:

答案 0 :(得分:19)

DDL在Oracle中不是事务性的。来自11.2 doc

  

Oracle数据库在每个DDL语句之前和之后隐式提交当前事务。

答案 1 :(得分:15)

没有。在Oracle DDL语句中,它们本身不是事务性的。

在开始实际工作之前,运行DDL语句将隐式提交该会话的任何打开事务。

此外,如果另一个会话在被修改的对象或其依赖项之一上有一个打开的事务,那么某些语句(如alter table语句)可能会失败。您可以设置 ddl_lock_timeout 以指定Oracle希望等待对象可用的时间。

有关DDL语句类型的摘要以及有关锁和事务的行为的信息,请参阅DDL Statements

答案 2 :(得分:3)

刚发现这一点,所以需要更多调查,但Oracle的create schema authorization至少允许在单个事务中捆绑多个DDL语句,从而避免多次提交,并保证没有副作用,即回滚,如果有的话其中一个DDL语句失败。

目前还不清楚回滚是否仅适用于包装的 DDL语句,如果创建模式启动了保存点,或者外部事务可能是某些先前的DML语句。

在最后一次包装的DDL语句成功完成后,仍然无法避免提交。