#!/bin/sh


#this shell script is used to kill the head session

#author colin

#date Sun Sep 26 CST 2010

function print_usage()
{
  echo "Usage: kill_session.sh colin/colin "
  echo "\t 查找死锁会话开始"
}

function get_pid() #the head locked process id
{
        pid=`${SQLPLUS} -S ${ORACLE_USERNAME} <<\EOF
        set head off
        select v2.spid
            from v$session v1, v$process v2
                where v1.paddr = v2.addr
                 and v1.sid in (select v3.SESSION_ID
         from v$locked_object v3
                        where v3.oracle_username = user);
EOF
`
}

function kill_session() #kill the head locked session
{
        ${SQLPLUS} ${ORACLE_USERNAME} << \EOF
            DECLARE
              v_sid int;
         v_serial int;
            BEGIN
              select v1.sid, v1.serial#
                into v_sid, v_serial
                  from v$session v1, v$process v2
                    where v1.paddr = v2.addr
                      and v1.sid in (select v3.SESSION_ID
                              from v$locked_object v3
                                where v3.oracle_username = user);

            if v_sid is not null and v_serial is not null then
               execute immediate 'alter system kill session ' || '''' || v_sid || ',' ||
                      v_serial || '''';
            end if;
            END;
/
EOF
}

work_job()
{    
kill_session ${SQLPLUS} ${ORACLE_USERNAME}
get_pid ${SQLPLUS} ${ORACLE_USERNAME}
kill -9 $pid
}


##set the env
ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/product/10.2.0
export ORACLE_BASE ORACLE_HOME
SQLPLUS=${ORACLE_HOME}/bin/sqlplus
ORACLE_USERNAME=$1

if [ $# -lt 1 ]; then
  print_usage
  exit -1
else
  echo "Begin Kill the Headsing Session..."
fi    

work_job


12-04 07:25
查看更多