今天一网友问我一个问题,数据库报错,错误信息如下:
Errorsinfilee:/oracle/product/10.2.0/admin/orcl/bdump/orcl_arc0_5620.trc:
ORA-16014:log2sequence#195notarchived,noavailabledestinations
ORA-00312:onlinelog2thread1:'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG'
这个问题是老问题了,之前我也整理过一篇文章。
FlashRecoveryArea空间不足导致数据库不能打开或hang住
http://blog.csdn.net/tianlesoftware/archive/2009/10/15/4668991.aspx
先来分析一下为什么会出现这个问题。在Oracle实例创建的时候会指定FlashRecoveryArea,该空间默认大小是2G。
SQL>showparameterdb_recovery_file
NAMETYPEVALUE
-----------------------------------------------------------------------------
db_recovery_file_deststring D:/oracle/product/10.2.0/flash_recovery_area
db_recovery_file_dest_sizebiginteger 2G
当我们将数据库的模式修改为归档模式的时候,如果没有指定归档目录,默认的归档文件就会放到FlashRecoveryArea的目录,但是这个目录是有大小限制的,如果超过了这个大小,就会导致2个问题,一是不能完成归档,二是,在出现问题后,如果此时重启数据库,那么数据库就无法正常启动。
FlashRecoveryArea是留给Flashback的。所以归档目录最好指定到其他位置。在切换数据库模式时,就要指定归档目录。
Oracle归档与非归档的切换
http://blog.csdn.net/tianlesoftware/archive/2009/10/19/4693470.aspx
如果我们直接将数据库切换到归档模式,而且没有指定归档目录。显示的相关信息如下:
SQL>archiveloglist
数据库日志模式非存档模式
自动存档禁用
存档终点USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列6
当前日志序列8
SQL>shutdownimmediate
数据库已经关闭。
已经卸载数据库。
ORACLE例程已经关闭。
SQL>startupmount
ORACLE例程已经启动。
TotalSystemGlobalArea612368384bytes
FixedSize1250428bytes
VariableSize213912452bytes
DatabaseBuffers390070272bytes
RedoBuffers7135232bytes
数据库装载完毕。
SQL>alterdatabasearchivelog;
数据库已更改。
SQL>archiveloglist;
数据库日志模式存档模式
自动存档启用
存档终点USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列6
下一个存档日志序列8
当前日志序列8
SQL>showparameterdb_recovery_file
NAMETYPEVALUE
-----------------------------------------------------------------------------
db_recovery_file_deststring D:/oracle/product/10.2.0/flash_recovery_area
db_recovery_file_dest_sizebiginteger 2G
总结一下,当遇到这样错误:ORA-16014:log2sequence#notarchived,noavailabledestinations。我们可以通过如下三种方法来解决:
1.增加FlashrecoveryArea大小。这种方法治标不治本。当满了之后,还是会增加。
SQL>altersystemsetdb_recovery_file_dest_size=3Gscope=both;
系统已更改。
检查flashrecoveryarea的使用情况:
SQL>select*fromv$flash_recovery_area_usage;
计算flashrecoveryarea已经占用的空间:
SQL>selectsum(percent_space_used)*3/100fromv$flash_recovery_area_usage;
2.也可以删除归档目录中不用的备份或者文件。
删除archivelog:
RMAN>crosscheckarchivelogall;
RMAN>deleteexpiredarchivelogall;
删除备份:
(1).RMAN>deleteobsolete;
(2).RMAN>crosscheckbackupset;
RMAN>deleteexpiredbackupset;
3.将Archivelog指定到其他位置。推荐使用这种方法。
altersystemsetlog_archive_dest_1='location=/oracle/oracle10g/log/archive_log';