shell: 自动终止DB2中占用最老日志的进程

本文介绍了一款用于管理DB2数据库活动日志的Shell脚本,该脚本能够定期检查并强制结束长时间持有首个活动日志的应用,以防止日志溢出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在之前的文章 DB2活动日志满的原因、分析、处理与避免 中,讲述如何避免日志满中有提到一种建议:可以写脚本,以固定的间隔抓取database snapshot中的Appl id holding the oldest transaction, 如果长时间不发生变化(比如2天),就Force掉。


最近尝试写了一个脚本,实现这个功能,脚本需要两个参数,第一个是数据库的名子;第二个是检查的间隔,如果两次检查均为同一个应用hold住首个活动日志(最老活动日志),并抓取一下这个应用的快照,然后把它force掉:

#!/bin/bash
# 脚本的目地是每隔固定的时间检查一下hold住最老日志的应用,如果这次检查和结果和上次一样,说明这个应用hold住首个活动日志很久了,可以force掉
# 具体工作的方式是:先每隔2秒种检查一次,如果发现没有应用hold住首个活动日志,则开始下一次循环;否则,过INTERVAL秒之后,再次检查,如果两者相同,则force掉。

usage()
{
	echo "Wrong parameter, Usage: check.sh DBNAME INTERVAL" 
	exit 1
}

if [ $# -ne 2 ]; then
	usage
fi

DBNAME=$1
INTERVAL=$2
appOldest=`db2 get snapshot for db on $DBNAME | grep -i oldest | awk '{print $NF}'`

while [ 1 ]
do

	curApp=`db2 get snapshot for db on $DBNAME | grep -i oldest | awk '{print $NF}'`
	
	if [ -z "$curApp" ]; then
		#echo "There is no app holding log now, will check 2 seconds later"
		sleep 2
		continue
	fi
		
	if [ "$appOldest" = "$curApp" ]; then
		db2 "get snapshot for application agentid $appOldest" > $appOldest.snapshot
		db2 "force application ($appOldest)"
	fi
	
	appOldest=$curApp;
	
	sleep $INTERVAL
	
done


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值