oracle數據誤操作恢復

oracle數據誤操作恢復【flashback閃回操作】

幾張表的數據全部執行了delete * 操作。
接到問題立刻知道了事件的嚴重性,立即開始研究解決辦法。
瞭解到數據庫是oracle 10G。 經查詢可以使用flashback閃回操作進行恢復,這下放心了,說做就做。

閃回操作的具體步驟
1.開啓Flash存儲的權限
ALTER TABLE tablename ENABLE row movement ;
2.把數據表還原到指定時刻
flashback table tablename to timestamp to_timestamp('2010-07-17 10:40:00','yyyy-mm-dd hh24:mi:ss');
ok ~! 原來這麼簡單。

如果具體時間不清楚的話,可以查看日誌,不過當時由於時間緊急我們並沒有那麼做,而是採用偷懶的方法 去試

select * from table_name as of timestamp to_timestamp('2010-07-17 10:40:00','yyyy-mm-dd hh24:mi:ss');

說明:上面這種方式可以恢復【誤刪】【誤改】【誤插入】等誤操作之前的數據。不過時間記得越準確越好。

如果drop了表,怎麼辦??見下面:

drop table 表名;
數據庫誤刪除表之後恢復:(
絕對ok,我就做過這樣的事情,汗)不過要記得刪除了哪些表名。
flashback table 表名 to before drop;

如果記不住刪除了那個表可以通過下面的語句查詢:

select * from recyclebin;


一:表的恢復

    對誤刪的表,只要沒有使用PURGE永久刪除選項,那麼從flash back區恢復回來希望是挺大的。一般步驟有:

1、從flash back裏查詢被刪除的表

   select * from recyclebin

2.執行表的恢復

  flashback table tb to before drop,這裏的tb代表你要恢復的表的名稱。

二:表數據恢復

   對誤刪的表記錄,只要沒有truncate語句,就可以根據事務的提交時間進行選擇恢復,一般步驟有:

    1、先從flashback_transaction_query視圖裏查詢,視圖提供了供查詢用的表名稱、事務提交時間、UNDO_SQL等字段。

    如:select * from flashback_transaction_query where table_name='TEST';
    2、執行表記錄恢復

    一般先根據時間進行查詢,查詢語句模式爲select * from tb as of timestamp to_timestamp(time,'yyyy-mm-dd hh24:mi:ss'); tb指表名稱,time指某個時間點

     如select * from scott.test as of timestamp to_timestamp('2009-12-11 20:53:57','yyyy-mm-dd hh24:mi:ss');

   若有數據,恢復極爲簡單了,語句爲flashback table tb to timestamp to_timestamp(time,'yyyy-mm-dd hh24:mi:ss');

  如flashback table scott.test to timestamp to_timestamp('2009-12-11 20:47:30','yyyy-mm-dd hh24:mi:ss');


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章