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:oracle11gflash_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

原文地址:https://www.cnblogs.com/gudi/p/6232494.html