Flashback有四种类型:flashback database、flashback query、flashback drop 和 flashback vesion
闪回区的管理:
如果没有规定闪回区,闪回区放在db_recovery_file_dest里面,当然db_recovery_file_dest里面不仅仅是存放闪回数据文件,他还存放flashback的使用目录,rman、归档日志等。关于此区域的备份oracle提供了两条特殊的命令:
1、backup recovery area;
用来备份db_recovery_dest目录里面的文件;
2、backup recovery files;
扩展第一个命令,可以用来备份全的的恢复文件
3、将某个表空间的闪回功能失效:
SQL> alter tablespace tablespace_name flashback off;
Flashback database:
配置flashback database:
Flashback只能恢复逻辑错误,不能恢复物理错误。
1、启用archivelog模式,flashback database 只能处于归档模式。
SQL> shutdowm immediate;
SQL> alter database mount;
SQL>alter database archivelog on;
2、建立闪回区
SQL> alter system set db_recovery_file_dest='/u01/pracle/flashback_area';
SQL> alter system set db_recovery_file_size=3G;
3、设置闪回数据库的生存周期为一天,以分钟为单位
SQL> alter system set db_flashback_retention_target=1440;
4、启用闪回日志
SQL> shutdowm immediate;
SQL> alter database mount;
SQL>alter database aflashback on;
5、查询是否成功启用flashback databse
SQL> select flashback_on from V$database;
闪回数据库使用后必须使用resetlogs来重新打开数据库。
Flashback table (必须启用row movement)
闪回表空间用例:
1、创建一个表空间做测试用:
SQL> create tablespace pioncare_test datafile '+DATA/prod/datafile/pioncare_test.dbf' size 10m;
SQL> create table pioncare_test tablespace pioncare_test as select * from all_user;
2、删除表空间pioncare_test
SQL> alter session set nls_data_format='yyyy-mm-dd hh24:mi:ss'
SQL> select sysdata from dual;
SQL> drop tablespace pioncare_test including contents and datafiles;
3、执行闪回表空间
SQL> startup force mount;
SQL> flashback database to timestamp to_timestamp('2011-11-14 10:22:32', 'yyyy-mm-dd hh24:mi:ss');
4、创建恢复数据文件
SQL> alter database create datafile 6 as '+DATA/prod/datafile/pioncare_test.dbf' size 10m;
SQL> alter database datafile 6 online;
5、完成闪回数据表空间
SQL> alter database open resetlogs;
Flashback database闪回表的错误事物
1、创建一张表pioncare_test1用来模拟闪回结果
SQL> create table pioncare_test1 tablespace pioncare_test as select * from all_user;
SQL> select count(*) from pioncare_test1
2、分部删除这张表的数据,并记录每次删除的系统时间。
SQL> alter session set nls_data_format='yyyy-mm-dd hh24:mi:ss'
SQL> select sysdata from dual;
SQL> delete from pioncare_test1 where rownum<=10;
SQL> commit;
SQL> select count(*) from pioncare_test1;
再执行另外一个删除动作:
SQL> select sysdata from dual;
SQL> delete from pioncare_test1 ;
SQL> commit;
SQL> select count(*) from pioncare_test1;
3、现在我们想闪回到第二删除动作之前标的状态,即第一删除是正确的,第二次删除是错误的;
SQL> startup froce mount;
SQL> alter session set nls_data_format='yyyy-mm-dd hh24:mi:ss';
SQL> flashback database to timestamp to_timestamp('2011-11-14 10:22:32', 'yyyy-mm-dd hh24:mi:ss');
SQL> alter database open read only;
SQL> selece count(*) from fb_test;
SQL> startup force mount;
SQL> alter database open resetlogs;
Flashback drop
Flashback drop不需要配置,默认已经启用,由于oracle10g里面delete不是真正的删除而是重命名,
1、使用drop table删除的表,可以在回收站中查询到
SQL> select object_name,original_name,type from user_recyclebin;
2、恢复drop table删除的表(表放在回收站中会以BIN$开头)
SQL> flashback table "BIN$*******" to before drop;
3、注意:flashback drop闪回的表命名还是没有修改过来需要重新rename修改;
如果想真正的删除表可以使用 purge选项:
SQL> drop table table_name purge;
SQL> purge table table_name
Flashback query
闪回查询:
SQL> select * from table_name as of timestamp to_timestamp('2011-11-14 11:12:22',' yyyy-mm-dd hh24:mi:ss')
开启记录转移:
SQL> alter table table_name enable row movement;
闪回表:
SQL> flashback table table_name to timestamp to_timestamp('2011-11-14 11:12:22',' yyyy-mm-dd hh24:mi:ss')
Flashback versions query
SQL> select col,version_startime from hek_prod versions between scn minvalue and maxvalue;
Flashback transaction query