轉載-方案一自測有效
有兩種方案解決此問題,具體操作:
一:根據時間來恢復:
1、查詢數據庫當前時間(目的是為了檢查數據庫時間是否與你電腦時間相近,避免時間不同而將數據恢復到錯誤時間點)
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
2、查詢刪除數據時間點之前的數據
select * from 表名 as of timestamp to_timestamp('2016-08-11 16:12:11','yyyy-mm-dd hh24:mi:ss');
(若沒有數據 ,將時間繼續提前)
3、恢復數據(激動人心的時刻)
flashback table 表名 to timestamp to_timestamp('2016-08-11 16:12:11','yyyy-mm-dd hh24:mi:ss');
大功告成,數據恢復成功;
但是也可能會出現問題,比如報錯:ORA-08189:未啟用行移動功能,不能閃回表;
不要怕,這個很簡單;
alter table 表名 enable row movement;
然后再次執行上面SQL即可;
二:根據數據庫SCN恢復數據
1、查詢當前數據庫SCN號
select current_scn from v$database;(不能執行的話,切換到sys用戶或system用戶查詢)
查詢到的當前值為:91799986
2、縮小SCN號查詢被刪除表數據(若無數據繼續縮小SCN,由於數據庫操作不止一人,SCN號變化比較多,可以多縮小幾個號)
select * from 表名 as of scn 91799980;
3、恢復數據
flashback table 表名 to scn 91799980;
恢復完成。若報錯:ORA-08189:未啟用行移動功能,不能閃回表;結果方案同上。