1切换root用户
su - oracle
2创建目录
mkdir /home/oracle/datalog
创建文件: vi del_archivelog.rman
connect target /
run {
crosscheck archivelog all;
-- delete noprompt archivelog until time 'sysdate-7'; -- 使用双短横线注释(RMAN 兼容)
}
exit;
创建文件: vi del_archivelog.sh
#!/bin/bash
export ORACLE_SID=cdb #根据实际调整 可以通过echo $ORACLE_SID 查看实际环境配置
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
export SCRIPT_HOME=/home/oracle/datalog
$ORACLE_HOME/bin/rman \
cmdfile=$SCRIPT_HOME/del_archivelog.rman \
log=$SCRIPT_HOME/del_archivelog_$(date +%Y%m%d).log
3授权文件夹
chmod 755 /home/oracle/datalog
chmod 755 /home/oracle/datalog/del_archivelog.sh
chmod 755 /home/oracle/datalog/del_archivelog.rman
创建定时任务:crontab -l
11 15 * * * /bin/bash /home/oracle/datalog/del_archivelog.sh >> /home/oracle/datalog/cron.log 2>&1
查询定时任务:
crontab -l
11 15 * * * /bin/bash /home/oracle/datalog/del_archivelog.sh >> /home/oracle/datalog/cron.log 2>&1
在写一个监控磁盘使用率的脚本:vi check_disk_and_clean.sh
#!/bin/bash
# 脚本路径:/home/oracle/datalog/check_disk_and_clean.sh
# 设置 Oracle 环境变量
export ORACLE_SID=cdb
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
# 监控的挂载点和阈值
MOUNT_POINT="/u03"
THRESHOLD=80 # 80% 使用率触发清理
# 提取当前磁盘使用率(去掉百分号)
USAGE=$(df -h $MOUNT_POINT | awk 'NR==2 {print $5}' | tr -d '%')
# 日志文件路径
LOG_FILE="/home/oracle/datalog/clean_archivelog_$(date +%Y%m%d).log"
# 判断是否超过阈值
if [ $USAGE -ge $THRESHOLD ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - 检测到磁盘使用率 ${USAGE}% ≥ ${THRESHOLD}%,开始清理归档日志..." >> $LOG_FILE
# 执行 RMAN 清理脚本
$ORACLE_HOME/bin/rman cmdfile=/home/oracle/datalog/del_archivelog.rman log=$LOG_FILE append
else
echo "$(date '+%Y-%m-%d %H:%M:%S') - 磁盘使用率 ${USAGE}% < ${THRESHOLD}%,无需清理。" >> $LOG_FILE
fi