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.
在去看看表中的数据把 神气的回来了 哈哈
浙公网安备 33010602011771号