oracle rac定期清除归档日志脚本 ok
oracle rac定期清除归档日志脚本
1、用oracle用户在/home/oracle/新建可执行文件del_arch.sh
vim /home/oracle/del_arch.sh
2、del_arch.sh脚本内容
#!/bin/bash
echo "----------------------------------------`date`---------------------------------------"
source ~/.bash_profile
rman target / <<EOF
crosscheck archivelog all;
delete expired archivelog all;
delete noprompt archivelog all completed before 'sysdate-15';
EOF
echo
echo "------------------------------------ FINISHED ------------------------------------"
3、用root用户赋权限
chmod 777 del_arch.sh
4、加入crontab定时任务(每天凌晨1点执行一次)
[oracle@localhost ~]$ crontab -e
0 1 * * * /home/oracle/del_arch.sh
解释
这个脚本是一个用于管理 Oracle 数据库归档日志的 RMAN(Recovery Manager)批处理脚本。以下是脚本内容的中文解释:
#!/bin/bash # 输出当前日期和时间,并用破折号包围,以便在日志中标识操作的开始 echo "----------------------------------------`date`---------------------------------------" # 加载用户的环境配置文件,以确保环境变量如 ORACLE_HOME 和 ORACLE_SID 被正确设置 source ~/.bash_profile # 使用 RMAN 执行以下命令,目标为默认的本地数据库实例 rman target / <<EOF # 检查所有归档日志的状态,以确定哪些日志已经不再存在于磁盘上 crosscheck archivelog all; # 删除那些已经被 crosscheck 确认不存在的过期归档日志 delete expired archivelog all; # 删除在系统时间前三天之前就已经完成的归档日志,不会提示确认 delete noprompt archivelog all completed before 'sysdate-3'; EOF # 输出两个换行符,以便在日志中分隔命令输出和结束消息 echo -e "\n" # 输出操作完成的消息 echo "------------------------------------ FINISHED ------------------------------------"这个脚本做了以下几件事情:
使用
echo命令打印出操作的起始时间。使用
source命令加载用户的主目录下的.bash_profile文件,这个文件通常包含了设置 Oracle 环境变量所需的命令。使用 RMAN 的
target /命令连接到默认的数据库实例,并通过一个 here 文档(<<EOF ... EOF)执行 RMAN 命令。
crosscheck archivelog all;命令检查所有归档日志的当前状态。delete expired archivelog all;命令删除那些已经过期的归档日志,即那些不再存在于磁盘上的日志。delete noprompt archivelog all completed before 'sysdate-15';命令删除在15天前就已经完成的归档日志,而且不会提示用户确认。最后,脚本打印出操作完成的消息。
请注意,此脚本假设你有足够的权限来运行 RMAN 命令,并且.bash_profile文件正确设置了 Oracle 环境变量。在执行这个脚本之前,你应该确保它在你的环境中可以正常工作,并且已经对数据库进行了适当的备份。
命令详解
以下是关于
delete expired archivelog all;和delete noprompt archivelog all completed before 'sysdate-3';两个命令的详细解释及其区别:1.
delete expired archivelog all;
- 作用:删除在 RMAN 目录中被标记为
EXPIRED的归档日志条目。- 前提条件:需要先执行
crosscheck archivelog all;命令。crosscheck命令会检查 RMAN 记录的归档日志是否实际存在于磁盘上。如果某个日志文件在磁盘上不存在,则其状态会被标记为EXPIRED。- 删除对象:仅删除 RMAN 目录中标记为
EXPIRED的日志条目,而不涉及实际存在于磁盘上的日志文件。- 使用场景:适用于清理 RMAN 目录中已经失效的日志条目,以保持 RMAN 目录的准确性和整洁性。
2.
delete noprompt archivelog all completed before 'sysdate-3';
- 作用:删除在系统当前时间三天前完成的归档日志文件。
- 前提条件:不需要执行
crosscheck操作,直接根据时间条件删除。- 删除对象:删除实际存在于磁盘上的归档日志文件,而不仅仅是 RMAN 目录中的条目。
noprompt选项:意味着删除操作不会提示用户确认,直接执行删除。- 使用场景:适用于根据时间策略清理旧的归档日志文件,以释放磁盘空间。
区别总结
操作对象:
delete expired主要针对 RMAN 目录中的条目,删除那些在磁盘上已经不存在的日志记录。delete noprompt针对实际存在于磁盘上的日志文件,删除符合时间条件的日志文件。执行条件:
delete expired需要先进行crosscheck操作以标记过期条目。delete noprompt不需要crosscheck,直接根据时间条件进行删除。适用场景:
delete expired用于维护 RMAN 目录的准确性。delete noprompt用于实际释放磁盘空间。通过理解这两个命令的区别,你可以更好地管理 Oracle 数据库的归档日志,既保持 RMAN 目录的准确性,又能有效地管理磁盘空间。