DB2数据库解死锁之shell脚本经典版!


  本文标签:DB2数据库解死锁

  以下的文章主要向大家描述的是在linux/unix下,DB2数据库解死锁之shell脚本,以下就是对在linux/unix下,DB2数据库解死锁之shell脚本的具体描述,希望在你今后的学习中会有所帮助  。

  clear;

  1. DB2 "connect to db user dbuser using dbpass"  
  2. DB2 "update monitor switches using lock on table on"  
  3. tmpf=`echo "$HOME/tmp/""$RANDOM"_"$SECONDS"".lock"`  
  4. DB2 get snapshot for locks on abbs>$tmpf  
  5. handles=`cat $tmpf|awk {if($2=="handle")print $4}`  
  6. x=0;  
  7. y=0;  
  8. deadhandles=" " 
  9. for i in $handles  
  10. do  
  11.  

  取当前id所在行

  1. ibeg=`cat $tmpf|awk {if($2=="handle" && $4=="$i")print NR}`;  
  2. #echo "Line[15]:handle:$i,beg:$ibeg" 

  取当前行以后的内容

  

  1. cat $tmpf|awk {if(NR-1>$ibeg)printf("%s\n", $0);}>$tmpf.$i; 

  取下一个handle所在行

  

  1. hangdleaf=`cat $tmpf.$i|awk {if($2=="handle")print NR}`  
  2. #echo Line[20]:$hangdleaf  
  3. if [ -z "$hangdleaf" ];then  
  4. cat $tmpf.$i>$tmpf.$i.aft;  
  5. else 

  取下一个handle

  

  1. itmp="";  
  2. for j in $hangdleaf  
  3. do  
  4. if [ -z "$itmp" ];then  
  5. handlenext=$j;  
  6. itmp="get done!" 
  7. fi  
  8. done  
  9. #echo Line[33]:$handlenext;  
  10. #cat $tmpf.$i|awk {if(NR<$handlenext)print $0;}  
  11. cat $tmpf.$i|awk {if(NR<$handlenext)print $0;}>$tmpf.$i.aft;  
  12. fi 

  判断本handle相关的锁 是否存在排他锁

  1. ifx=`cat $tmpf.$i.aft|awk {if(($1=="Mode" && ($3=="X" || $3=="IX")) ||($2=="mode" && substr($6,2,1)=="X") )print $0;}`  
  2. #echo Line[39]:handle[$i],$ifx  
  3. if [ -z "$ifx" ];then  
  4. a=1 
  5. else  
  6. deadhandles="$deadhandles"" $i" 
  7. x=`expr $x + 1`;  
  8. echo $i  
  9. fi  
  10. #cat $tmpf.$i.aft|grep X|more  
  11. #echo Line[48]:$deadhandles  
  12. #read yn  
  13. rm -f $tmpf.$i  
  14. rm -f $tmpf.$i.aft  
  15. done  
  16. #echo "死锁$x:$deadhandles";  
  17. #read yn  
  18. clear  
  19. if [ -z "$deadhandles" ] || [ "$deadhandles" = " " ] ;then  
  20. echo "没有死锁,退出......";  
  21. read yn;  
  22. exit 0;  
  23. fi  
  24. echo "锁句柄:$deadhandles,解锁? Y/N\c"  
  25. read yn;  
  26. if [ -z "$yn" ];then  
  27. echo "放弃解锁!"  
  28. exit 0;  
  29. fi  
  30. if [ "$yn" = "Y" ] || [ "$yn" = "y" ];then  
  31. x=0;  
  32. for i in $deadhandles  
  33. do  
  34. echo 解死锁:$i  
  35. DB2 "force applications($i)"  
  36. x=`expr $x + 1`  
  37. done  
  38. echo "解开[$x]个锁...."   
  39. else  
  40. echo "放弃解锁!"  
  41. exit 0;  
  42. fi  
  43. DB2 connect reset;  
  44. DB2 terminate;  
  45. rm -f $tmpf  
  46. echo "解锁终端:">/tmp/tty.tmp  
  47. tty>>/tmp/tty.tmp  
  48. wall tmp/tty.tmp  
  49. rm -f /tmp/tty.tmp  

  以上的相关内容就是对linux/unix下DB2数据库解死锁的shell脚本的介绍,望你能有所收获  。