北极之冰

oracle9i找回被删除的数据

在ORACEL的操作中往往会误删除一些数据,比如某个表的数据被删除了,某个表被DROP掉了,往往这些数据又没有备份,但有是特别重要的数据,怎么办呢?用ORACEL中的SCN新特性找回把 :-)
以下是相关代码:
EYGLE  on 30-MAR-05 >select count(*) from t1;

  COUNT(*)
----------
      9318
可以看到在05年3月30日表T1里面的记录行数为9318条
然后删除T1里的数据并提交后查询COUNT(*)条数
EYGLE  on 30-MAR-05 >delete from t1;

9318 rows deleted.

EYGLE  on 30-MAR-05 >commit;

Commit complete.

EYGLE  on 30-MAR-05 >select count(*) from t1;

  COUNT(*)
----------
         0
可以看到现在的条数为0条

现在进行闪回查询尝试
EYGLE  on 30-MAR-05 >select dbms_flashback.get_system_change_number from dual;  -------这句话的意思是获得当前的SCN

GET_SYSTEM_CHANGE_NUMBER
------------------------
                10671006

EYGLE  on 30-MAR-05 >select count(*) from t1 as of scn 10671000;

  COUNT(*)
----------
         0

EYGLE  on 30-MAR-05 >select count(*) from t1 as of scn 10670000;

  COUNT(*)
----------
      9318
大家可以看到 在1067000的时候数据都在,可是大家会提问题,我并不知道删除后提交时的SCN是多少啊,对,dbms_flashback.get_system_change_number只能获得当前的SCN,若需要获得删除时候的SCN就需要用DBMS_FLASHBACK.ENABLE_AT_TIME函数了,举例说明
execute DBMS_FLASHBACK.ENABLE_AT_TIME(to_date('2003-05-16 15:00:00'));
比如我要知道'2003-05-16 15:00:00'时间段的SCN是多少

查到响应的SCN后就可以恢复数据了
EYGLE  on 30-MAR-05 >insert into t1 select * from t1 as of scn 10670000;

9318 rows created.

EYGLE  on 30-MAR-05 >commit;

Commit complete.

在去看看表中的数据把 神气的回来了 哈哈

posted on 2009-04-20 14:24  北极之冰  阅读(230)  评论(0)    收藏  举报