在oracle 9i中引入flashback查询,以便能在需要的时候查到过去某个时刻的一致性数据,依赖于undo表空间存储的信息来闪回查询以前的版本,当然这个受限于undo表空间的大小,以及保留策略。如果undo 被覆盖了就不能进行查询。

oracle10g中增强了闪回查询的功能,并且提供了将整个数据库回退到过去某个时刻的能力,这是通过引入一种新的flashback log实现的。flashback log有点类似redo log,只不过redo log将数据库往前滚,flashback log则将数据库往后滚。为了保存管理和备份恢复相关的文件,oracle10g提供了一个叫做闪回恢复区(Flashback recovery area),这个区域默认创建在oracle_base目录下。 可以将所有恢复相关的文件,比如flashback log,archive log,backup set等,放到这个区域集中管理。

测试环境

SQL> select * from v$version;

BANNER

-----------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for 32-bit Windows: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 – Production

1. 设置闪回恢复区
闪回恢复区主要通过3个初始化参数来设置和管理

db_recovery_file_dest指定闪回恢复区的位置
db_recovery_file_dest_size指定闪回恢复区的可用空间大小

db_flashback_retention_target指定数据库可以回退的时间,单位为分钟,默认1440分钟,也就是一天。当然,实际上可回退的时间还决定于闪回恢复区的大小,因为里面保存了回退所需要的flash log。所以这个参数要和db_recovery_file_dest_size配合修改。

SQL> ALTER SYSTEM SET db_recovery_file_dest_size=3g SCOPE=BOTH;

System altered.

SQL> ALTER SYSTEM SET db_recovery_file_dest=' D:/app/Administrator/flash_recovery_area ' SCOPE=BOTH;

System altered.

SQL> show parameter db_recovery_file_dest

NAME                         TYPE        VALUE

------------------------------------                               -----------                                ------------------------------

db_recovery_file_dest                                     string                    D:/app/Administrator/flash_recovery_area

db_recovery_file_dest_size      big integer         3852M

SQL> show parameter db_flashback

NAME                        TYPE        VALUE

------------------------------------                               -----------                                ------------------------------

db_flashback_retention_target   integer      1440

2. 启动flashback database

默认情况数据库的flashback database是关闭,可以在mount exclusive状态下打开。在设置了闪回恢复区后,可以启动闪回数据库功能。

SQL> archive log list;   --数据库必须已经处于归档模式

数据库日志模式            存档模式

自动存档             启用

存档终点            d:/archivelog

最早的联机日志序列     60

下一个存档日志序列   62

当前日志序列           62

SQL> shutdown immediate;

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup mount;

ORACLE 例程已经启动。

Total System Global Area  849530880 bytes

Fixed Size                  1377896 bytes

Variable Size             637536664 bytes

Database Buffers          205520896 bytes

Redo Buffers                5095424 bytes

数据库装载完毕。

SQL> alter database flashback on;

数据库已更改。

SQL> alter database open;

数据库已更改。

SQL> select flashback_on from v$database;

FLASHBACK_ON

------------------

YES

3. 取消闪回恢复区
将db_recovery_file_dest参数设置为空,可以停用闪回恢复区。如果已经启用flashback database,则不能取消闪回恢复区。

SQL> alter system set db_recovery_file_dest='';

alter system set db_recovery_file_dest=''

*

第 1 行出现错误:

ORA-02097: 无法修改参数, 因为指定的值无效

ORA-38775: 无法禁用恢复区 - 闪回数据库已启用

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup mount;

ORACLE 例程已经启动。

Total System Global Area  849530880 bytes

Fixed Size                  1377896 bytes

Variable Size             637536664 bytes

Database Buffers          205520896 bytes

Redo Buffers                5095424 bytes

数据库装载完毕。

SQL> alter database flashback off;

数据库已更改。

SQL> alter database open;

数据库已更改。

SQL> alter system set db_recovery_file_dest='';

系统已更改。

SQL> show parameter db_recovery_file_dest

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_recovery_file_dest                string

db_recovery_file_dest_size           big integer 3852M

SQL>

注意:

(1)DB_RECOVERY_FILE_DEST_SIZE 只有在 DB_RECOVERY_FILE_DEST 清空之后才可以清空。

(2)初始化参数 db_recovery_file_dest_size 的设定有一点点需要注意的地方:

