点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!
故障现象
业务反馈应用无法访问数据库,如下报错:
报错ORA-00257: Archiver error. Connect AS SYSDBA only until resolved
从报错来看是归档满导致,处理方法是通过rman删除归档即可。
故障处理
2.1 使用rman删除归档
su - oracle
export ORACLE_SID=orcl
rman target
crosscheck ARCHIVELOG all;
delete noprompt expired archivelog all;
delete noprompt archivelog all completed before 'sysdate - 7';
2.2 查看归档使用率,和大小
进入sqlplus:
show parameter recovery
归档目录有点小,增大归档目录:
alter system set db_recovery_file_dest_size = 100G;
查看归档使用率:
select * from V$RECOVERY_AREA_USAGE;
2.3 部署定时删除归档脚本
vi del.archivelog.sh
#!/bin/bash
source ~/.bash_profile
#记录归档删除的日志
exec>>/home/del_log/log/bak_log/del_arch`date +%F-%H`.log
$ORACLE_HOME/bin/rman target /dev/null &
问题拓展
如果归档目录满,同时无法进入sqlplus和rman 的情况。
3.1 物理删除归档
先确认归档路径,直接物理删除归档。
3.2 停止监听
lsnrctl stop
3.3 强制关库
因为此时已经无法SQLPLUS登录了,选择强制关库。
ps -ef|grep ora_dbw0_$ORACLE_SID
然后kill掉:
kill -9 PID
3.4 修改参数文件重新启动数据库
sqlplus / as sysdba
create pfile='/tmp/pfile.ora' from spfile;
将快速恢复区修改大一点启动库,原来20,修改到40G。
vi /tmp/pfile.ora
*.db_recovery_file_dest_size=40960m
重新启动数据库:
sqlplus / as sysdba
startup pfile='/tmp/pfile.ora';
create spfile from pfile;
3.5 RMAN删除归档
rman target /
crosscheck ARCHIVELOG all;
delete noprompt expired archivelog all;
delete noprompt archivelog all completed before 'sysdate - 7';
END