糟糕,归档满RMAN进不去,CPU98%了!

来源:这里教程网 时间:2026-03-03 19:45:32 作者:

???? 前言 Oracle归档满基本会导致服务器卡,无法登录SQLPLUS及RMAN,做好策略 ???? 1.故障现象 业务反馈应用无法访问数据库,如下报错 报错ORA-00257: Archiver error. Connect AS SYSDBA only until resolved错误解决 ???? 2.故障分析 从本次报错来看,是归档满导致,处理的办法是直接删归档即可, 可是当登录服务器的时候,发现根本无法登录RMAN执行删除归档, 而且SQLPLUS也不进去,无法调整归档相关参数,怎么办? 从ALERT日志来看,无法开库的原因是归档空间满,数据库已经无法登录导致 Errors in file /u01/oracle/diag/rdbms/devdb/devdb/trace/devdb_tt00_3486.trc: ORA-19809: limit exceeded for recovery files ORA-19804: cannot reclaim 1073741824 bytes disk space from 214748364800 bytes limit 那么接下来首先得从物理空间删除归档, 再强制管库调整归档参数,重新启动库删除归档 ` ???? 3.故障处理 ✨ 3.1 物理删除归档 确认归档路径后发现是放到快速恢复区,那么找到后直接物理删除归档 快速恢复区目录:fast_recovery_area ✨ 3.2 停止监听 [oracle@dev1 ~]$ lsnrctl stop ✨ 3.3 强制关库 --强制关闭库,这个很关键,因为此时已经无法SQLPLUS登录了 ps -ef|grep ora_dbw0_$ORACLE_SID 然后kill掉 kill -9 PID ✨ 3.4 pfile修改启库 --创建PFILE SYS@devdb> create pfile='/home/oracle/devspfile.ora' from spfile; --将快速恢复区修改大一点启动库,原来200G,修改到400G *.db_recovery_file_dest_size=404800m --pfile启动数据库 SQL> startup pfile='/home/oracle/pfile.ora'; [oracle@dev1 ~]$ sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on Thu Mar 14 13:55:26 2024 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle.  All rights reserved. Connected to an idle instance. SYS@devdb> startup pfile='/home/oracle/devspfile.ora'; ORACLE instance started. Total System Global Area 2.5837E+10 bytes Fixed Size                 26605704 bytes Variable Size            3288334336 bytes Database Buffers         2.2481E+10 bytes Redo Buffers               40501248 bytes Database mounted. Database opened. SYS@devdb> archive log list Database log mode              Archive Mode Automatic archival             Enabled Archive destination            USE_DB_RECOVERY_FILE_DEST Oldest online log sequence     274 Next log sequence to archive   278 Current log sequence           278 ✨ 3.5 RMAN删除归档 --登录RMAN删除归档  RMAN> crosscheck archivelog all; RMAN> delete expired archivelog all; RMAN> delete archivelog until time 'sysdate-1'; select * from V$FLASH_RECOVERY_AREA_USAGE; 注意:必须通过RMAN删除归档,不然控制文件不更新,还是登录不了 ### 3.6 重新启库调整归档 --重新启动库 SYS@devdb> startup force; --调整归档路径,从快速恢复区移动到其他目录 SYS@devdb> alter system set log_archive_dest_1='location=/zisemi/oracle/arch; ???? 4.定时删除归档任务 因为是个单机库,后期防止归档满,设置定时任务删除 [root@devdb ~]# su - oracle [oracle@devdb ~]$ mkdir -p /home/oracle/script [oracle@devdb ~]$ mkdir -p /home/oracle/arch/log [root@devdb ~]# su - oracle [oracle@devdb ~]$ mkdir -p /home/oracle/script [oracle@devdb ~]$ mkdir -p /home/oracle/archlog vi /home/oracle/script/archdel_dev.sh export ORACLE_HOME=/u01/oracle/product/19.3.0/dbhome_1 export ORACLE_SID=devdb export PATH=/usr/sbin:$PATH export PATH=$ORACLE_HOME/bin:$PATH rman target / log /home/oracle/archlog/log_arch.log  <<EOF run{  allocate channel ch1 type disk; allocate channel ch2 type disk; crosscheck archivelog all; delete noprompt expired archivelog all; delete noprompt archivelog until time 'sysdate-3'; release channel ch1; release channel ch2; } EOF crontab -l 0 23 * * * su - oracle -c "/home/oracle/script/archdel_dev.sh" ???? 5.总结 本次故障总结如下: 1.归档不要放在快速恢复区,不好管控 2.归档要设置定时任务删除,比如备份后删除或者定时脚本删除 3.归档满一定要从RMAN进去删除,控制文件才能更新 4.归档满基本会导致服务器卡,无法登录SQLPLUS及RMAN,需要采取强制关库

相关推荐