文件的第0块和操作系统数据块头的空间大小不包含在内,该参数并不代表实际占用的空间大小。如果空间被压缩、镜像、RAID 的话,该参数的值意义是不一样的

4. 闪回恢复区的内容
所有和恢复相关的文件都可以存放到闪回恢复区
SQL> select file_type from v$flash_recovery_area_usage;

FILE_TYPE

--------------------

CONTROL FILE

REDO LOG

ARCHIVED LOG

BACKUP PIECE

IMAGE COPY

FLASHBACK LOG

FOREIGN ARCHIVED LOG

已选择7行。

上面视图中查询的结果列出的所有类型的文件,都可以利用闪回恢复区来存放、管理。

在一些 10g 的动态视图里( V$CONTROLFILE, V$LOGFILE, V$ARCHIVED_LOG, V$DATAFILE_COPY 等 )的新的列 IS_RECOVERY_DEST_FILE ,指明相关的文件是否在恢复区内。

/* Formatted on 2010/8/13 0:04:22 (QP5 v5.115.810.9015) */

SELECT   recid, blocks, is_recovery_dest_file

FROM   v$archived_log

WHERE   recid < 5;

RECID     BLOCKS IS_

---------- ---------- ---

1      14141 NO

2         52 NO

3          7 NO

4        138 NO

SQL>

5 .  闪回恢复区的一些限制
如果设置了闪回恢复区,则log_archive_dest和log_archive_duplex_dest将不可用。

SQL> alter system set log_archive_dest='e:/' ;

alter system set log_archive_dest='e:/'

*

第 1 行出现错误:

ORA-02097: 无法修改参数, 因为指定的值无效

ORA-16018: 无法将 LOG_ARCHIVE_DEST 与 LOG_ARCHIVE_DEST_n 或

DB_RECOVERY_FILE_DEST 一起使用

SQL> alter system set log_archive_duplex_dest='e:/';

alter system set log_archive_duplex_dest='e:/'

*

第 1 行出现错误:

ORA-02097: 无法修改参数, 因为指定的值无效

ORA-16018: 无法将 LOG_ARCHIVE_DUPLEX_DEST 与 LOG_ARCHIVE_DEST_n 或

DB_RECOVERY_FILE_DEST 一起使用

说明:

设置闪回恢复区后,如果没有设置过log_archive_dest_n参数,则归档日志默认是保存到该区域的。实际上,oracle是通过隐式的设置log_archive_dest_10='location=USE_DB_RECOVERY_FILE_DEST'来实现的。所以,如果修改过log_archive_dest_n将归档日志保存到其他位置,也可以修改该参数继续使用闪回恢复区。

多个数据库的闪回恢复区可以指定到同一个位置,但是db_name不能一样,或者db_unique_name不一样。RAC的闪回恢复区必须位于共享磁盘上,能被所有实例访问。

6. 闪回恢复区的空间管理

闪回恢复区中添加或删除文件等变化都将记录在数据库的 alert 日志中,Oracle 10g 也针对该新特性提供了一个新的视图, DBA_OUTSTANDING_ALERTS,通过该视图可以得到相关的信息。

SQL>  DESC dba_outstanding_alerts

名称                                      是否为空? 类型

----------------------------------------- -------- ----------------------------

SEQUENCE_ID                                        NUMBER

REASON_ID                                 NOT NULL NUMBER

OWNER                                              VARCHAR2(30)

OBJECT_NAME                                        VARCHAR2(513)

SUBOBJECT_NAME                                     VARCHAR2(30)

OBJECT_TYPE                                        VARCHAR2(64)

REASON                                             VARCHAR2(4000)

TIME_SUGGESTED                                     TIMESTAMP(6) WITH TIME ZONE

CREATION_TIME                                      TIMESTAMP(6) WITH TIME ZONE

SUGGESTED_ACTION                                   VARCHAR2(4000)

ADVISOR_NAME                                       VARCHAR2(30)

METRIC_VALUE                                       NUMBER

MESSAGE_TYPE                                       VARCHAR2(12)

MESSAGE_GROUP                                      VARCHAR2(64)

MESSAGE_LEVEL                                      NUMBER

HOSTING_CLIENT_ID                                  VARCHAR2(64)

MODULE_ID                                          VARCHAR2(64)

PROCESS_ID                                         VARCHAR2(128)

HOST_ID                                            VARCHAR2(256)

