Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103724533
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-09 16:39:05

 

1.   诊断系统中的锁 

select   /*+   NO_MERGE(a)   NO_MERGE(b)   NO_MERGE(c)   */   'Wait'   "Status",   a.username,   a.machine,   a.sid,   a.serial#,   a.last_call_et   "Seconds",   b.id1,   c.sql_text   "SQL"   
  
from   v$session   a,   v$lock   b,   v$sqltext   c   
  
where   a.username   is   not   null   
  
and   a.lockwait   =   b.kaddr   
  
and   c.hash_value   =a.sql_hash_value   
  
union   
  
select   /*+   NO_MERGE(a)   NO_MERGE(b)   NO_MERGE(c)   */   'Lock'   "Status",   a.username,   a.machine,   a.sid,   a.serial#,   a.last_call_et   "Seconds",   b.id1,   c.sql_text   "SQL"   
  
from   v$session   a,   v$lock   b,   v$sqltext   c   
  
where   b.id1   in   
  (
select   /*+   NO_MERGE(d)   NO_MERGE(e)   */   distinct   e.id1   
  
from   v$session   d,   v$lock   e   
  
where   d.lockwait   =   e.kaddr)   
  
and   a.username   is   not   null   
  
and   a.sid   =   b.sid   
  
and   b.request=0   
  
and   c.hash_value   =a.sql_hash_value;   

 Status有两种状态,LOCK表明该进程锁住了某个资源,WAIT表示该进程正在等待某个资源。   
 Username,   Machine分别为ORACLE用户名及机器名   
 SID,SERIAL#可用于随后的解锁操作   
 Seconds表示该进程最后一次进行操作至当前的时间(秒)   
 ID1,   锁标识。某个LOCK状态的ID1与某个WAIT状态的ID1相同,可说明锁的正是另一个进程等待的。   
 SQL:   锁住资源的SQL语句

2.   解除锁

诊断出锁的状态后,若发现该阻塞其它用户进程的进程是正常操作中,则可通知该用户对其进行提交,从而达到释放锁资源的目的;若为非正常操作,即,其状态为"inactive",且其Seconds已为较多长时间,则可执行以下语句将该进程进行清除,系统会自动对其进行回滚,从而释放锁住的资源。    

alter   system   kill   session   'sid,   serial#'


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2260423

阅读(246) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~