oracle闪回区满了解决方案

oracle闪回区满了解决方案

3853发表于2015-04-05

oracle如果开启了闪回,当闪回区的磁盘空间被占满了时数据库会挂掉,重启也会报错(not archived, no available destinations),下面我来介绍一下oracle闪回区满了解决方案。

一、把数据库启动到mount状态并把闪回空间改大

SQL > startup mount

SQL > alter system set db_recovery_file_dest_size=10G scope=both;--改大

sql>alter database open;

注意:要把闪回空间改大才能正常把数据库启动到open状态。

二、用RMAN命令删除老的日志文件

操作系统命令,删除物理文件(rm -vf )

进入rman

RMAN> crosscheck archivelog all;

RMAN> delete expired archivelog all;

SQL> select (space_used/space_limit)*100 from v$recovery_file_dest;--查看闪回空间使用率


查看alert告警,以及oracle给出的处理建议。

select reason,object_type,suggested_action  from dba_outstanding_alerts; 
 
REASON                db_recovery_file_dest_size 字节 (共 2147483648 字节) 已使用 98.55%, 尚有 31102976 字节可用。 
OBJECT_TYPE        RECOVERY AREA 


SUGGESTED_ACTION "可以选择以下操作之一从快速恢复区释放空间: 


1. 考虑更改 RMAN RETENTION POLICY。如果使用的是 Data Guard, 则考虑更改 RMAN ARCHIVELOG DELETION POLICY。 


2. 使用 RMAN BACKUP RECOVERY AREA 命令将文件备份到磁带之类的三级存储。 


3. 添加磁盘空间并增大 db_recovery_file_dest_size 参数以反映 这个新空间。

 
4. 使用 RMAN DELETE 命令删除不需要的文件。如果使用了操作系统  命令来删除文件, 则使用 RMAN CROSSCHECK 和 DELETE EXPIRED 命令。
 
这里我只试了第3、4种方法
第3种修改方法,扩展闪回区

SQL> show parameter db_recovery_file_dest_size; 
 
NAME                                 TYPE        VALUE 
------------------------------------ ----------- ------------------------------ 
db_recovery_file_dest_size           big integer 2G 
 
SQL> alter system set db_recovery_file_dest_size=4G scope=both; 
 
系统已更改。 
 
SQL> show parameter db_recovery_file_dest_size; 
 
NAME                                 TYPE        VALUE 
------------------------------------ ----------- ------------------------------ 
db_recovery_file_dest_size           big integer 4G 

现在已经将闪回区空间扩充到了4G,也就是新增了2G。
 
第4种修改方法,清空闪回区
注意,刚才直接将db_recovery_file_dest目录下的文件删除,SPACE_USED也不会释放。

oracle@linux-35:~> rman target / 
 
Recovery Manager: Release 11.1.0.6.0 - Production on Wed Oct 12 12:35:09 2011 
 
Copyright (c) 1982, 2007, Oracle.  All rights reserved. 
 
connected to target database: ORARPT (DBID=2356255833) 
 

RMAN> crosscheck archivelog all;  (校验归档找出不可用的直接删除的) 

RMAN> delete expired archivelog all; (删除失效的归档)


再查看闪回区的信息,SPACE_USED已经释放。

select * from v$recovery_file_dest; 
 
NAME                /home/oracle/flash_recovery_area 
SPACE_LIMIT    2147483648 
SPACE_USED     0 
SPACE_RECLAIMABLE      0 
NUMBER_OF_FILES    0

小编蓝狐