oracle之Flash Recovery Area全面介绍
refer to: http://blog.sina.com.cn/s/blog_4ab088470106b36f.html
oracle之Flash Recovery Area全面介绍闪回恢复区主要通过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; System altered. 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 NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ 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; 数据库已更改。 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.闪回恢复区的内容 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,指明相关的文件是否在恢复区内。 SELECTrecid,blocks,is_recovery_dest_file FROMv$archived_log WHERErecid<5; RECID BLOCKS IS_ ---------- ---------- --- 1 14141 NO 2 52 NO 3 7 NO 4 138 NO SQL>
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中还会给出解决该问题的建议 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |