oracle之Flash Recovery Area全面介绍

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

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

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

 

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

System altered. ide

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

System altered. 操作系统

SQL> show parameter db_recovery_file_dest 日志

NAME TYPE VALUE ci

------------------------------------ ----------- ------------------------------ rem

db_recovery_file_dest string D:\app\Administrator\flash_recovery_area get

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>

 

 

注意:

1DB_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 ,指明相关的文件是否在恢复区内。

 

 

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_destlog_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.

 

 

同时,oraclealert中还会给出解决该问题的建议
************************************************************************
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住。因此,对于生产库,若是将归档放到闪回恢复区中,须要密切关注闪回恢复区的空间使用状况,不然一旦闪回恢复区的空间用尽,将致使数据库没法提供服务。
相关文章
相关标签/搜索