开发测试人员在测试环境做应用测试的时候忘记关闭测试环境oracle数据库的归档,由于应用连接数据库产生了大量的日志,数据库在归档这些日志 时,默认的归档位置flash_recovery_area分配的空间使用完了,导致数据库hang住了,记录一下问题的处理思路。
oracle的归档日志默认放到ORACLE_HOME下的flash_recovery_area目录下,大小为2G。生产环境的话建议把归档改到其它目录,大小改大。测试环境最好直接关闭归档。

由于归档空间导致的数据库hang住,oracle 的错误日志如下:
Tue Jan 11 18:52:04 CST 2011
Errors in file /u01/soft/admin/standby/bdump/demo_arc0_687.trc:
ORA-16014: 日志 3 sequence# 39 未归档, 没有可用的目的地
ORA-00312: 联机日志 3 线程 1: '/u01/soft/oradata/standby/redo03.log'

这个问题处理的方法有三种:
1. 增加Flash recovery Area 大小。 这种方法治标不治本,但是在测试环境可以一试。

SQL> alter system set db_recovery_file_dest_size=4G scope=both;
系统已更改。

检查flash recovery area的使用情况:
SQL> select * from v$flash_recovery_area_usage;

2. 也可以删除归档目录中不用的文件。

删除archive log:

RMAN> crosscheck archivelog all;

RMAN> delete expired archivelog all;

3. 将Archive log 指定到其他位置。 推荐使用这种方法。

alter system set log_archive_dest_1='location=/u01/soft/archive_log';

然后等测试业务执行完成,再关闭应用,停止数据库的归档,问题至此解决。