程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2數據庫解死鎖之shell腳本經典版!

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腳本的介紹,望你能有所收獲。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved