linux下编写清理日志和oracle数据库临时数据的shell脚本

最近新系统上线,运行一个月后发现系统日志占用空间很大,数据库中流水表数据也达到了上千万条,所以编写该shell脚本用来定时清理日志和数据库临时数据。我们的系统应用日志是往一个日志文件中不停写入,不会按日期自动生成新日志文件

脚本dayend.sh内容如下

#!/bin/bash

cmd=zip

bt=zip
#cmd="tar cvzf"
#bt=tar.gz

dt=`date '+%Y%m%d'`

#数据库用户名密码
DBUSER=admin
DBPASS=admin

LOG_NAME=app.log
LOG_PATH=/home/admin/app/log
LOG_FILE=${LOG_PATH}/${LOG_NAME}

BAK_PATH=${LOG_PATH}
BAK_NAME=${LOG_NAME}.${dt}.${bt}
BAK_FILE=${BAK_PATH}/${BAK_NAME}

if [ ! -d ${LOG_PATH} ]; then
echo "${LOG_PATH} not exist..."
exit -1
fi

if [ ! -f ${LOG_FILE} ]; then
echo "${LOG_FILE} not exist..."
exit -1

fi

echo "清理交易日志开始..."

#打包日志

${cmd} ${LOG_FILE} ${BAK_FILE}

#清空日志
cat /dev/null > ${LOG_FILE}
#删除三天前的日志压缩包
find ${BAK_PATH} -name "${LOG_NAME}*${bt}" -mtime +3 | xargs rm -rf
echo "清理交易日志结束..."

echo "清理流水表数据开始..."
sqlplus -s $DBUSER/$DBPASS <<EOF
set echo off
set feedback off
delete from sys_trans_h where (SYSDATE-TO_DATE(SUBSTR(trantime,1,8), 'YYYYMMDD'))>60;
insert into sys_trans_h (select * from sys_trans where (SYSDATE-TO_DATE(SUBSTR(trantime,1,8), 'YYYYMMDD'))>3);
delete from sys_trans where (SYSDATE-TO_DATE(SUBSTR(trantime,1,8), 'YYYYMMDD'))>3;
commit;
quit
EOF

echo "清理流水表数据完成..."


脚本比较简单,回到家里后手打的,并不是测试通过的版本,可能会有错误




展开阅读全文

没有更多推荐了,返回首页