Oracle自动清理日志脚本

1、背景 
git

   继《Oracle备份还原实践》后(连接地址:http://kaliarch.blog.51cto.com/8966921/1978151),因为业务增加,频繁的备份还原对于磁盘空间有了更大的空间需求,基本每周500G的磁盘,空间使用率都会达到85%以上,故编写oracle清理脚本结合crond自动清理oracle归档日志。github

2、工具介绍sql

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

    使用RMAN链接到数据库时,默认使用SYSDBA角色登录。bash

rman target /             #链接进rman
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';        #删除系统时间7天之前的归档日志,不会删除闪回区有效的归档日志

因为物理磁盘dbf文件不少,若是进行物理删除dbf文件较麻烦,列出如下命令供物理删除参考oracle

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号之前的日志

73a2fc0e9ed74ca852b7842b3012bed6.png

若是手动在磁盘清理过日志文件,须要在rman内检查,而后删除过时的日志app

crosscheck archivelog all;            #检查全部归档日志
list expired archivelog all;            #列出过时的归档日志
delete noprompt expired archivelog all;        #删除过时的归档日志
delete noprompt archivelog all;               #清除全部的归档日志

3、自清理脚本ide

github地址
工具

#!/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%进行清理,也可根据本身需求进行判断,或每次都执行清理。rest

相关文章
相关标签/搜索