闪回功能在ORACLE中默认是关闭的,需要按照下面的方式开启:
Sql>startup mount
Sql>alter database flashback on;
Sql>alter database open;
此时已经开启了闪回功能,可以通过v$database中的flashback_on来确定:
建立一个表格验证闪回功能:
Sql>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'
Sql>create table test(x int);
Sql>insert into test values(1);
Sql>commit;
Sql>select * from test;
1、闪回数据库
Sql>select sysdate from dual;
Sql>truncate table test;
Sql>shutdown immediate
Sql>startup mount
Sql>flashback database to timestamp to_date(‘先前查出来的系统时间’,’yyyy-mm-dd hh24:mi:ss’);
Sql>alter database open resetlogs;
进入数据库后查看先前的表,可以看到记录恢复:
2、闪回DROP
Sql>drop table test;
Sql>show recyclebin;
Sql>flashback table test to before drop;
查询表已经被还原,使用purge命令可以删除回收站,或者删除表的时候直接删除不进回收站(purge recyclebin/drop table test purge)
3、通过SCN闪回表
Sql>select dbms_flashback.get_system_change_number from dual;
Sql>delete from test;
Sql>commit;
Sql>alter table test enable row movement;(闪回表的过程中不能保证rowid不变,因此要启动行移动功能)
Sql>flashback table test to scn xxxx;