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='010015003A 020000';
--如果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;
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
$rman target /
列出錯誤
rman> list failure;
常態的錯誤建議,不一定全部都有
rman>advise failure;
修復錯誤
rman>repair failure;