HOST_NW_ADDR                                       VARCHAR2(256)

INSTANCE_NAME                                      VARCHAR2(16)

INSTANCE_NUMBER                                    NUMBER

USER_ID                                            VARCHAR2(30)

EXECUTION_CONTEXT_ID                               VARCHAR2(128)

ERROR_INSTANCE_ID                                  VARCHAR2(142)

在闪回恢复区中的空间使用超过 85% 的时候,数据库将会向 alert 文件中写入告警信息。而当超过 97% 的时候将会写入严重告警信息。当闪回恢复区空间不够的时候,Oracle将报告如下类似的错误:

ORA-19809: limit exceeded for recovery files

ORA-19804: cannot reclaim 52428800 bytes disk space from 1258291200 limit

这个时候查询 dba_outstanding_alerts:

SQL> select reason,object_type,suggested_action from dba_outstanding_alerts;

REASON                         OBJECT_TYPE          SUGGESTED_ACTION

------------------------------ -------------------- ----------------------------------------

db_recovery_file_dest_size of  RECOVERY AREA        Add disk space and increase db_recovery_

1258291200 bytes is 88.20% use                      file_dest_size, backup files to tertiary

d and has 148509184 remaining                        device, delete files from recovery area

bytes available.                                     using RMAN, consider changing RMAN rete

ntion policy or consider changing RMAN a

rchivelog deletion policy.

同时,oracle在alert中还会给出解决该问题的建议
************************************************************************
You have following choices to free up space from flash recovery area:
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMANB ACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating system command was used to delete files, then use RMAN CROSSCHECK and DELETE EXPIRED commands.
************************************************************************

V$RECOVERY_FILE_DEST视图 包含闪回恢复区的相关信息:

SQL> desc V$RECOVERY_FILE_DEST

名称                                      是否为空? 类型

----------------------------------------- -------- ---------------------

NAME                                               VARCHAR2(513)

SPACE_LIMIT                                        NUMBER

SPACE_USED                                         NUMBER

SPACE_RECLAIMABLE                                  NUMBER

NUMBER_OF_FILES                                    NUMBER

SQL> select * from v$recovery_file_dest;
NAME  SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES

---------- ----------- ---------- ----------------- ---------------

4039114752          0                 0               0

通过查询视图v$flash_recovery_area_usage,可以获得当前闪回恢复区的空间使用情况,并且可以知道是哪些文件占中了空间,据此可以做出相应的处理,或者加大闪回恢复区,或者移走相应的文件。

SQL> select * from v$flash_recovery_area_usage;
FILE_TYPE            PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE

-------------------- ------------------ -------------------------

CONTROL FILE                          0                         0

REDO LOG                              0                         0

ARCHIVED LOG                          0                         0

BACKUP PIECE                          0                         0

IMAGE COPY                            0                         0

FLASHBACK LOG                         0                         0

FOREIGN ARCHIVED LOG                  0                         0

如果闪回恢复区空间耗尽,且归档路径设置到了闪回恢复区中,则由于日志无法归档,数据库会hang住。所以,对于生产库,如果将归档放到闪回恢复区中,需要密切关注闪回恢复区的空间使用情况,否则一旦闪回恢复区的空间用尽,将导致数据库无法提供服务。

Flash Recovery Area空间不足导致数据库不能打开或hang住

http://blog.csdn.net/tianlesoftware/archive/2009/10/15/4668991.aspx

关于闪回区的备份,参考:

RMAN backup recovery area 命令

http://blog.csdn.net/tianlesoftware/archive/2010/08/12/5806756.aspx

整理自网络

------------------------------------------------------------------------------

Blog: http://blog.csdn.net/tianlesoftware

网上资源: http://tianlesoftware.download.csdn.net

相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx

DBA1 群:62697716(满); DBA2 群:62697977(满)

DBA3 群:63306533;     聊天 群:40132017

转载于:https://www.cnblogs.com/tianlesoftware/archive/2010/08/13/3610037.html

