ORA-00257: archiver error. Connect internal only, until freed.
早上BA抄送客户的邮件过来,说系统用不了,应用系统报异常Unable to open connection to oracle,Microsoft Provider v2.0.50727.42,既然是数据库连接不了,那使用plsql连接生产环境数据库,报如下异常:
看字面意思应该是归档错误,网上搜了一番,都说最可能的原因是归档日志满了.
1.查看系统是否处于归档日志之下
SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 360 Next log sequence to archive 360 Current log sequence 362
上面来看是处于归档模式,归档日志的位置是存在USE_DB_RECOVERY_FILE_DEST之中,这是11gR2的默认存储位置.
DB_RECOVERY_FILE_DEST参数是默认的flash recovery area的路径,里面存放有归档日志、闪回日志以及rman的备份文件等文件
2.查看归档日志的参数(大小和路径)
SQL> show parameter DB_RECOVERY_FILE_DEST; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string E:\oracle11g\flash_recovery_area db_recovery_file_dest_size big integer 4182M
可以通过show parameter recover查看更多的参数.
3.查看归档日志的使用情况
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE; FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES -------------------- ------------------ ------------------------- --------------- CONTROL FILE 0 0 0 REDO LOG 0 0 0 ARCHIVED LOG 96.68 0 112 BACKUP PIECE 0 0 0 IMAGE COPY 0 0 0 FLASHBACK LOG 0 0 0 FOREIGN ARCHIVED LOG 0 0 0 7 rows selected
这里使用了96.68%.
解决方案:
1.物理删除(删除过后要通过RMAN维护系统控制文件,否则空间显示仍然不释放)
2.RMAN删除
3.增加闪回区的大小
4.将在线的在线日志文档为离线
方案一:物理删除
使用RMAN维护系统控制文件,检查一些无用的archivelog
RMAN> crosscheck archivelog all;
方案二:RMAN删除(删除过期的文档)
RMAN> delete expired archivelog all; delete archivelog until time 'sysdate-1' ; 删除截止到前一天的所有archivelog
delete expired archivelog all;
方案三:增加闪回区的大小
SQL> alter system set DB_RECOVERY_FILE_DEST_SIZE=10g; System altered
方案四:将在线的在线日志文档为离线
SQL> alter system archive log all;
参考文档:
博客:http://blog.csdn.net/wonderjjm/article/details/8424031
博客:http://www.2cto.com/database/201109/102332.html
博客:http://blog.sina.com.cn/s/blog_5376c7190101httv.html
博客:http://www.51itstudy.com/19790.html