create or replace procedure solve_lock_061203(v_msg out varchar2)

 as

  v_sql varchar2(3000); --定义 v_sql 接受抓取锁的sql语句

  kill_sid    number;
  kill_serial number;

  cur_lock   sys_refcursor; --定义游标变量,循环执行抓取锁的sql语句
  cur_lock02 sys_refcursor;

  type tp_lock is record( --定义 record类型的 变量
    v_sid       number,
    v_type      varchar2(10),
    v_id1       number,
    v_id2       number,
    v_lmode     varchar2(200),
    v_request   varchar2(200),
    v_lock_time number,
    v_block     number);
  records_lock tp_lock;

  type tp_lock02 is record(
    waiting_sid   number,
    waiting_sql   varchar2(1000),
    blocker_event varchar2(1000),
    blocking_sid  number,
    blocking_sql  varchar2(1000));
  records_lock02 tp_lock02;

  v_blocking_sid number;
  v_waiting_sid  number;

begin
  v_msg := '';
  v_sql := '';

  v_msg := v_msg ||
           '------------------查找数据库中是否有锁阻塞、锁等待的情况------------------' ||
           chr(10);
  --  DBMS_OUTPUT.PUT_LINE('------------------查找数据库中是否有锁阻塞、锁等待的情况------------------');
  v_sql := 'select sid,type,id1,id2,
decode(lmode,0, ''none'',1,''null'', 2, ''row share'' ,3, ''row exclusive'' ,4, ''share'' ,5, ''share row exclusive'' ,6 ,''exclusive'' ,''null'') lock_type,
decode(request,0, ''none'',1,''null'', 2, ''row share'' ,3, ''row exclusive'' ,4, ''share'' ,5, ''share row exclusive'' ,6 ,''exclusive'' ,''hull'') lock_request,
ctime,block from v$lock where type in (''TM'',''TX'')';

  open cur_lock for v_sql;
  loop
    fetch cur_lock
      into records_lock;
    exit when cur_lock%notfound;
 
    if records_lock.v_request <> 'none' then
      --抓取发出请求锁的会话
    
      v_msg := v_msg || 'waiting sid: ' || records_lock.v_sid ||
               ' is request a lock ,lock_mode is ' ||
               records_lock.v_request || ' and being locked ' ||
               records_lock.v_lock_time || 's' || chr(10);
      --dbms_output.put_line('waiting sid: '||records_lock.v_sid||' is request a lock ,lock_mode is '||records_lock.v_request||' and being locked '|| records_lock.v_lock_time||'s');
      v_waiting_sid := records_lock.v_sid;
    end if;
 
    if records_lock.v_block <> 0 then
      --抓取发生锁阻塞的会话
      v_msg := v_msg || 'blocking sid: ' || records_lock.v_sid ||
               ' is make a lock , lock_mode is ' || records_lock.v_lmode ||
               chr(10);
    
      /* dbms_output.put_line('blocking sid: ' || records_lock.v_sid ||
      ' is make a lock , lock_mode is ' ||
      records_lock.v_lmode);*/
      v_blocking_sid := records_lock.v_sid;
    end if;
 
  end loop;
  close cur_lock;
  v_sql := '';

  v_msg := v_msg ||
           '------------------查找产生锁的会话、锁等待的会话------------------------' ||
           chr(10);
  --  dbms_output.put_line('------------------查找产生锁的会话、锁等待的会话------------------------');
  v_sql := 'select distinct waiter.sid "waiting_sid",w_sql.sql_text "sql from waiting session",blocker.event "blocker event",blocker.sid "blocking sid",
b_sql.sql_text "sql from blocking session"  from v$session waiter, v$session blocker,v$sql w_sql,v$sql b_sql
where waiter.event=''enq: TX - row lock contention'' and waiter.blocking_session=blocker.sid
and w_sql.sql_id=waiter.sql_id
and b_sql.sql_id =nvl(blocker.sql_id,blocker.prev_sql_id)';

  open cur_lock02 for v_sql;
  loop
    fetch cur_lock02
      into records_lock02;
    exit when cur_lock02%notfound;
 
    if records_lock02.waiting_sid is not null then
      v_msg := v_msg || 'waiting sid: ' || records_lock02.waiting_sid ||
               ' wait_sql is : ' || records_lock02.waiting_sql || chr(10);
      /* dbms_output.put_line('waiting sid: ' || records_lock02.waiting_sid ||
      ' wait_sql is : ' || records_lock02.waiting_sql);*/
    end if;
 
    if records_lock02.blocking_sid is not null then
      v_msg := v_msg || 'blocking sid: ' || records_lock02.blocking_sid ||
               ' block_sql is : ' || records_lock02.blocking_sql || chr(10);
      /* dbms_output.put_line('blocking sid: ' || records_lock02.blocking_sid ||
      ' block_sql is : ' ||
      records_lock02.blocking_sql);*/
    end if;
  end loop;
  close cur_lock02;

  v_msg := v_msg || '------------------解决 锁阻塞、锁等待------------------' ||
           chr(10);
  --  dbms_output.put_line('------------------解决 锁阻塞、锁等待------------------');

  select sid, serial#
    into kill_sid, kill_serial
    from v$session
   where sid = v_blocking_sid;
  v_msg := v_msg || 'action: alter system kill session ( ' || kill_sid || ',' ||
           kill_serial || ')' || chr(10);
  /*  dbms_output.put_line('action: alter system kill session ( ' || kill_sid || ',' ||
  kill_serial || ')');*/

