①概述:目的是避免用户因操作失误,丢失数据,而采取的一种保护措施,是用户的数据“失而复得”。闪回查询有多种形式,闪回表,闪回删除,闪回数据库,闪回版本查询,闪回事务查询,闪回数据归档(oracle11G引入的)。
②闪回恢复区
闪回数据库是将数据库回退到过去的的时间点或scn。
闪回恢复区是一块用来存储恢复相关的文件的存储空间,闪回恢复区的存放路径有参数db_recovery_file_dest决定,闪回恢复去的大小有参数db_recovery_file_dest_size决定,db_flashback_retention_targetb_flashback_retention_target指定的是闪回数据库最少能够回退的时间,默认为1440分。
③闪回技术
闪回表:把表前滚到过去的时间点或者SCN上,从而达到恢复表功能.
使用闪回表技术注意的地方:
用户要有select,insert ,delete,alter权限;
用户要有flashback any table权限
表的行移动(row movement)功能要启动
使用flashback table *** to 时间戳
闪回删除:使用oracle的回收站,回收站把所有的被用户删除的对象存储在里面,如果用户删除一个表,表不会彻底从数据库中删除,而是被存储到回收站里。
用show recyclebin参看回收站的信息
闪回数据库:将数据库回退到过去的一个时间点或SCN,从而实现数据的的恢复。
使用alter database flashback on命令启动闪回数据库功能。(注意:要把数据库mount状态并且数据库处于归档模式)
闪回版本查询:闪回版本查询提供了一个审计改变的查询功能,可以通过它查询到所有的已提交了的行记录
闪回事务查询:闪回版本查询的一个扩充,通过闪回事务查询可以审计某个事务甚至撤销一个已提交的事务。它利用初始化的数据库参数UNDO_RETENTION来确定已经提交的撤销数据在数据库中的保存时间。
闪回数据归档:闪回数据归档不同于其他的的闪回形式,它不依赖undo数据,除了闪回数据库是依赖日志,其他都是依赖依赖undo数据。它把变化的数据存储到创建的闪回数据归档区中,不受undo数据的限制。
闪回实例:
SQL> select count(*) from zq.test;
COUNT(*)
----------
7
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
610369
SQL> truncate table zq.test;
Table truncated.
SQL> select count(*) from zq.test;
COUNT(*)
----------
0
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 180355072 bytes
Fixed Size 788028 bytes
Variable Size 145488324 bytes
Database Buffers 33554432 bytes
Redo Buffers 524288 bytes
Database mounted.
SQL> flashback database to scn 610369;
Flashback complete.
SQL> alter database open resetlogs;
Database altered.
SQL> select count(*) from zq.test;
COUNT(*)
----------
7