誤操作經歷,truncate導致閃回查詢失敗

wei-xh發表於2014-06-18
開發人員向我反映由於誤操作刪除了表裡的一些資料,要求我恢復。
諮詢了誤操作的時間點後,我用閃回查詢試了一下,被誤刪的資料還在回滾段,可以挽救回來。
我先備份了現在表裡的資料。
create table a as select * from 業務表。

然後我做了一件愚蠢的事
truncate table 業務表
insert into 業務表 select * from 業務表 as of timestamp to_timestamp('2014-06-18 13:30:01','yyyy-mm-dd hh24:mi:ss');

ERROR at line 1:
ORA-01466: unable to read data - table definition has changed

結果提示了錯誤,說表的定義已經改變。因為ORACLE的閃回要求你的表結構從你誤操作的時間點起到執行閃回查詢的時間點,表定義是不能改變的。

剛剛閃回查詢還可以,怎麼短短一分鐘不到,誰就把表結構給改了呢?

奧,我明白了,是我自己犯了錯誤,truncate操作也被閃回查詢認為是改變表結構定義的操作。是我自己做的孽。

怎麼辦?

還好,truncate之前,我是備份了 開發誤操作後的資料的,這部分資料我可以找回。

那麼開發誤操作的資料如何找回呢?閃回是不行了
LOGMINER要登場了。慶幸的是,所有的資料庫我都開啟了輔助日誌。
最終透過LOGMINIER,解析了那段時間的誤操作日誌,透過SQL_UNDO欄位的內容,成功恢復出了資料,有驚無險。

這個事件給我提了個大醒。DBA要了解ORACLE特性的細節,基礎知識要紮實,儘量避免使用TRUNCATE操作。刪除資料前要做備份。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-1187959/,如需轉載,請註明出處,否則將追究法律責任。

相關文章