当我想更新,删除,插入时我需要提交。这在大多数情况下是有用的,我可能会更新错误的信息或错误地删除某些内容,我可以撤消它。
删除列时,我不需要提交。有没有像回滚(不闪回),这使我能够快速撤消我的更改?即使经过长时间的分析,丢弃色谱柱也可能会对表造成损坏(pk,fk)。
为什么Oracle提供DML提交但不提供DDL提交?
答案 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文件),则使用imp
或impdp
从中恢复表效用