最近使用oracle时突然发现如下错误

ORA-16038: 日志 2 序列号 67 无法归档

ORA-19809: 超出了恢复文件数的限制

ORA-00312: 联机日志 2 线程 1:

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG'

导致oracle无法启动,上网查了下原因,发现

select r.SPACE_USED/r.SPACE_LIMIT from v$recovery_file_dest r;

恢复文件空间不够了,网上提供的解决方法:

1.将归档设置到其他目录,修改alter System set log_archive_dest;

2.转移或者删除闪回恢复区里的归档日志;

3.增大闪回恢复区,alter System set db_recovery_file_dest_size=5G;

4.手动将未归档的Redo日志进行归档。执行以下命令手动将未归档的Redo日志进行归档

alter system archive log all to '/archive1'

to参数指定的位置可以是之前的归档位置,也可以是其他位置,oracle操作系统用户在这个位置有读写的权限。执行完这个命令之后所有未归档的日志都被归档,之后很顺利就执行了alter database open命令打开了数据库。



我选择使用第二方法来解决我的oracle问题。

首先使用删除闪回恢复区里的归档日志,以便让oracle尽快正常工作,

SQL> startup force
ORACLE 例程已经启动。

Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             117443460 bytes
Database Buffers          486539264 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
ORA-16038: 日志 3 序列号 1807 无法归档
ORA-19809: 超出了恢复文件数的限制
ORA-00312: 联机日志 3 线程 1: 'E:\ORADATA\MDC\REDO03.LOG'
查看v$log
SQL> select group#,sequence#,archived,status from v$log;

   GROUP#  SEQUENCE# ARCHIV STATUS
---------- ---------- ------ --------------------------------
        1       1808 NO     INACTIVE
        2       1807 NO     INACTIVE
        3       1809 NO     CURRENT
看到组2是非当前状态,并且没有归档,使用参考文章中的处理非归档文件的方法.
SQL> alter database clear unarchived logfile group 2;

数据库已更改。

启动数据库,这个启动成功.
SQL> alter database open;

数据库已更改。

为了防止归档日志再次占满空间,需要定期清理归档日志。

在rman下执行crosscheck archivelog all;检查所有的归档日志

delete noprompt archivelog all backed up 1 times to device type disk;将已经备份过一次的归档日志全部清除。

可以在备份脚本的最后加上这几行代码,对归档日志进行清理,以彻底解决这个问题。