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

📢📢📢📣📣📣

哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验

一位上进心十足的【大数据领域博主】!😜😜😜

中国DBA联盟(ACDU)成员,目前服务于工业互联网

擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。

✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞

❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

    • [📣 1.故障现象](#📣 1.故障现象)
    • [📣 2.故障分析](#📣 2.故障分析)
    • [📣 3.故障处理](#📣 3.故障处理)
      • [✨ 3.1 物理删除归档](#✨ 3.1 物理删除归档)
      • [✨ 3.2 停止监听](#✨ 3.2 停止监听)
      • [✨ 3.3 强制关库](#✨ 3.3 强制关库)
      • [✨ 3.4 pfile修改启库](#✨ 3.4 pfile修改启库)
      • [✨ 3.5 RMAN删除归档](#✨ 3.5 RMAN删除归档)
      • [✨ 3.6 重新启库调整归档](#✨ 3.6 重新启库调整归档)
    • [📣 4.定时删除归档任务](#📣 4.定时删除归档任务)
    • [📣 5.总结](#📣 5.总结)

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 © 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

bash 复制代码
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,需要采取强制关库

相关推荐
cookqq23 分钟前
mongodb源码分析session异步接受asyncSourceMessage()客户端流变Message对象
数据库·sql·mongodb·nosql
呼拉拉呼拉35 分钟前
Redis故障转移
数据库·redis·缓存·高可用架构
什么都想学的阿超38 分钟前
【Redis系列 04】Redis高可用架构实战:主从复制与哨兵模式从零到生产
数据库·redis·架构
pp-周子晗(努力赶上课程进度版)1 小时前
【MySQL】视图、用户管理、MySQL使用C\C++连接
数据库·mysql
斯特凡今天也很帅1 小时前
clickhouse常用语句汇总——持续更新中
数据库·sql·clickhouse
超级小忍2 小时前
如何配置 MySQL 允许远程连接
数据库·mysql·adb
吹牛不交税3 小时前
sqlsugar WhereIF条件的大于等于和等于查出来的坑
数据库·mysql
小袁搬码3 小时前
PL/SQLDeveloper中数值类型字段查询后显示为科学计数法的处理方式
oracle·oracle数据库·pl.sqldeveloper
hshpy3 小时前
setting up Activiti BPMN Workflow Engine with Spring Boot
数据库·spring boot·后端
文牧之4 小时前
Oracle 审计参数:AUDIT_TRAIL 和 AUDIT_SYS_OPERATIONS
运维·数据库·oracle