Flashback_Recovery_Area(FRA)相关介绍(二)
1.?设置闪回恢复区
闪回恢复区主要通过3个初始化参数来设置和管理 db_recovery_file_dest:指定闪回恢复区的位置 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:appAdministratorflash_recovery_area?' SCOPE=BOTH; SQL> show parameter db_recovery_file_dest NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string D:appAdministratorflash_recovery_area db_recovery_file_dest_size big integer 3852M SQL> show parameter db_flashback ------------------------------------ ----------- ------------------------------ db_flashback_retention_target integer 1440 2.?启动flashback database 默认情况数据库的flashback database是关闭,可以在mount exclusive状态下打开。在设置了闪回恢复区后,可以启动闪回数据库功能。 数据库日志模式?存档模式 自动存档?启用 存档终点?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.?取消闪回恢复区 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; 系统已更改。 db_recovery_file_dest string SQL> 注意: (1)DB_RECOVERY_FILE_DEST_SIZE?只有在?DB_RECOVERY_FILE_DEST?清空之后才可以清空。 (2)初始化参数?db_recovery_file_dest_size?的设定有一点点需要注意的地方: 文件的第0块和操作系统数据块头的空间大小不包含在内,该参数并不代表实际占用的空间大小。如果空间被压缩、镜像、RAID?的话,该参数的值意义是不一样的 4.?闪回恢复区的内容 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 alter system set log_archive_dest='e:/' 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:/' ORA-16018:?无法将?LOG_ARCHIVE_DUPLEX_DEST?与?LOG_ARCHIVE_DEST_n?或 说明: 设置闪回恢复区后,如果没有设置过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中还会给出解决该问题的建议 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; ---------- ----------- ---------- ----------------- --------------- 4039114752 0 0 0 通过查询视图v$flash_recovery_area_usage,可以获得当前闪回恢复区的空间使用情况,并且可以知道是哪些文件占中了空间,据此可以做出相应的处理,或者加大闪回恢复区,或者移走相应的文件。 -------------------- ------------------ ------------------------- 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住。所以,对于生产库,如果将归档放到闪回恢复区中,需要密切关注闪回恢复区的空间使用情况,否则一旦闪回恢复区的空间用尽,将导致数据库无法提供服务。 --本篇文章转自:http://blog.sina.com.cn/s/blog_4ab088470106b36f.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |