阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle自动清理日志脚本

115次阅读
没有评论

共计 1926 个字符,预计需要花费 5 分钟才能阅读完成。

一、背景 

由于业务增长,频繁的备份还原对于磁盘空间有了更大的空间需求,基本每周 500G 的磁盘,空间使用率都会达到 85% 以上,故编写 Oracle 清理脚本结合 crond 自动清理 Oracle 归档日志。

二、工具介绍

RMAN(Recovery Manager)是一种用于备份 (backup)、还原(restore) 和恢复 (recover) 数据库的 Oracle 工具。RMAN 只能用于 ORACLE8 或更高的版本中。它能够备份整个数据库或数据库部件,如表空间、数据文件、控制文件、归档文件以及 Spfile 参数文件。RMAN 也允许您进行增量数据块级别的备份,增量 RMAN 备份是时间和空间有效的,因为他们只备份自上次备份以来有变化的那些数据块。而且,通过 RMAN 提供的接口,第三方的备份与恢复软件如 veritas 将提供更强大的备份与恢复的管理功能。通过 RMAN,也提供了其它更多功能,如数据库的克隆、采用 RMAN 建立备用数据库、利用 RMAN 备份与移动裸设备(RAW)上的文件等工作将变得更方便简单。9i 的 RMAN 通过增强的自动配置与管理功能,以及特有的块级别的恢复,将使备份与恢复工作变得更加快捷与完美。

使用 RMAN 连接到数据库时,默认使用 SYSDBA 角色登陆。

rman target /            #连接进 rman

DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE ‘SYSDATE-7’;        #删除系统时间 7 天以前的归档日志,不会删除闪回区有效的归档日志

由于物理磁盘 dbf 文件很多,如果进行物理删除 dbf 文件较麻烦,列出以下命令供物理删除参考

rm -rf `ls -l /home/oracle/app/arch/ |grep Apr|awk ‘{print $9}’`    #PATH 可以根据实际环境,删除 Apr 月的所有归档日志

rm -rf `ls -l /home/oracle/app/arch/ |awk ‘{if ($7<20) print$0}’`  #删除 20 号以前的日志

Oracle 自动清理日志脚本

如果手动在磁盘清理过日志文件,需要在 rman 内检查,然后删除过期的日志

crosscheck archivelog all;            #检查所有归档日志
list expired archivelog all;            #列出过期的归档日志
delete noprompt expired archivelog all;        #删除过期的归档日志
delete noprompt archivelog all;              #清除所有的归档日志

三、自清理脚本

#!/bin/bash
oracle_env() {
    source /home/oracle/.bash_profile 
    export ORACLE_BASE=/home/oracle/app
    export ORACLE_HOME=$ORACLE_BASE/oracle/product/12.1.0/dbhome_1
    export ORACLE_SID=orcl
    export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
    oraclecmd=”/home/oracle/app/oracle/product/12.1.0/dbhome_1/bin/sqlplus”
    oraclerman=”/home/oracle/app/oracle/product/12.1.0/dbhome_1/bin/rman”
}
disk_useper=`/bin/df -Th|grep -v ‘Filesystem’|awk ‘/\/dev\/mapper\/vg00-lv_root/{if (“$(NF)”==”/”);print $(NF-1)}’|cut -d% -f1`

oracle_clean() {
oracle_env   
${oraclerman} target /<<EOF
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE ‘SYSDATE-7’;
crosscheck archivelog all;
list expired archivelog all;
delete noprompt expired archivelog all;
exit;
EOF
}

main() {
    if [${disk_useper} -gt 80 ];then
        oracle_clean
    fi
}

main

配合定时任务清理磁盘,此在脚本内写的判断磁盘使用率大于 80% 进行清理,也可根据自己需求进行判断,或每次都执行清理。

更多 Oracle 相关信息见Oracle 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=12

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1926字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中