Oracle / SHELL

Oracle归档日志自动清理

温馨提示:本文最后更新于2021-03-02 18:54:28,某些文章具有时效性,若有错误或已失效,请在下方留言或问题自助查询
当前位置: 首页 » 数据库 » Oracle » Oracle归档日志自动清理
浅时光博客 · 10月11日 · 2020年 · 本文1149个字,预计阅读3分钟 120567次已读

一、场景介绍

公司最近Oracle数据库出现归档日志超过归档空间阈值,导致数据库夯住无法正常使用;之前也出现过类似的情况,当时为了紧急恢复业务通过人工手动的方式去进行了清理过期归档,最近正好通过脚本的方式实现定时自动清理归档日志,或者可以结合监控系统,如Zabbix,当Zabbix监控归档日志阈值超过了告警触发器定义值时则先去进行触发归档日志清理脚本;这里我是通过定时任务的方式去定时清理归档日志的。

二、工原文链接:https://www.dqzboy.com具介绍

这里我们使用的是RMAN,RMAN(Recovery Manager)是一种用于备份(backup)、还原(restore)和恢复(recover)数据库的 Oracle 工具。RMAN只能用于ORACLE8或更高的版本中。它能够备份整个数据库或数据库部件,如表空间、数据文件、控制文文章来源(Source):https://www.dqzboy.com件、归档文件以原文链接:https://www.dqzboy.com及Spfile参数文件。

三、实践过程

1、自动清理脚本

  • 脚本中我是清理了7天前的所有归档日志
[root@ localhost ~]# su - oracle
[oracle@localhost ~]$ mkdir /home/oracle/logs
[oracle@localhost ~]$ mkdir /home/oracle/script/
[oracle@localhost ~]$ cd script/
[oracle@localhost script]$ vim del_archivelog.sh
#!/bin/bash
oracle_env() {
    if [ -f ~/.bash_profile ]; then
        . ~/.bash_profile
    fi
}
arch_log_dir() {
    if [ -d /home/oracle/logs ];then
       echo "true"
    else
       mkdir -p /home/oracle/logs
    fi
}
oracle_clean() {
oracle_env
exec >> /home/oracle/logs/delarch`date +%Y-%T`.log
$ORACLE_HOME/bin/rman target /<<EOF
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog all completed before 'sysdate - 7';
exit;
EOF
}
main() {
    arch_log_dir
    oracle_clean
}
main

2、添加定时任务

  • 注:我这里定时任原文链接:https://www.dqzboy.com务设置为文章来源(Source):浅时光博客,每周三凌晨整进行一次清理任务,大家可以根据自己项目中数据库实际的情况进行修改
[oracle@localhost ~]$ crontab -e
00 00 * * 3 . ~/.bash_profile; /home/oracle/script/del_archivelog.sh



关注本站官方微信公众号『精彩程序人生』

扫描左侧二维码关注我们的微信公众帐号,在微信公众帐号中回复【资料】获取IT技术文档。
关注博主不迷路~


本文作者:浅时光博客
原文链接:https://www.dqzboy.com/3963.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可,转载时请以超链接形式标明文章原始出处和作者信息
免责声明:本站发布的内容(图片、视频和文字)以及一切破解补丁、注册激活和软件解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。访问和下载本站内容,说明您已同意上述条款!


0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!

    本站已稳定运行: | 耗时 0.218 秒 | 查询 72 次 | 内存 10.75 MB