Oracle19c-Linux下自动清除归档日志

--查看服务器归档日志容量大小及使用情况:

# df -h

一、删除归档日志

1、# 切换至oracle用户
su – oracle

2、# 使用RMAN工具,删除失效的归档日志

rman

3、# 使用target命令连接本地数据库

RMAN> connect target /

4、#检查控制文件与实际物理文件的差别

--执行crosscheck命令,检查控制文件和实际物理文件的差别,如果物理文件不存在于介质上,将标记为expired(失效/不可用),crosscheck之后,就可以删除这些失效的归档日志了(执行脚本后,删除的归档日志状态会变为“失效”)

RMAN> crosscheck archivelog all;

5、# 删除状态为expired(失效/不可用)的归档日志

RMAN> delete expired archivelog all;

6、# 删除 3 天前已备份的归档日志:

RMAN> delete noprompt archivelog all completed before 'sysdate-3';
# 删除 1 天所有前
RMAN> delete archivelog until time 'sysdate-1'

---区别:第一条带complete的语句,主要是删除已备份过的归档,没有备份的归档,不会被删除。而第二个语句, 则会删除掉归档,无论备份与否。 

                            --noprompt 是否需要提示确认删除

7、# 退出RMAN

RMAN> exit

二、添加定时任务

1、新建archivelog_clear.sh脚本文件

#!/bin/bash
BACK_DIR=/home/oracle/clear_archlog/data
export DATE=`date +%F`
mkdir -p $BACK_DIR/$DATE
touch $BACK_DIR/$DATE/rman_backup.log
echo "--------------------------------`date`-------------------------------"
source ~/.bash_profile
# 记录日志rman_backup.log 可以后期检查是否执行成功
rman target / >> $BACK_DIR/$DATE/rman_backup.log <<EOF
# 把无效的expired的archivelog标出来
crosscheck archivelog all;
# 直接全部删除过期的归档日志
#delete noprompt expired archivelog all;
# 直接删除7天前所有的归档日志
delete noprompt archivelog all completed before 'sysdate-7';
exit
EOF
echo -e "\n"
echo "------------------------------ FINISHED ----------------------------"

2、#授予执行权限

chmod +x archivelog_clear.sh

3、测试脚本文件

./archivelog_clear.sh

4、添加定时任务(oracle 用户下添加)

#crontab -e

0 1 * * * /home/oracle/archivelog_clear.sh  #每天凌晨1点执行删除归档日志脚本

5、查看定时任务

#crontab -l

6、查看任务执行情况

# cd /var/spool/mail
# ls
# cat oracle

posted @ 2022-10-12 13:16  jrongwang  阅读(1926)  评论(0编辑  收藏  举报