意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

快速恢复区 fast recovery area

来源:恒创科技 编辑:恒创科技编辑部
2023-12-06 00:37:59

闪回恢复区用于存储与恢复相关的文件,如控制文件、联机重做日志文件、归档重做日志文件、闪回日志和RMAN备份.DB_RECOVERY_FILE_DEST_SIZE为闪回恢复区大小,Fast Recovery Area之前称为Flash Recovery Area,即快速恢复区.

1、闪回恢复区的创建

DB_RECOVERY_FILE_DEST指定闪回恢复区位置,其可以指向磁盘,也可以指向ASM磁盘组;


快速恢复区 fast recovery area

DB_RECOVERY_FILE_DEST_SIZE定义闪回恢复区大小.

RAC环境配置闪回恢复区时,需保证每个节点的的值相同,这两个参数可以在线修改.

SQL> alter system set db_recovery_file_dest_size='2G' scope=both sid='*';

System altered.

SQL> alter system set db_recovery_file_dest='+fra' scope=both sid='*';

System altered.

SQL> show parameter db_recover

NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
db_recovery_file_dest string F:\oracle19c\db_recovery_file
db_recovery_file_dest_size big integer 20G
SQL> alter system set db_recovery_file_dest_size=25G;

系统已更改。

SQL> show parameter db_recover

NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
db_recovery_file_dest string F:\oracle19c\db_recovery_file
db_recovery_file_dest_size big integer 25G

注意1:如果使用ASM作为Fast Recovery Area时,只能指定到Diskgroup级别,如下:

SQL> alter system set db_recovery_file_dest='+fra/test' scope=both sid='*';

alter system set db_recovery_file_dest='+fra/test' scope=both sid='*'

*

ERROR at line 1:

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

ORA-01261: 无法转换参数 db_recovery_file_dest 的目标字符串
注意2:在配置Fast Recovery Area时,需先设置DB_RECOVERY_FILE_DEST_SIZE,再设置DB_RECOVERY_FILE_DEST,否则会报错,如下:

SQL> alter system set db_recovery_file_dest='+fra' scope=both sid='*';

alter system set db_recovery_file_dest='+fra' scope=both sid='*'

*

ERROR at line 1:

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

ORA-19802: 无法使用 DB_RECOVERY_FILE_DEST, 由于缺少 DB_RECOVERY_FILE_DEST_SIZE

2、闪回恢复区监控

当闪回恢复区空间使用率达到90%时,会触发自动删除,删除过程会在alert文件中记录日志:

a、持久文件不会被删除.

b、通过RMAN 配置策略过期的文件会被删除.

c、已经拷贝到磁带上的临时性文件会被删除.

d、DG环境中,当已归档的重作日志文件可以从闪回恢复区中删除时,可应用归档重作日志删除策略进行自动删除(在恢复管理器中CONFIGURE ARCHIVELOG DELETION POLICY TO ......)

在闪回恢复区中的空间使用超过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.

1 rows selected.

说明:如果FRA被撑满,会导致所有需要FRA空间的会话hang住,例如切换归档的会话.因此日常工作中需要监控快速恢复区使用情况,及时进行调整.

可以通过视图V$RECOVERY_FILE_DEST和V$RECOVERY_AREA_USAGE来监控快速恢复区的使用情况.

通过视图V$RECOVERY_FILE_DEST可以确认闪回空间的使用情况,其SQL如下所示:

col name for a35
SELECT NAME,
TRUNC(SPACE_LIMIT / 1024 / 1024 / 1024, 3) LIMIT_GB,
TRUNC(SPACE_USED / 1024 / 1024 / 1024, 3) USED_GB,
TRUNC(SPACE_USED / SPACE_LIMIT, 3) "USED%",
TRUNC(SPACE_RECLAIMABLE, 3) RECLAIM,
NUMBER_OF_FILES
FROM V$RECOVERY_FILE_DEST V
WHERE V.SPACE_LIMIT <> 0;
NAME LIMIT_GB USED_GB USED% RECLAIM NUMBER_OF_FILES
----------------------------------- ---------- ---------- ---------- ---------- ---------------
F:\oracle19c\db_recovery_file 20 .039 .001 32096256 4

若想查询详细情况,执行如下SQL:
SELECT NVL(FRAU.FILE_TYPE, 'Total:') FILE_TYPE,
SUM(ROUND(FRAU.PERCENT_SPACE_USED / 100 * RFD.SPACE_LIMIT / 1024 / 1024 / 1024,
3)) USED_GB,
SUM(FRAU.PERCENT_SPACE_USED) PERCENT_SPACE_USED,
SUM(FRAU.PERCENT_SPACE_RECLAIMABLE) PERCENT_SPACE_RECLAIMABLE,
SUM(ROUND(FRAU.PERCENT_SPACE_RECLAIMABLE / 100 *
RFD.SPACE_LIMIT / 1024 / 1024 / 1024,
3)) RECLAIM_GB,
SUM(FRAU.NUMBER_OF_FILES) NUMBER_OF_FILES FROM V$FLASH_RECOVERY_AREA_USAGE FRAU,
V$RECOVERY_FILE_DEST RFD GROUP BY ROLLUP(FILE_TYPE);

FILE_TYPE USED_GB PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE RECLAIM_GB NUMBER_OF_FILES
------------------------------ ---------- ------------------ ------------------------- ---------- ---------------
ARCHIVED LOG 0 0 0 0 0
AUXILIARY DATAFILE COPY 0 0 0 0 0
BACKUP PIECE .03 .15 .1 .02 3
CONTROL FILE 0 0 0 0 0
FLASHBACK LOG 0 0 0 0 0
FOREIGN ARCHIVED LOG 0 0 0 0 0
IMAGE COPY 0 0 0 0 0
REDO LOG 0 0 0 0 0
Total: .03 .15 .1 .02 3

已选择 9 行.

如果要撤销闪回恢复区,把初始化参数 DB_RECOVERY_FILE_DEST的值清空即可.

注意: DB_RECOVERY_FILE_DEST_SIZE只有在DB_RECOVERY_FILE_DEST清空之后才可清空

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

文件的第0块和操作系统数据块头的空间大小不包含在内,该参数并不代表实际占用的空间大小.

如果空间被压缩、镜像、RAID的话,该参数的值意义是不一样的.

SQL> host tree /u01/app/oracle/flash_recovery_area

/u01/app/oracle/flash_recovery_area

├── orcl

│ └── control02.ctl

└── ORCL

└── onlinelog

3 directories, 1 file

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

SELECT NAME,
space_limit,
space_used,
space_reclaimable space_rec,
number_of_files file_num
FROM v$recovery_file_dest;

NAME SPACE_LIMIT SPACE_USED SPACE_REC FILE_NUM
-------------------------------------------------- ----------- ---------- ---------- ----------
/u01/app/oracle/flash_recovery_area 4070572032 0 0 0

10g动态视图( V$CONTROLFILE, V$LOGFILE, V$ARCHIVED_LOG, V$DATAFILE_COPY 等 )的新列

指明相关的文件是否在恢复区内

SELECT recid, blocks, is_recovery_dest_file
FROM v$archived_log
WHERE recid < 5;

RECID BLOCKS IS_
---------- ---------- ---
1 86483 NO
2 41508 NO

注意:在生产数据库上使用必须要把闪回恢复区放到单独的磁盘上.

alter database flashback off;后闪回日志会自动删除.

备注:此文章大部分来自网络,具体参考网址当时未做好记录.如有侵权,请联系博主删帖.

上一篇: mysql直接拷贝data目录下数据库源文件还原数据库方法 下一篇: 删除表空间数据文件