ORA-16038: log 2 sequence# 786 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 2 thread 1:'F:\ORACLE\PRODUCT\10.1.0\ORADATA\KOKOOA\REDO02.LOG'
我估计是flash_recovery_area的问题。查看F:\oracle\product\10.1.0\admin\kokooa\bdump下的alert_kokooa.log最后几段。发现有:
ORA-19815: WARNING: db_recovery_file_dest_size of 4294967296 bytes is 100.00% used, and has 0 remaining bytes available.
然后查询:
select substr(name,1,30) as name,space_limit as quota,space_used as used,space_reclaimable as re,number_of_files as files from v$recovery_file_dest;
NAME QUOTA USED RE FILES
--------------------------------------- ---------- ---------- ---------- ----------
F:\oracle\product\10.1.0\flash 4294967296 4291342848 0 485
发现flash_recovery_area占满了。手动删除了F:\oracle\product\10.1.0\flash_recovery_area\KOKOOA下的一些不需要的文件。发现没有效果。
重启,还是一样的问题。最后,进行如下的操作:
SQL> select group#,sequence#,archived,status from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 788 NO INVALIDATED
2 786 NO INACTIVE
3 787 NO INACTIVE
总结: 日志文件组的状态
current: 当前正在使用的工作组
inactive: 非活动组
active : 归档还没有完成
unused : 还没有使用,一般新建的工组组都是这个状态
SQL> alter database clear unarchived logfile group 2; ------手工清除了归档日志
视图使用 clear unarchived logfile,使用UNARCHIVED会在重做日志不再需要归档的情况下可以定义UNARCHIVED。
Database altered.
SQL> alter database open;
Database altered.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 603979776 bytes
Fixed Size 1220796 bytes
Variable Size 184553284 bytes
Database Buffers 411041792 bytes
Redo Buffers 7163904 bytes
Database mounted.
Database opened.
就OK了。
仔细查找原因:
ORA-19809: limit exceeded for recovery files
Cause: The limit for recovery files specified by the DB_RECOVERY_FILE_DEST_SIZE was exceeded.
Action: The error is accompanied by 19804. See message 19804 for further details.
方法1、
1)将归档设置到其他目录
修改alter system set log_archive_dest = 其他路径
2)转移或者删除闪回恢复区里的归档日志。
方法2、也可以使用增大闪回恢复区的方法来解决
SQL> show parameter db_recovery_file_dest_size
NAME TYPE VALUE
------------------------------------ ----------- -------------------
db_recovery_file_dest_size big integer 2G
问题并没有解决,今早又遇到此问题:
最后还是增大了闪回恢复区解决问题。无奈...
看看闪回恢复区的文件结构层次
tree F:\oracle\product\10.1.0\flash_recovery_area;
文件夹 PATH 列表
卷序列号码为 00790072 1B4C:1BF0
F:\ORACLE\PRODUCT\10.1.0\FLASH_RECOVERY_AREA
└─KOKOOA
└─ARCHIVELOG
├─2009_10_19
├─2009_10_20
├─2009_10_21
├─2009_10_22
├─2009_10_23
RMAN> delete expired archivelog all;//删除所有过期的归档日志
原因分析,我只是手工清除了归档日志,所以必须在RMAN里,通过这样的方式进行清除,才能恢复我的闪回空间大小!
alter database clear unarchived logfile; 清空日志
其中可以用alter system switch logfile; 来切换日志
终于最终解决了,需要到RMAN下删除才行。