ITPub博客

首页 > 数据库 > Oracle > [20150821]简单编写解除阻塞的脚本.txt

[20150821]简单编写解除阻塞的脚本.txt

原创 Oracle 作者:lfree 时间:2015-08-26 12:03:21 0 删除 编辑

[20150821]简单编写解除阻塞的脚本.txt

--主要是在rac环境下查杀阻塞的会话,以前的一些脚本不好用。

SELECT    'alter system kill session '''
         || blocking_session
         || ','
         || blocking_session_serial#
         || ',@'
         || blocking_inst_id
         || ''' immediate;'
            c80, sql_id,machine
    FROM gV$ACTIVE_SESSION_HISTORY
   WHERE     event = 'enq: TX - row lock contention'
         AND sample_time >= SYSDATE - 12 / 86400
GROUP BY blocking_session, blocking_session_serial#, blocking_inst_id,sql_id,machine
  HAVING COUNT (*) >= 10;

--写成脚本:
$ cat find_lock.sql
SET PAGESIZE 0
SET ECHO OFF HEADING OFF FEED OFF PAGESIZE 0 VERIFY OFF
WHENEVER SQLERROR EXIT FAILURE;

SET SERVEROUTPUT ON;

BEGIN
   FOR cursor_x
      IN (  SELECT    'alter system kill session '''
                   || blocking_session
                   || ','
                   || blocking_session_serial#
                   || ',@'
                   || blocking_inst_id
                   || ''' immediate'
                      c80
                  ,sql_id
                  ,machine
              FROM GV$ACTIVE_SESSION_HISTORY
             WHERE     event = 'enq: TX - row lock contention'
                   AND sample_time >= SYSDATE - 12 / 86400
          GROUP BY blocking_session
                  ,blocking_session_serial#
                  ,blocking_inst_id
                  ,sql_id
                  ,machine
            HAVING COUNT (*) >= 10)
   LOOP
      EXECUTE IMMEDIATE cursor_x.c80;

      DBMS_OUTPUT.put_line
      (
            SYSDATE
         || ' sql_id='
         || cursor_x.sql_id
         || ' machine='
         || cursor_x.machine
      );
   END LOOP;
END;
/

SET SERVEROUTPUT OFF;
QUIT

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-1782999/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4010
  • 访问量
    7976041