一、场景描述
最近在线上系统出现页面登入按钮为灰色,无法登入的问题,页面显示正常,检查代码也没问题,后来发现问题是由于数据库连接异常导致出现此问题,具体报错和解决方案如下
二、问题描述
- 数据库连接报错信息如下:
ORA-00257: archiver error. Connect internal only, until freed
- 网上搜索到问题原因是由于数据库归档日志满了导致出现此问题
- 解决方案是登入数据库查看归档日志存储目录,进行手动清除

三、解决问题
1、登入数据库
[[email protected]oracle-db ~]# su - oracle
[[email protected] ~]$ sqlplus "/as sysdba"
2、查询log sequence
- 一般VALUE为空时,
文章来源(Source):https://www.dqzboy.com 可以文章来源(Source):https://www.dqzboy.com 用archive log list;检查一下归档目录和log sequence
SQL> archive log list;
Database log mode Archive Mode //数据库日志模式:存档模式
Automatic archival Enabled //自动存档:启用
Archive destination USE_DB_RECOVERY_FILE_DEST //存档终点
Oldest online log sequence 8951 //最早的联机日志序列
Next log sequence to archive 8951 //下一个存储日志序列
Current log sequence 8953 //当前日志序列
3、检查flash recovery area的使用情况
SQL> select * from v$flash_recovery_area_usage;

4、计算flash recovery area已经占用的空间
SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;

5、检查recovery目录
SQL> show parameter db_recovery_file_dest; //查看归档日志位置

- 由上可见,归档位置用的是默认值,放在flash_recovery_area下
6、登入RMA原文链接:https://www.dqzboy.com N
[[email protected] ~]$ rman target sys/oracle nocatalog
RMAN>
7、检查无用的archivelog
RMAN> crosscheck archivelog all;
8、删除过期的归档
- 删除截止到当前时间的前一天的所有archivelog
RMAN> list expired archivelog all;
RMAN> delete expired archivelog all; #删除所有归档日志
RMAN> delete archivelog until time 'sysdate-1'; #删除截止当前前一天的所有日志

9、再次查询flash recovery area的使用情况
SQL> select * from v$flash_recovery_area_usage;

最近也遇到了类似的问题,看了博主文章解决了