一、场景描述
近期,在线系统遇到了一个问题:页面上的登录按钮呈灰色,导致无法完成登录操作。尽管页面显示正常,经过对代码的仔细检查也未发现问题。经过进一步调查,我们发现问题的根源是数据库连接出现异常,这才导致了登录问题的出现。
具体而言,报错信息显示数据库连接存在问题,这导致系统无法正确地获取必要的用户验证信息,从而影响了登录按钮的可用性。通过下面的操作解决这一问题。
二、问题描述
- 数据库连接报错信息如下:
ORA-00257: archiver error. Connect internal only, until freed
- 网上搜索到问题原因是由于数据库归档日志满了导致出现此问题
- 解决方案是登入数据库查看归档日志存储目录,进行手动清除

三、解决问题
1、登入数据库
[root@oracle-db ~]# su - oracle
[oracle@oracle-db ~]$ sqlplus "/as sysdba"
2、查询log sequence
- 一般VALUE为空时,可以用archive log list
文章来源(Source):浅时光博客 ;检查一下归档目录和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、登入RMAN
[oracle@oracle-db ~]$ 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;

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