闪回恢复区 (Flash Recovery Area)相关推荐

  1. Oracle闪回恢复区(fast recovery area,FRA)

    Oracle闪回恢复区(fast recovery area,FRA) 闪回恢复区(Fast Recovery Area,FRA)是一块可选的磁盘位置,可以用来存储与恢复相关的文件,例如控制文件和联机 ...

  2. oracle有人用过fra吗,FRA(闪回恢复区)

    1.闪回恢复区简介 闪回恢复区可以集中存储所有与恢复相关的文件.FRA可以使用本地附加的存储.Oracle的群集文件系统(Cluster File System,简写为OCFS)或Oracle 10g ...

  3. oracle rac 快速闪回区 路径,oracle 10g rac配置闪回恢复区 开启归档

    DBCA创建数据库的时候,默认是不使用flash_recovery_area,不开启归档的. 本文以2个节点的rac为例,所阐述的内容是在新建数据库后,如何设置闪回恢复区,如何开启归档,设置归档路径. ...

  4. Oracle数据库中闪回恢复的详细分析

    Oracle9i开始提供闪回查询,以便能在需要的时候查到过去某个时刻的一致性数据,这是通过Undo实现的.这个功能有很大的限制,就是相关事务的undo不能被覆盖,否则就无力回天了.oracle10g大 ...

  5. oracle闪回 分区,Oracle 闪回区(Oracle Flash recovery area)

    闪回区已经有了好几载的岁月了,在10g的时候就被推出一直延续到现在.Oracle闪回区是为RMAN准备的,尽管抛开它我们可以同样完成数据库备份恢复的相关工作,Oracle依旧强烈推荐使用且它让其成为R ...

  6. oracle之Flash Recovery Area全面介绍

    1. 设置闪回恢复区 闪回恢复区主要通过3个初始化参数来设置和管理 db_recovery_file_dest:指定闪回恢复区的位置 db_recovery_file_dest_size:指定闪回恢复 ...

  7. RMAN Recipes 中对Flash Recovery Area的总结

    最近在看<RMAN Recipes for Oracle Database 11g>,老外讲得啰里吧嗦,我把其中有一些比较重要的操作记下,以便以后查阅,如果顺利,以后看完每章都做一次总结, ...

  8. 怎样恢复oracle函数,Oracle闪回恢复误删除的表、存储过程、包、函数...

    在日常的数据库开发过程汇总难免会出现一些误删除的动作, 对于一些误删的操作我们可以通过oracle提供的闪回机制恢复误删数据, 从而避免出现较大的生产事故. 下面是本人平时工作中积累的一些常用的操作, ...

  9. binlog2sql闪回恢复数据

    用途: 1.数据快速回滚 2.从binlog生成标准sql 使用限制: 1.必须设置binlog_format=ROW 2.binlog_row_image=full,该参数默认为FULL 3.恢复用 ...

最新文章

  1. 竟有如此沙雕的代码注释!
  2. 组会PPT20200910《大工HPT放电结果错误剖析》
  3. Continuous Intervals Gym - 102222L(2018宁夏邀请赛暨2019银川icpc网络预选赛)
  4. 宝藏好物gRPCurl
  5. 【NLP】Stanford
  6. Halcon 圆形标定板标定基本流程-标定助手操作
  7. windows连接远程桌面必须要有用户名和密码
  8. 海思AI芯片3559A方案学习(一)
  9. laravel pdf 加水印
  10. 如何免费复制网页内容
  11. 获取购买到的淘宝商品订单详情API接口,买家订单API接口,买家订单详情API接口
  12. 未连接到互联网的解决方法(chrome)
  13. 一个简单的CD唱片管理程序
  14. stata里php代码,stata字符型数据如何转数值型
  15. project和program的区别
  16. 战斗机机动动作分类与模型
  17. redis杂乱小知识
  18. python教材答案程序设计导论论文_计算机基础及Python程序设计导论(高等学校通识教育系列教材)...
  19. 数据治理:认识数据治理
  20. mysql查询和某人一样_使用sql语句实现查询某人的排名,分数相同排名相同

热门文章

  1. 网站优化助力网站在同行中更加出类拔萃
  2. 网站SEO优化中长尾关键词的特征有哪些?
  3. php在线备忘录,一个会话备忘录小程序的实现方法
  4. linux ftp服务器搭建及用户的分配,Linux搭建FTP服务器
  5. bilibili怎么设置弹幕数量_python爬取B站视频弹幕分析并制作词云
  6. 数据集标注工具_如何提高数据标注质量,提供精细化标注数据集?丨曼孚科技...
  7. go语言学习(3)面向对象,结构体和方法
  8. lucene 范围过滤
  9. springboot和flowable modeler整合
  10. [python]两种编程思维--面向过程和面向对象