最近在做集成的管理服务器,目标是将所有应用的cleanup脚本放在一起统一管理,避免当脚本有变动时需要一台一台去改cron job。本文覆盖的是HANA数据库相关的脚本。
目前的脚本有两个功能,一是调用HANACleaner这个清理工具(非官方,需要额外下载该python程序),主要用来清理旧的trace文件;二是运行SQL语句,用来清理存放在数据库中旧的应用日志。
有关HANACleaner:https://github.com/chriselswede/hanacleaner
首先管理服务器上要安装好HANA client并配好环境变量。然后使用hdbuserstore 对需要访问的数据库tenant创建登录令牌,避免把密码明文写在脚本里。数据库用户的权限配置和hanacleaner的执行参数可参考github上的说明文档。
创建令牌命令:
hdbuserstore set 令牌名 主机名:端口号 数据库用户名 密码
查询tenant所使用的端口号:
SELECT * FROM SYS_DATABASES.M_SERVICES;
#! /bin/bash
source $HOME/.bashrc
#SQL cleanup part
rm -f /hana/shared/SID/HANACleaner/log/tempsql*
hdbsql -U 令牌 -I /hana/shared/SID/HANACleaner/SQL/cleanup.sql >> /hana/shared/SID/HANACleaner/log/tempsql.log 2>&1
r1=$(sed -n '2p' /hana/shared/SID/HANACleaner/log/tempsqlZAL.log)
r2=$(sed -n '4p' /hana/shared/SID/HANACleaner/log/tempsqlZAL.log)
echo "===== $r1 old error logs in Log are cleaned up.=====" >> /hana/shared/SID/HANACleaner/log/$(date +%Y%m%d).log 2>&1
echo "===== $r2 old info logs in Log are cleaned up.=====" >> /hana/shared/SID/HANACleaner/log/$(date +%Y%m%d).log 2>&1
#HANA Cleaner part
#令牌数取决于要跑的数据库tenant
python /usr/sap/SID/HDB00/exe/python_support/hanacleaner.py -tc 60 -tf 60 -td true -dr 60 -ar 60 -kr 60 -ad true -lr 1 -om 500 -oo true -eh 30 -eu 60 -ur 180 -pe 60 -df false -k 令牌1,令牌2,令牌3 >> /hana/shared/SID/HANACleaner/log/$(date +%Y%m%d).log 2>&1
#需要配置mail.rc中smtp server
mail -s "HANA Cleaner report" 邮箱地址 < /hana/shared/SID/HANACleaner/log/$(date +%Y%m%d).log
#删除旧报告
find /hana/shared/SID/HANACleaner/log/* -mtime +30 -exec rm {} \;
其中需要在cleanup.sql中维护需要执行的sql语句,由于hdbsql无法获得delete所影响的行数,为了知道多少条目会被删除,在执行之前需要先select。变量r1和r2获得的其实是两条delete语句之前的select结果。