1.修改库的归档模式
startup mount -> alter database archivelog ->alter system switch logfile(手动归档切换)生成归档文件
2.
select name,first_change# fscn,next_change# nscn,first_time from v$archived_log
1 +DG1/devdb/1_41_789857151.dbf 1241938 1253322 2012-8-9 上午 05:23:19
2 +DG1/devdb/1_42_789857151.dbf 1253322 1253503 2012-8-10 上午 05:58:03
3 +DG1/devdb/1_43_789857151.dbf 1253503 1253521 2012-8-10 上午 05:59:49
4 +DG1/devdb/2_22_789857151.dbf 1197906 1253519 2012-8-3 上午 04:52:10
5 +DG1/devdb/2_23_789857151.dbf 1253519 1253856 2012-8-10 上午 05:59:52
3.create table aa as select * from dba_objects;
SQL> delete from aa where rownum<1200;
1199 rows deleted.
SQL> commit;
Commit complete.SQL> delete from aa where rownum<5000;
4999 rows deleted.
4.发现表的数据不对了,误delete;
先获取当前SCN,作参考
SQL> select dbms_flashback.get_system_change_number fscn from dual;
FSCN
----------
12562235.然后根据归档的时间和FSCN号码进行反复尝试,达到一个认为满意的值时为止;
1* select count(*) from aa as of scn &scn
SQL> /
Enter value for scn: 1253521
old 1: select count(*) from aa as of scn &scn
new 1: select count(*) from aa as of scn 1253521
COUNT(*)
----------
50658
SQL> /
Enter value for scn: 1253519
old 1: select count(*) from aa as of scn &scn
new 1: select count(*) from aa as of scn 1253519
COUNT(*)
----------
50658
SQL> /
Enter value for scn: 1253503
old 1: select count(*) from aa as of scn &scn
new 1: select count(*) from aa as of scn 1253503
COUNT(*)
----------
50658
6. 再创建一张临时存数据的表
crate table aa2 as select * from aa where 1=2;
然后将确定的SCN值插回aa2表做两表的对比,
将少的数据插回表中即可;
二.当中间出现过DDL操作对此表(eg.truncate),那么再用闪回时将报
*
ERROR at line 1:
ORA-01466: unable to read data - table definition has changed
三。此操作对于insert,update同样生效,操作类似;
四。闪回本质是利用UNDO表空间内容;