對錶誤操作的閃回恢復--flashback_transaction_query檢視

許願流星1號發表於2015-12-02

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

 

     1、先從flashback_transaction_query檢視裡查詢,檢視提供了供查詢用的表名稱、事務提交時間、UNDO_SQL等欄位。注意:11g檢視到UNDO_SQL為空,是因為

Oracle11g禁用了supplemental logging

開啟後恢復正常:

 

alter database add supplemental log data;

SQL> alter database add supplemental log data;

 

     如:select * from flashback_transaction_query where table_name='TEST';

         select START_SCN,START_TIMESTAMP,COMMIT_SCN,COMMIT_TIMESTAMP,UNDO_CHANGE#,TABLE_NAME,TABLE_OWNER,UNDO_SQL from flashback_transaction_query where table_name='EMP2' order by COMMIT_TIMESTAMP desc

 

     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');

        select * from emp2 as of scn 699992;-------這個是COMMIT_SCN的值

     

    若有資料,恢復極為簡單了,語句為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');

      flashback table emp2 to scn 699992;

 

 

如果是誤update,而且提交。(update emp2 set comm=700 where deptno=10),閃回時,執行上一個時間段的時間或者scn。我這裡是703623,703654是查到update提交後的值

select * from emp2 as of scn 703623;-------這個是COMMIT_SCN的值

flashback table emp2 to scn 699992;

 


 

無刪除

delete from emp2 where deptno=30; 閃回到改sql語句COMMIT_SCN的值,才是正確的。和update有區別。

 


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

相關文章