📢📢📢📣📣📣
哈喽!大家好,我是【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 2024Version 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 listDatabase 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,需要采取强制关库