关于一次定时任务删除数据库aud文件的记录

之前数据库出现过被撑爆的问题,集成同事帮忙查看后确定是没有对$ORACLE_BASE/admin/$ORACLE_SID/adump目录的文件做定时清理。后续增加了清理这个目录的定时任务,学习的过程记录下。

  • 关于$ORACLE_BASE/admin/$ORACLE_SID/adump目录
    这个目录下存储的是审计文件,具体作用后续学习补充。

  • 定时任务的格式和修改查看方式
    基本格式 :
    *  *  *  *  command
    分 时 日 月 周 命令
    第1列表示分钟1~59 每分钟用*或者 */1表示
    第2列表示小时1~23(0表示0点)
    第3列表示日期1~31
    第4列表示月份1~12
    第5列标识号星期0~6(0表示星期天)
    第6列要运行的命令
    通过crontab -e可以修改对应用户下的定时任务。
    通过crontab -l可以查看对应用户下的定时任务。
    也可通过/var/spool/cron查看对应用户下的文件,就是需要root权限。
    修改完成crontab -e就会生效,问题是需要注意环境变量影响获取命令的路径,所以尽量使用全路径命令来执行。

  • 关于定时任务中使用的查询文件并删除的命令行
    在网络上查找资料普遍使用下面的命令

#!/bin/bash
#删除30天以前的日志数据  日志位于./logs 文件夹下
find ./logs/ -mtime +30 -name "*.log*" -exec rm -rf {} \;

但是在实际使用中,发现-exec在执行删除时,会把匹配到的文件名全部传入执行,但是参数会有长度限制,如果在大批量文件需要删除时,这样在find命令运行几分钟之后,就会出现溢出错误。所以需要使用-xargs参数,而xargs命令每次只获取一部分文件而不是全部,不像 -exec选项那样。

所以最后确定写的格式大概如下:

5 0 * * * /usr/bin/find $ORACLE_BASE/admin/$ORACLE_SID/adump -mtime +90 -name "*.aud" | xargs /usr/bin/rm -f "*.aud"

后续学习继续补充。


关于-exec参数的后记
接触到的某个脚本在删除大量数据时候使用了-exec数据,可能导致每次无法将文件夹下find到的文件都删除而导致了文件累积。而关于-exec {}参数的长度限制,是源于系统内核对于参数长度的限制,下面这个问答以及其链接内容可能更加清晰,附下:
What defines the maximum size for a command single argument?
所以按照上述内容看来,其实其他类似cp命令使用通配符传递参数的,也都可能会出现参数过长的问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值