2013-09-28 50 views
1

當我想更新,刪除,插入我需要提交。這在大多數情況下都很有用,我可能會更新錯誤信息或者錯誤地刪除某些內容,並且我可以將其撤消。有沒有類似的提交DDL?

刪除列時,我不需要提交。有沒有像回滾(不閃回),這使我能夠迅速撤消我的更改?即使經過長時間的分析,丟失一列也可能會損壞表格(pk,fk)。

爲什麼Oracle提供了DML提交但不提供DDL?

+0

爲什麼不是閃回?這是它的目的之一。 – Mat

+0

@Mat閃回將不起作用的情況下,一些ddl已在表上執行 –

+1

@beherenow:閃回數據庫將。 – Mat

回答

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實用程序從中恢復表。