监控数据库锁阻塞_机器连接数_警报日志的shell脚本 分享

 

  
  
  
  
  1. 这个shell脚本监控数据库锁阻塞,机器连接数,警报日志,而其中的机器连接数,警报日志不会重复发相同内容的邮件 
  2.  
  3. #!/bin/sh 
  4.  
  5. #danchen 
  6. #2007-3-28 
  7.  
  8. #program variable 
  9. export ORACLE_BASE=/opt/oracle 
  10. export ORACLE_HOME=$ORACLE_BASE/product/9.2 
  11. export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$PATH 
  12. export NLS_LANG=american_america.zhs16gbk 
  13. export ORACLE_OWNER=oracle 
  14. export ORACLE_SID=test 
  15. export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib 
  16. export BDUMP=/opt/oracle/admin/devdb/bdump 
  17. ulimit -l unlimited >/dev/null 2>&1 
  18.  
  19. #local variable 
  20. mailto='[email protected]' 
  21. CP=/bin/cp 
  22.  
  23. date 
  24. $ORACLE_HOME/bin/sqlplus -S test/test@test <<EOF 
  25.   set serveroutput on size 20000; 
  26.   spool /tmp/lock_danger.log 
  27.   declare 
  28.     sql1 varchar2(2000); 
  29.     sql2 varchar2(2000); 
  30.     machine1 varchar2(50); 
  31.     machine2 varchar2(50); 
  32.     isblock number; 
  33.     seq number; 
  34.   begin 
  35.           for i in(select sid,id1,id2 from v\$lock where type='TX' and lmode=6) loop 
  36.                  isblock := 0; 
  37.                  select serial#,machine into seq,machine1 from v\$session where sid=i.sid; 
  38.  
  39.                  for j in(select sid,id1,id2 from v\$lock where type='TX' and request=6) loop 
  40.                        if i.id1=j.id1 and i.id2=j.id2 then 
  41.                            isblock := 1; 
  42.                            select machine into machine2 from v\$session where sid=j.sid; 
  43.                            dbms_output.put_line('machine '||machine1||' is blocking machine '||machine2); 
  44.                        end if; 
  45.                  end loop; 
  46.                  if isblock=1 then 
  47.                            dbms_output.put_line('alter system kill session '''||i.sid||','||seq||''';'); 
  48.                            dbms_output.put_line(chr(10)); 
  49.                  end if; 
  50.           end loop; 
  51.   end
  52.   spool off 
  53.   spool /tmp/link_danger.log 
  54.   select machine,count(*) from v\$session group by machine having count(*)>15;  
  55.   spool off 
  56. exit; 
  57. EOF 
  58.  
  59. #analyze 
  60. v_kill=`cat /tmp/lock_danger.log|grep "alter system kill session"|wc -l` 
  61. if [ $v_kill -gt 0 ] 
  62.    then 
  63.        scp /tmp/lock_danger.log oracle@csdb1:/opt/devtest_db_logs/lock_$HOSTNAME.log 
  64.        ssh -loracle csdb1 "mail -s "lock_${HOSTNAME}_danger" $mailto < /opt/devtest_db_logs/lock_$HOSTNAME.log" 
  65. fi 
  66.  
  67. if [ -f /tmp/link_danger.log.old ] 
  68.    then 
  69.        $CP /tmp/link_danger.log /tmp/link_danger.log.new 
  70.        v_mc=`diff /tmp/link_danger.log.new /tmp/link_danger.log.old|grep "<"|wc -l` 
  71.        $CP /tmp/link_danger.log.new /tmp/link_danger.log.old 
  72.        if [ $v_mc -gt 0 ] 
  73.           then 
  74.               v_m_c=`cat /tmp/link_danger.log.new|grep "MACHINE"|wc -l` 
  75.               if [ $v_m_c -gt 0 ] 
  76.                  then 
  77.                    scp /tmp/link_danger.log oracle@csdb1:/opt/devtest_db_logs/link_$HOSTNAME.log 
  78.                    ssh -loracle csdb1 "mail -s "link_${HOSTNAME}_danger" $mailto < /opt/devtest_db_logs/link_$HOSTNAME.log" 
  79.               fi 
  80.        fi 
  81.    else 
  82.        echo " " > /tmp/link_danger.log.old 
  83. fi 
  84.  
  85. #alert.log 
  86. if [ -f $BDUMP/alert_${ORACLE_SID}.log.old ] 
  87. then 
  88.      $CP $BDUMP/alert_${ORACLE_SID}.log $BDUMP/alert_${ORACLE_SID}.log.new 
  89.      v_alert=`diff $BDUMP/alert_${ORACLE_SID}.log.new $BDUMP/alert_${ORACLE_SID}.log.old|grep "<"|grep "ORA-"
  90.      n_alert=`diff $BDUMP/alert_${ORACLE_SID}.log.new $BDUMP/alert_${ORACLE_SID}.log.old|grep "<"|grep "ORA-"|wc -l` 
  91.      $CP $BDUMP/alert_${ORACLE_SID}.log.new $BDUMP/alert_${ORACLE_SID}.log.old 
  92.      if [ $n_alert -gt 0 ] 
  93.          then 
  94.              echo "$v_alert" > /tmp/alert_danger.log 
  95.              scp /tmp/alert_danger.log oracle@csdb1:/opt/devtest_db_logs/alert_$HOSTNAME.log 
  96.              ssh -loracle csdb1 "mail -s "alert_${HOSTNAME}_danger" $mailto < /opt/devtest_db_logs/alert_$HOSTNAME.log" 
  97.      fi 
  98. else 
  99.      $CP $BDUMP/alert_${ORACLE_SID}.log $BDUMP/alert_${ORACLE_SID}.log.old 
  100. fi 
  101. date 

 

你可能感兴趣的:(shell,职场,休闲)