Oracle Flashbackup/Recyclebin資料回覆

Flashbackup/Recyclebin資料回覆

標籤: 
1.Flashbackup:使用DML資料誤刪
2.Recyclebin:使用Drop指令誤刪除料
3.OERR-ORA Error錯誤查詢
4.11g獨有的自動修復功能
 
 


 

使用flashbackup回覆資料:
 
一、指定單一時間點的資料
先查詢之前的狀態是否錯誤
Meth1:
select salary from hr.emp as of timestamp to_date('2013-12-19:15:54:52','YYYY-MM-DD:HH24:MI:SS') where employee_id=100;
Meth2:回到n分鐘前
select salary from hr.emp as of timestamp sysdate-5/1440 where employee_id=100;
 
二、指定undo資料上可回覆的資料
select versions_xid,versions_startscn,versions_endscn,versions_operation ,salary  –versions_starttime,versions_endtime
from hr.emp versions between scn minvalue and maxvalue  –{scn 10000 and 20000},{timestamp t1 and t2}
where employee_id=100;
 
查詢SQL語句
select start_scn,COMMIT_SCN,OPERATION,UNDO_SQL from flashback_transaction_query where xid='010015003A020000';
 
–如果undo_sql沒有出現,是因為並沒有啟動supplemental log(11g才需要啟動,10g不需要)
SQL> select SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI from v$database;
 
SQL> alter database add supplemental log data; –>enable supplemental log
SQL> alter table hr.t1 enable row movement;–>enable row movement
 
回覆資料:
Meth1:
flashback table hr.emp to scn 1019919;
scn number:從VERSIONS_STARTSCN來
Meth2:
–如果現在反悔,想要取消剛剛的table flashback
SQL> flashback table hr.t1 to timestamp to_date('2011-05-25:16:14:51','YYYY-MM-DD:HH24:MI:SS');

Meth3:
–直接指定回到5分鐘之前的狀態:
 

 

 

SQL> flashback table hr.t1 to timestamp sysdate-5/1440;
******************************************************************
drop的回覆方式,透過Recycle bin的方式救回
 
查詢recyclebin裡有那一些檔案
SQL> select * from dba_recyclebin where owner='HR';
**flashback table original_name to before drop  –如果有一個以上的table有相同的original_name,則使用LIFO(Last In First Out),就是最後被drop的table被救回
**flashback table "BIN$…." to before drop  –使用BIN$名字可以要求某一個table被救回
 
SQL> flashback table hr.emp5 to before drop;
 
 
若不是DBA想救的檔案,就要使用檔案名稱+時間點,來確認是何檔案
SQL> flashback table hr."BIN$pCUFW0TCVuzgQKjAZTgQRw==$0" to before drop;  –使用unique object name
 
SQL> flashback table hr."BIN$pCUFW0TEVuzgQKjAZTgQRw==$0" to before drop rename to new_emp5;  –emp5已經被使用,所以只好更名為new_emp5
補充:
Drop Table 後,沒有真正的刪除表,而是在“垃圾站”中了。可以通過下面看到。

  SQL> SHOW RECYCLEBIN

如果要徹底刪除,可以使用︰

  SQL> PURGE TABLE "BINjR8PK5HhrrgMK8KmgQ9nw==";

刪除這一個或刪除全部。

  SQL> PURGE RECYCLEBIN;

purge table test; (直接使用 table 名稱刪除存放在 recyclebin 裏的 table,如有相同的名字存在的話,會採用FIFO的方式刪除最舊的資料)

purge index id_test; (直接使用 index 名稱刪除存放在 recyclebin 裏的 index,如有相同的名字存在的話,會採用FIFO的方式刪除最舊的資料)

purge table "BIN$+7J5MgT2RbCX+tka+zjpgA==$0"; (也可指定完整名稱進行刪除)

purge recyclebin; (刪除屬於自已的全部 object )

purge dba_recyclebin; (刪除全部的 recyclebin 裏的資料,只有sysdba權限的人才能執行)

 
 **********************************************************************
 
Error查詢方式:
oerr ora 1116
 
11G才有的功能,自動修復錯誤
$rman target /
列出錯誤
rman> list failure;
常態的錯誤建議,不一定全部都有
rman>advise failure;
修復錯誤
rman>repair failure;