Oracle自动清理日志脚本

一、背景  

   继《Oracle备份还原实践》后(链接地址:http://kaliarch.blog.51cto.com/8966921/1978151),由于业务增长,频繁的备份还原对于磁盘空间有了更大的空间需求,基本每周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角色登陆。

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

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

1
rm  -rf ` ls  -l  /home/oracle/app/arch/  | grep  Apr| awk  '{print $9}' `     #PATH可以根据实际环境,删除Apr月的所有归档日志
1
rm  -rf ` ls  -l  /home/oracle/app/arch/  | awk  '{if ($7<20) print$0}' `    #删除20号以前的日志

73a2fc0e9ed74ca852b7842b3012bed6.png

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

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

三、自清理脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/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%进行清理,也可根据自己需求进行判断,或每次都执行清理。










本文转自 KaliArch 51CTO博客,原文链接:http://blog.51cto.com/kaliarch/1983430,如需转载请自行联系原作者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值