oracle rac定期清除归档日志脚本 ok

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 ------------------------------------"

这个脚本做了以下几件事情:

  1. 使用 echo 命令打印出操作的起始时间。

  2. 使用 source 命令加载用户的主目录下的 .bash_profile 文件,这个文件通常包含了设置 Oracle 环境变量所需的命令。

  3. 使用 RMAN 的 target / 命令连接到默认的数据库实例,并通过一个 here 文档(<<EOF ... EOF)执行 RMAN 命令。

    • crosscheck archivelog all; 命令检查所有归档日志的当前状态。
    • delete expired archivelog all; 命令删除那些已经过期的归档日志,即那些不再存在于磁盘上的日志。
    • delete noprompt archivelog all completed before 'sysdate-15'; 命令删除在15天前就已经完成的归档日志,而且不会提示用户确认。
  4. 最后,脚本打印出操作完成的消息。
    请注意,此脚本假设你有足够的权限来运行 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 目录的准确性,又能有效地管理磁盘空间。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容