早上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.****.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