informix自动检查锁表的会话~~~~find_lock.sh

用法:

      1、chmod +x find_lock.sh

      2、需要两个参数:find_lock.sh   dbname  locked_tabname

#!/bin/bash 
##################################################################
# Filename: find_lock.sh
# Function: Auto Find The Session That Lock Table.
# Write by: Uncle.Cui
# Version : 0.8   update date: 2020-02-19
##################################################################

if [ $# -ne 2 ]; then
    echo "Usage: "
    echo "#############################################"
    echo "monitor_lock_table.sh dbname locked_tabname"
    echo "#############################################"
    exit
fi

dbname=$1
tabname=$2

s_name=`echo $0|awk -F '/' '{print $NF}'`
ps aux |grep "$s_name" |grep -vE "$$|grep">/tmp/lock.tabname
p_n=`wc -l /tmp/lock.tabname|awk '{print $1}'`
if [ $p_n -gt 0 ]
then
    exit
fi


get_ses()
{
part=$1
echo "awk 'BEGIN {RS=\"\\n\\n+\";ORS=\"\\n\\n\"} /"$part"/ {print \$0}' .opn|grep rstcb|awk '{print \$2}'|awk -F'x' '{print \"onstat -u|grep \"\$2}'|sh|awk '{print \$3}'" >> get_awk.sh
}

kill_ses()
{
read -p 'will you kill the session(y|Y or n|N): ' c
if [ -z "$c" ]
then
    exit 1
fi

if [ $c == "y" -o $c == "Y" ]
then
    cat .user_thread|while read uthd;
    do
        sid=`onstat -u |grep $uthd|awk '{print $3}'` 
        onmode -z $sid
    done
else
    exit 1
fi
}


oncheck -pt $dbname:$tabname|grep  'Partition partnum'|awk '{print $3}' > .partnum

[ -f .partnum_hex ] && cat /dev/null > .partnum_hex
[ -f .partnum_in_lock ] && cat /dev/null > .partnum_in_lock

cat .partnum|while read line;
do
   partn_hex=`printf "%x\n" $line`
   echo $partn_hex >> .partnum_hex
   onstat -k |grep $partn_hex|awk '{print $3}'|sort -u >> .partnum_in_lock
done

#cat /dev/null > .partnum_in_lock
cat .partnum_in_lock|sort -u > .user_thread
userthread=`cat .user_thread|wc -l`
if [ $userthread -eq 0 ] 
then
    onstat -g opn > .opn
    cat .partnum_hex|while read hexpn;
    do
        get_ses $hexpn
    done
    chmod +x get_awk.sh
    ./get_awk.sh >> get_ses.sh
    cat get_ses.sh|sort -u|awk '{print "onstat -g ses "$1}'|sh
    cat get_ses.sh|sort -u|awk '{print "onmode -z "$1}'|sh
    rm -rf get_ses.sh get_awk.sh
else 
    cat .user_thread|while read uthread;
    do
        onstat -u |grep $uthread|awk '{print "onstat -g ses "$3}'|sh;
        echo "------------------------------------------------------------------------------------";
    done
    kill_ses


fi

猜你喜欢

转载自blog.csdn.net/David_ifx/article/details/113704137