是否有类似于DDL的提交?

时间:2013-09-28 10:05:49

标签: oracle rollback ddl

当我想更新,删除,插入时我需要提交。这在大多数情况下是有用的,我可能会更新错误的信息或错误地删除某些内容,我可以撤消它。

删除列时,我不需要提交。有没有像回滚(不闪回),这使我能够快速撤消我的更改?即使经过长时间的分析,丢弃色谱柱也可能会对表造成损坏(pk,fk)。

为什么Oracle提供DML提交但不提供DDL提交?

1 个答案:

答案 0 :(得分:6)

  

为什么Oracle提供DML提交但不提供DDL提交?

当你发出一个DDL语句时,你基本上是针对Oracle数据字典启动一个事务,并且为了消除任何开销,这个事务必须尽可能短,并尽快生效。因此,DDL语句在DDL语句之前进行双重提交,然后在语句之后立即(或者回滚,如果出错)。此行为使Oracle的DDL不是事务性DDL,您无法显式提交或回滚它。这就是它的方式。

话虽如此,如果您删除了一个表,然后从10g开始,您可以使用flashback table技术将其恢复到一个语句中,因为Oracle在您发出drop table语句后不会丢弃它,它把它放在回收站中:

flashback table <<table_name>> to before drop

不幸的是,您不能使用闪回表来恢复表的删除列,只是因为丢弃的列不会放在回收站中。您必须执行完整数据库或单个表空间的时间点恢复,或者如果存在逻辑备份(* .dmp文件),则使用impimpdp从中恢复表效用