查杀系统死锁的sql,最近想改造成存储过程,如下:

CREATE OR REPLACE PROCEDURE HERO_KILLLOCKSESSION

(OUT_COUNT OUT NUMBER, OUT_CUR OUT ZHUOCAIDEV.FUXJPACKAGE.FUXJRESULTSET) IS

BEGIN

SELECT COUNT(*)

INTO OUT_COUNT

FROM V$LOCKED_OBJECT L, DBA_OBJECTS B, V$SESSION X, V$PROCESS C

WHERE B.OBJECT_ID = L.OBJECT_ID

AND L.SESSION_ID = X.SID

AND C.ADDR = X.PADDR;

OPEN OUT_CUR FOR

SELECT B.OWNER,

B.OBJECT_NAME,

L.SESSION_ID,

X.SERIAL#,

X.USERNAME,

X.LOGON_TIME,

L.LOCKED_MODE,

'alter system kill session ''' || X.SID || ',' || X.SERIAL# ||'''' KILLSQL,

C.SPID AS OS_PROCESS_ID,

C.PID,

'ps -ef | grep ' || C.SPID AS CHECK_OS_PROCESS_COMMAND,

'kill -9 ' || C.SPID AS KILL_OS_PROCESS_COMMAND

FROM V$LOCKED_OBJECT L, DBA_OBJECTS B, V$SESSION X, V$PROCESS C

WHERE B.OBJECT_ID = L.OBJECT_ID

AND L.SESSION_ID = X.SID

AND C.ADDR = X.PADDR

ORDER BY X.LOGON_TIME ASC;

END;

在系统sys模式下可以正常运行,在zhuocaidev下面报 ORA-00942 表或视图不存在

但在正常的SQL中是能够对V$LOCKED_OBJECT , DBA_OBJECTS , V$SESSION , V$PROCESS 进行访问的。猜测估计是权限问题,联想到运行statspack报告的perfstat用户没有此问题,查看下statspack的创建脚本,发现需要单独使用下面语句进行赋权:

grant select on V_$SESSION to scott;

以sys用户登录,执行如下授权语句:

grant select on SYS.V_$LOCKED_OBJECT TO zhuocaidev; grant select on  SYS.DBA_OBJECTS TO zhuocaidev; grant select on SYS.V_$SESSION  TO zhuocaidev; grant select on SYS.V_$PROCESS TO zhuocaidev;

在以zhuocaidev登录,可以正常创建存储过程.

