ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 表数据锁,内存对象锁

表数据锁,内存对象锁

原创 Linux操作系统 作者:sduzjw 时间:2011-08-23 15:25:14 0 删除 编辑
1。修改数据不提交引起的锁
sid=138

select * from v$mystat t 

update zjw.t1 set id=11 where id=1;
在以上会话中修改数据但不提交,在另一个会话中修改相同的数据:

sid=142

update zjw.t1 set id=11 where id=1;
142会话就会被138会话BLOCK,可通过以下检查方法找到是138阻止了142.

select * from dba_blockers t ;
此查询会显示HOLDING_SESSION=138会话当前处于BLOCKING状态,也就是阻止了别人。
select * from dba_lock where blocking_others='Blocking';
此查询也会显示138会话当前处于BLOCKING状态 ,阻止了别人。该 会话持有排他锁,根据LOCK_ID1,LOCK_ID2可以看到另一个会话正要请求一个排他锁,当然也可以从字段:MODE_REQUESTED=Exclusive找到正在请求排他锁的会话是SID=142。
如果是10G的数据库,可以直接从V$SESSION中找到真相

select t.BLOCKING_SESSION,t.* from v$session t where t.BLOCKING_SESSION is not null ;
BLOCKING_SESSION=138,被阻止的会话是SID=142,从这里可以直接找到会话被谁给阻止了。

2。内存对象的锁
创建了一个存储过程
create or replace procedure zjw.zjwtest as
begin

  loop

    null;
  end loop;
end ;
在一个会话SID=140中执行这个死循环状态的存储过程
begin 
zjw.zjwtest;
end;
在另一个会话SID=137中试图编译该过程 
alter procedure zjw.zjwtest compile;

编译会挂起。

如果查询V$LOCK,那么看不到有相关的锁,
select * from dba_lock;
MODE_REQUESTED中都是NONE,没有人在请什么锁
因为以上操作是与内存对象有关的,所以要从DBA_KGLLOCK中查找相关的锁信息
select * from dba_kgllock where kgllkreq <> 0;
看到有人在请求锁
根据KGLLKHDL看看是谁已经早先一步持有相关的锁
select  *from dba_kgllock where kgllkhdl='286C9354'
注意锁类型字段KGLLKTYPE:LOCK / PIN
KGLLKMOD是已经加在对象上的锁
KGLLKUSE则是持有该锁的会话的地址,看看这个会话在干些什么
select  *from v$session t where t.SADDR = '2BEF58BC'
找到SQL_ID,关联到V$SQL,
select * from v$sql where sql_id = '4t0rd5qfscfpm'
从字段SQL_TEXT,SQL_FULLTEXT现在可以看到那个人正在干些什么了吧。

DBA_KGLLOCK中的KGLLKHDL与X$KGLOB可以看到是哪个对象有了问题
select * from x$kglob where kglhdadr='286C9354';
KGLNAOWN,KGLNAOBJ看看这个对象是什么吧

如果是10G数据库的话,直接使用V$session看看是谁吧
select t.BLOCKING_SESSION,t.* from v$session t where t.BLOCKING_SESSION is not null ;
BLOCKING_SESSION不为空表示有人阻止了别人,该字段的值正是阻止别人的会话的SID,看看该会话下在搞些什么。

select tt.sql_text, tt.sql_fulltext, tt.*
  from v$sql tt
 where sql_id in
       (select t.sql_id
          from v$session t
         where sid in (select blocking_session
                         from v$session
                        where blocking_session is not null));

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

请登录后发表评论 登录
全部评论

注册时间:2010-06-11

  • 博文量
    33
  • 访问量
    93176