exception
  when no_data_found then
    v_msg := v_msg || sqlerrm;
    /* dbms_output.put_line(sqlcode || sqlerrm);*/

end solve_lock_061203;

solve_lock-1024-大功告成的更多相关文章

  1. python3爬取1024图片

    这两年python特别火,火到博客园现在也是隔三差五的出现一些python的文章.各种开源软件.各种爬虫算法纷纷开路,作为互联网行业的IT狗自然看的我也是心痒痒,于是趁着这个雾霾横行的周末瞅了两眼,作 ...

  2. mysql Packet for query is too large (1185 > 1024)异常

    注:最近mysql一直提示如下错误 Packet for query is too large (1185 > 1024). You can change this value on the s ...

  3. 2016年1月25日 《1024伐木累》-小白篇之开发网站,三天!(中篇-2奇怪的IE)-总章节十一

    往期回顾:  老王的“先见之明”,解决了困扰耗仔三人的大难题.顺利安装完开发工具,大家投入紧张的工作.航空部领导的突然闯入,IE不兼容,页面错乱,摆在三人面前的形势依然严峻.第一次见这阵仗的耗仔,又会 ...

  4. BZOJ 1024: [SCOI2009]生日快乐

    Description 将一个 \(x\times y\) 的矩形分成 \(n\) 块,让最长边:最短边 最小. Sol 搜索. \(n\) 只有 \(10\) 写一个类似于记搜的东西就好了. Cod ...

  5. HDU 1024 max sum plus

    A - Max Sum Plus Plus Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I6 ...

  6. RCA:未注意Curl-library Post 1024以上字节时的HTTP/1.1特性导致 HessianPHP 传输数据失败

    先列出 HessianPHP 的错误提示: CURL transport error: transfer closed with outstanding read data remaining 基础知 ...

  7. 使用TarOutputStream出现 request to write '1024' bytes exceeds size in header错误的解决方法

    因为测试流程中,所测客户端会根据服务器A返回的response决定发送给服务器B的请求里各参数的值,所以现在需要模拟服务器的响应.而这个项目服务器A的响应式返回一个流,一个GZIP压缩格式流,压缩的是 ...

  8. nested exception is com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1044 > 1024

    HTTP Status 500 - type Exception report message description The server encountered an internal error ...

  9. ecshop 加广告出现广告位的宽度值必须在1到1024之间

    打开 admin/ad_position.php这个文件,搜索1024,这里你会搜到两个地方 在236行左右 if ($ad_width > 1024 || $ad_width < 1) ...

  10. mysql root强密码的必要性max_allowed_packet被改成1024引起的风险

    前两天运维反馈说,有些机器的max_allowed_packet隔两天就会被改成1024,导致客户端调用时出错,网上有说内存不够的,也有人工修改的. 运维小姑娘一口咬定肯定没有改过的,而且my.cnf ...

随机推荐

  1. Java数据类型和MySql数据类型对应一览

    类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang.String 12   CHAR N ...

  2. magic c c++ unix 注册机 注册码 破解版 下载

    说起来都是伤心的事情前段时间,忙于找工作,面试的公司和入职的公司,想想都觉得很奇葩,其中有一家叫什么湖南普天科技有限公司的,他们是从国防科大接项目做的,那天他们叫我去面试,面试完了,说我们这里有个c+ ...

  3. 坑爹的Android Ble 问题记录日志

    开发Ble(公司项目,防丢器)已经有一段时间,由于是第一次接触Ble而网上资料又不多,且android平台自身的差异性,遇到了很多问题.为了将来方便查阅,在此做下记录.1.中兴手机,蓝牙手动断开后,无 ...

  4. 疯狂VirtualBOX 实战讲学录:小耗子之VirtualBOX修炼全程重现

    疯狂VirtualBOX 实战讲学录:小耗子之VirtualBOX修炼全程重现 神级虚拟技术&云计算专家”小耗子”老师震撼分享 全球第—部完整深入的中文VirtualBox技术全程实战手册 全 ...

  5. bzoj1819

    水题,上trie,然后穷举每一位的时候判定一下三种编辑 ..*,..] of longint; v:..*] of longint; d:..] of boolean; s:string; t,i,l ...

  6. bzoj2337

    这句话感觉都能成定理了:xor问题逐位考虑……这道题就是这样,然后和bzoj3143和相似但这道题多了自环,于是我们设f[i]表示当前位由i走到n的后为1的数学期望显然f[n]=0,可得f[i]=si ...

  7. Linux Shell编程(20)——基本命令

    新手必须要掌握的初级命令ls基本的列出所有文件的命令.但是往往就是因为这个命令太简单,所以我们总是低估它.比如,用 -R 选项,这是递归选项,ls 将会以目录树的形式列出所有文件, 另一个很有用的选项 ...

  8. 【转】XCode快捷键

    原文网址:http://www.cnblogs.com/yjmyzz/archive/2011/01/25/1944325.html 1. 文件 CMD + N: 新文件CMD + SHIFT + N ...

  9. Delphi中TxmlDocument控件的用法 转

    Delphi中对XML文件的解析做的很好,比直接使用MS的MSXML2_TLB中的接口要方便很多,现称述于下面. 在讲之前先给出一个XML实例,在讲某些部分是要结合实例比较容易理解. 1<?xm ...

  10. HDOJ(HDU) 2519 新生晚会(组合公式)

    Problem Description 开学了,杭电又迎来了好多新生.ACMer想为新生准备一个节目.来报名要表演节目的人很多,多达N个,但是只需要从这N个人中选M个就够了,一共有多少种选择方法? I ...