create or replace procedure pro_kill_lockprocess is /*      以sys用户登录,执行如下授权语句: grant select on SYS.V_$LOCKED_OBJECT TO gtdj; grant select on  SYS.DBA_OBJECTS TO gtdj; grant select on SYS.V_$SESSION  TO gtdj; grant select on SYS.V_$PROCESS TO gtdj; */   v_sql varchar2(4000); begin   for rec1 in (SELECT /*+ rule */                 s.username,                 l.type,                 decode(l.type,                        'TM',                        'TABLE LOCK',                        'TX',                        'ROW LOCK',                        NULL) LOCK_LEVEL,                 o.owner,                 o.object_name,                 o.object_type,                 s.sid,                 s.serial# serial,                 s.terminal,                 s.machine,                 s.program,                 s.osuser,                 s.status                 FROM v$session s,v$lock l,dba_objects o                 WHERE l.sid = s.sid                   AND l.id1 = o.object_id(+)                   AND USERNAME = 'GTDJ'                   and object_name = 'ZX_GTDJ_LICENSE_TEMP'                   AND s.username is NOT NULL                 order by l.type) loop       v_sql := 'alter system kill session ''' || rec1.sid || ',' ||              rec1.serial || '''';     dbms_output.put_line(v_sql);     execute immediate v_sql;   end loop;

end pro_kill_lockprocess;

批量杀死进程:

declare v_sql varchar2(4000); begin   for rec1 in (SELECT /*+ rule */ s.username, l.type,

decode(l.type,'TM','TABLE LOCK',

'TX','ROW LOCK',

NULL) LOCK_LEVEL,

o.owner,o.object_name,o.object_type,

s.sid,s.serial# serial,s.terminal,s.machine,s.program,s.osuser,s.status

FROM v$session s,v$lock l,dba_objects o

WHERE l.sid = s.sid

AND l.id1 = o.object_id(+) AND USERNAME='GTDJ' and object_name='ZX_GTDJ_LICENSE_TEMP'

AND s.username is NOT NULL order by l.type ) loop

v_sql := 'alter system kill session '''||rec1.sid|| ','||rec1.serial||''''; dbms_output.put_line(v_sql); execute immediate v_sql; end loop;

end;

Oracle杀死死锁进程的更多相关文章

  1. Oracle删除死锁进程的方法

    本文实例讲述了Oracle删除死锁进程的方法.分享给大家供大家参考.具体如下: 步骤1:用以下SQL查看进程列表,判断出被锁定的表 复制代码代码如下: SELECT dob.OBJECT_NAME T ...

  2. SqlServer 查询死锁,杀死死锁进程

    -- 查询死锁 select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName from sy ...

  3. SqlServer 查询死锁,杀死死锁进程*转载

    原文: -- 查询死锁 select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName fro ...

  4. oracle删除死锁进程

    在命令行下运行: select SID,SERIAL# from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID; alte ...

  5. sql server 查看表的死锁和Kill 死锁进程

    查询出来 select        request_session_id spid,       OBJECT_NAME(resource_associated_entity_id) tableNa ...

  6. sql server 查询和Kill死锁进程

    查询死锁进程语句 select        request_session_id spid,       OBJECT_NAME(resource_associated_entity_id) tab ...

  7. Sqlserver查询死锁及杀死死锁的方法

    -- 查询死锁 select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName from sy ...

  8. 如何杀死oracle死锁进程

    方法一:Oracle的死锁非常令人头疼,总结了一些点滴经验作为学习笔记 1.查哪个过程被锁查V$DB_OBJECT_CACHE视图: '; 2. 查是哪一个SID,通过SID可知道是哪个SESSION ...

  9. oracle杀死锁表的进程(转发+合并+自己实践)

    之一: Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作 (1)锁表查询的代码有以下的形式:select count(*) from v$locked_object;sel ...

随机推荐

  1. open live writer下载安装

    以前记笔记都是用Evernote,啥都记在上面.除了学习工作的以外,还有各种账号密码啦(这个真心有必要,再也不用各种试了),妈妈要我帮她下载的广场舞名字啦,我双十一要剁手的东西啦等等.很好用的,推荐! ...

  2. Vs2015 Ef 连接Oracle 出现OracleInternal.Common.ConfigBaseClass 的解决办法

    如果配置没问题的话,就是 Oracle.ManagedDataAccess 在全局程序集的版本问题 解决方法方法 将Oracle.ManagedDataAccess  GAC全局程序集中移除 1:用C ...

  3. java 报表到excel

    现加个jar包 http://pan.baidu.com/s/1boe5kXh   vfp8 然后代码 package makeReportToExcel; import java.io.File; ...

  4. C语言指针、地址、赋值三者含义

    先来一个观点.大家先看看对不对 按:在CSDN论坛上,有位坛友提到这个问题: ==================================== 先看一段代码: #include<stdi ...

  5. [MFC美化] SkinMagic使用详解2- SkinMagic常用函数介绍

    SkinMagic常用函数介绍 (1)InitSkinMagicLib函数:初始化SkinMagic int InitSkinMagicLib( //初始化SkinMagic工具库 HINSTANCE ...

  6. POJ 1118 Lining Up

    枚举,排序. 先将所有点按双关键字排序,然后枚举线的顶点$P$,剩余的点以$P$为中心进行极角排序,可以取个$gcd$,这样一样的点就排在一起了,然后统计一下更新答案. #pragma comment ...

  7. jmeter命令行运行-单节点

    jmeter有自己的GUI页面,但是当线程数很多或者现在有很多的测试场景都是基于linux下进行压测,这时我们可以使用jmeter的命令行方式来执行测试,该篇文章介绍jmeter单节点命令运行方式. ...

  8. Chapter 3 Phenomenon——1

    When I opened my eyes in the morning, something was different. 这天早上当我睁开眼睛的时候,一些事变得不同了. It was the li ...

  9. thinkphp5.0 自动加载

    自动加载 概述 ThinkPHP5.0真正实现了按需加载,所有类库采用自动加载机制,并且支持类库映射和composer类库的自动加载. 自动加载的实现由think\Loader类库完成,自动加载规范符 ...

  10. c#弱事件(weak event)

    传统事件publisher和listener是直接相连的,这样会对垃圾回收带来一些问题,例如listener已经不引用任何对象但它仍然被publisher引用 垃圾回收器就不能回收listener所占 ...