糟糕,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,需要采取强制关库

相关推荐
NCIN EXPE3 小时前
redis 使用
数据库·redis·缓存
MongoDB 数据平台3 小时前
为编码代理引入 MongoDB 代理技能和插件
数据库·mongodb
极客on之路3 小时前
mysql explain type 各个字段解释
数据库·mysql
代码雕刻家3 小时前
MySQL与SQL Server的基本指令
数据库·mysql·sqlserver
lThE ANDE3 小时前
开启mysql的binlog日志
数据库·mysql
yejqvow123 小时前
CSS如何控制placeholder文字的颜色_使用--placeholder伪元素
jvm·数据库·python
oLLI PILO3 小时前
nacos2.3.0 接入pgsql或其他数据库
数据库
m0_743623923 小时前
HTML怎么创建多语言切换器_HTML语言选择下拉结构【指南】
jvm·数据库·python
pele3 小时前
Angular 表单中基于下拉选择动态启用字段必填校验的完整实现
jvm·数据库·python