【ORA-00257:archiver error. Connect internal only, until freed;清理归档日志】

原因

连接oracle数据库的时候,报ORA-00257错误代码;各种查资料发现是归档日志太多,所分配的db_recovery_file_dest_size内存不够导致的。

清理日志

-- 1. 切换用户oracle并连接oracle
[root@iZwz9e5fmwqdjbjwl58pc0Z ~]$ su - oracle
[oracle@iZwz9e5fmwqdjbjwl58pc0Z ~]$ sqlplus / as sysdba

-- 2. 检查flash recovery area的使用情况,查看ARCHIVED LOG占用内存大小
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;

-- 3. 查看日志位置,并且备份日志方便后续出现问题闪回数据库数据到某个时间点(可选操作)
-- db_recovery_file_dest:日志文件放置位置(/data/db/app/oracle/flash_recovery_area)
-- db_recovery_file_dest_size:日志文件可用内存(3882M)
SQL> show parameter recover;
NAME                         TYPE            VALUE
-----------------------------------------------------------------------------------
db_recovery_file_dest        string   		/data/db/app/oracle/flash_recovery_area
db_recovery_file_dest_size   big integer    3882M
recovery_parallelism         integer   		0

-- 4. 退出sqlplus,切换到root用户,创建日志备份目录,拷贝归档日志到备份目录(可选操作)
-- ORCL:指的是连接oracle的服务名(实例名)
[root@iZwz9e5fmwqdjbjwl58pc0Z onlinelog]# mkdir -p /back/oracle_log
[root@iZwz9e5fmwqdjbjwl58pc0Z onlinelog]# cp -rf /data/db/app/oracle/flash_recovery_area/ORCL/ /back/oracle_log

-- 5. 切换到oracle用户,进入rman
[root@iZwz9e5fmwqdjbjwl58pc0Z /]# su - oracle
[oracle@iZwz9e5fmwqdjbjwl58pc0Z ~]$ rman target sys/pass
Recovery Manager: Release 11.2.0.1.0 - Production on Tue Mar 22 16:59:10 2022
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
connected to target database: ORCL (DBID=1604296621)
-- 检查所有的archivelog
RMAN> crosscheck archivelog all;
-- 删除一周前的所有日志
RMAN> delete archivelog until time 'sysdate-7';

-- 6. 退出rman,连接oracle,检查flash recovery area的使用情况,查看ARCHIVED LOG占用内存大小
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;

其它设置

为了延长或者解决此问题的出现可以进行下列操作

  1. 测试环境中可以选择关闭闪回日志功能
SQL> alter database flashback off;
  1. 增大闪回日志文件的最大值
SQL> alter system set db_recovery_file_dest_size=41820M scope=spfile;

你可能感兴趣的:(Oracle,oracle,java,后端,linux)