oracle 闪回
一.闪回概述
如果你对数据误操作,并已提交,这时想回退该误操作,将会是件麻烦的事情。但是,oracle推出了Flashback技术,主要目的就是为了恢复误操作。
在oracle 10g中,Flashback家族分为以下成员:Flashback Database, Flashback Drop, Flashback Query(分Flashback Query, Flashback Version Query, Flashback Transaction Query三种)和Flashback Table
在oracle 11g中,又出了一个新特性:Oracle Flashback Data Archive
二.闪回恢复区
2.1).oracle查看闪回恢复区设置
C:\app\admin\product\11.2.0\dbhome_1\BIN>sqlplus / as sysdba
SQL> show parameter recov;

如果闪回恢复区大小为0,并且闪回恢复区目录未设置,则闪回未开启。可以直接设值,即可开启闪回功能。
开启闪回功能:
SQL> ALTER SYSTEM SET db_recovery_file_dest_size=3g SCOPE=BOTH; -----设置闪回恢复区大小为3g
SQL> ALTER SYSTEM SET db_recovery_file_dest='C:\app\admin\flash_recovery_area' SCOPE=BOTH; -----设置闪回恢复区目录
取消闪回功能:
SQL> ALTER SYSTEM SET db_recovery_file_dest=''; -----设置闪回恢复区目录为空即可
2.2).闪回恢复区内容
所有和恢复相关的文件都可以存放到闪回恢复区
SQL> select file_type from v$flash_recovery_area_usage;
FILE_TYPE
--------------------
CONTROL FILE --控制文件
REDO LOG --redo日志
ARCHIVED LOG --归档日志
BACKUP PIECE --备份文件
IMAGE COPY --备份的镜像文件
FLASHBACK LOG
FOREIGN ARCHIVED LOG
7 rows selected.
2.3).闪回恢复区的空间管理
闪回恢复区中添加或删除文件等变化都将记录在数据库的alert日志中,oracle 10g开始也针对该新特性提供了一个新的视图,DBA_OUTSTANDING_ALERTS,通过该视图可以得到相关的信息。
在闪回恢复区中的空间使用超过85%的时候,数据库将会向alert文件中写入告警信息。而当超过97%的时候将会写入严重告警信息。当闪回恢复区空间不够的时候,oracle将报告如下类似的错误:

这个时候查询
SQL> select reason,object_type,suggested_action from dba_outstanding_alerts;
v$Recovery_file_dest视图包含闪回恢复区的相关信息:
SQL> select * from v$Recovery_file_dest;
通过查询v$Recovery_file_dest,可以获得当前闪回恢复区的空间使用情况,并且可以知道是哪些文件占用了空间,据此可以做出相应的处理,或者加大闪回恢复区,或者移走相应的文件。
视图v$flash_recovery_area_usage可以查看当前各种文件占用空间情况
SQL> select * from v$flash_recovery_area_usage;
三.Flashback Database(将数据库闪回到之前的某个状态,一般不用)
Flashback Database功能非常类似RMAN的不完全恢复,它可以把整个数据库回退到过去产的某个时点的状态,这个功能依赖于Flashback log日志。比RMAN更快速和高效。因此Flashback Database可以看作是不完全恢复的替代技术。但它也有某些限制:
(1)Flashback Database不能解决Media Failure, 这种错误RMAN恢复仍是唯一选择。
(2)如果控制文件是从备份中恢复出来的,或者是重建的控制文件,也不能使用 Flashback Database.
(3)使用Flashback Database能恢复到的最早的SCN, 取决于Flashback Log中记录的最早SCN.
3.1).启动Flashback database
数据库的Flashback Database功能缺省是关闭的,要想启用这个功能,需要两个前提:
打开归档,需要在mount状态下打开;在设置了闪回恢复区后,可以启动闪回数据库功能。
打开归档步骤:
startup mount;
alter database archivelog; --开启归档
alter database open;
SQL> archive log list; --数据库必须已经处于归档模式
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database flashback on;
SQL> alter database open;
SQL> select flashback_on from v$database;
四.Flashback Drop(只针对drop)
Flashback Drop是从Oracle 10g开始出现的,用于恢复用户误删除的对象(包括表,索引等),这个技术依赖于Tablespace Recycle Bin(表空间回收站)
Flashback Drop只支持闪回与table相关连的对象,比如表,索引,约束,触发器等。如果是函数或存储过程等,就需要使用Flashback Query来实现。
查看Recycle Bin状态
SQL> show parameter recycle;
缺省是ON,可以使用OFF关闭。禁用后删除的对象将直接删除,不会写到recycle中,当然在删除时,指定purge参数,表也将直接删除,不会写到recyclebin中。
SQL> alter system set recyclebin=off;
SQL> alter system set recyclebin=on;
