oralce恢復誤刪除的表中的資料(閃回、閃回查詢)

湖湘文化發表於2013-11-17
 

今天,有個朋友和我說,他有個同事誤操作將oracle中一個表誤刪除了,
一開始我以為是drop掉了,於是建議閃回表,但是回收站裡找不到;
後來才知道是delete了所有資料,於是建議回滾或者用閃回查詢的辦法將資料找回來,
但是遇到快照太舊的問題,資訊被覆蓋了,只能找回部分記錄了;
得知有備份,於是建議用備份在測試機上嘗試恢復;

下面做個簡單的實驗:


SQL> desc test
名稱 是否為空? 型別
----------------------------------------- -------- ----------------------------

A VARCHAR2(10)
C NUMBER
D CHAR(10)

SQL> select * from test;

A C D
---------- ---------- ----------
def 2
dd 2 ff
defg 1

SQL> delete from test;

已刪除3行。

SQL> select * from test;

未選定行

SQL> rollback;

SQL> select * from test;

A C D
---------- ---------- ----------
def 2
dd 2 ff
defg 1

SQL> delete from test;

已刪除3行。

SQL> commit;

提交完成。

SQL> select * from test;

未選定行

SQL> conn zxh/zxh
已連線。
SQL> flashback table test to before drop rename to test;
flashback table test to before drop rename to test
*
1 行出現錯誤:
ORA-38305:
物件不在回收站中

SQL> conn / as sysdba
已連線。
SQL> show parameter recyclebin

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
recyclebin string on

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
3472744

SQL> select * from zxh.test;

未選定行

SQL> select * from zxh.test as of scn 3472700;

未選定行

SQL> select * from zxh.test as of scn 3472600;

A C D
---------- ---------- ----------
def 2
dd 2 ff
defg 1

SQL> insert into zxh.test select * from zxh.test as of scn 3472600;

已建立3行。

SQL> commit;

提交完成。

SQL> select * from zxh.test;

A C D
---------- ---------- ----------
def 2
dd 2 ff
defg 1

SQL> conn zxh/zxh
已連線。
SQL> select * from test;

A C D
---------- ---------- ----------
def 2
dd 2 ff
defg 1

SQL> drop table test;

表已刪除。

SQL> commit;

提交完成。


SQL> flashback table test to before drop rename to test;

閃回完成。

SQL> commit;

提交完成。

SQL> select * from test;

A C D
---------- ---------- ----------
def 2
dd 2 ff
defg 1

SQL>

恢復成功。

總結:
誤刪除表
如果是drop,這個命令是DDL語句,刪除的資訊儲存在回收站(前提是recyclebin設定為on)中,這樣可以從回收站中將表閃回;
如果是delete,這個命令是DML語句,刪除的資訊儲存在undo中,可以用閃回查詢的辦法將資料恢復,多次嘗試查詢scn閃回查詢,儘可能的恢復到執行誤操作的前一個點(如果回滾段太小,有可能碰到經典的快照太舊問題)。

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

相關文章