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

相关推荐
AugustRed26 分钟前
Neo4j 图数据库原理 + 应用场景简单介绍
数据库·neo4j
Gl�ria40 分钟前
Redis 高可用架构对比
数据库·redis
IpdataCloud1 小时前
高可用的IP数据接口平台有哪些?从可用性、P99延迟到离线部署的评估框架(含代码)
数据库·tcp/ip·ip
呆萌很1 小时前
MySQL 数据库和表的管理操作(命令行)
数据库·mysql
IvorySQL2 小时前
当PostgreSQL“听懂”MySQL——协议兼容层的设计与实战
数据库·人工智能·postgresql
这个DBA有点耶3 小时前
银行核心系统数据库迁移怎么选?6 步法+5 个避坑指南
数据库·安全·架构
风哥2号3 小时前
数据库教程FGMT31‑Linux平台MySQL9.7安装配置与版本升级
数据库
hanchenxing3 小时前
前端异步任务三方案:Celery vs Redis Stream vs BullMQ 实战对比消息队列
前端·数据库·redis·异步任务·方案对比
java_logo4 小时前
Docker 部署 Milvus:轻松搭建高性能向量数据库平台
数据库·docker·私有化部署·milvus·向量数据库·rag·轩辕镜像
A心有千千结5 小时前
GO 使用 OpenTelemetry 进行编译时插桩,实现零码注入
数据库·golang·可观测性·观测云