背景:
客户反馈说业务系统在使用过程中报:ORA-00257: archiver error. Connect internal only, until freed.错误,大意是没有空间来存储归档日志了。从alert日志看错误提示如下:
ORA-16038: log 2 sequence# 138989 cannot be archived
ORA-19502: write error on file "", block number (block size=)
ORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/dlyzc/redo02.log'
在操作系统下查看,空间已满:
[oracle@dlyzc script]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 99G 9.9G 85G 11% /
devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs 7.8G 540K 7.8G 1% /run
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/vdb1 178G 133G 36G 100% /u01
/dev/vdc1 493G 73M 467G 1% /u02
tmpfs 1.6G 0 1.6G 0% /run/user/0
解决方法:
1、从磁盘上删除一部分过期的归档日志;
2、然后通过rman删除控制文件的过期信息;
[oracle@dlyzc ~]$ rman target /
恢复管理器: Release 11.2.0.4.0 - Production on 星期二 12月 28 13:44:16 2021
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
已连接到目标数据库: DLYZC (DBID=3870715741)
RMAN> crosscheck archivelog all;
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=1351 设备类型=DISK
对归档日志的验证成功
归档日志文件名=/u01/app/oracle/fast_recovery_area/DLYZC/archivelog/2021_12_26/o1_mf_1_138974_jwgmjyo9_.arc RECID=277171 STAMP=1092272414
对归档日志的验证成功
......
归档日志文件名
=/u01/app/oracle/fast_recovery_area/DLYZC/archivelog/2021_12_28/o1_mf_1_138995_jwo84ntf_.arc RECID=277213 STAMP=1092490132
已交叉检验的 22 对象
RMAN> delete expired archivelog all;
提示输入YES,然后删除;
自动删除归档脚本:
创建一个脚本文件:
vi /home/oracle/scripts/archive_clear.sh
#!/bin/bash
echo *********************begin*****************
source /home/oracle/.bash_profile
date
export ORACLE_SID=ebank1
$ORACLE_HOME/bin/rman target / <<EOF
crosscheck archivelog all;
list expired backup;
delete noprompt expired archivelog all;
delete force noprompt archivelog until time 'sysdate - 3';
exit;
EOF
echo *********************end*******************
创建定时任务:
crontab -e
00 04 * * * sh /home/oracle/scripts/archive_clear.sh > /home/oracle/scripts/archive_clear.log
以上为手动和自动删除过期过当日志的方式。