Chinaunix首页 | 论坛 | 博客
  • 博客访问: 78589
  • 博文数量: 16
  • 博客积分: 591
  • 博客等级: 中士
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-23 10:48
文章分类
文章存档

2011年(7)

2010年(2)

2009年(6)

2008年(1)

分类: Oracle

2009-10-29 23:43:28

 

关键字: 锁表
1.select * from v$locked_object
2.select * from v$session where sid = 296
 
alter   system   kill   session   '95,   5050';
 
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#';    
 
select   a.*,b.object_name    
  from   v$locked_object   a   ,all_objects   b   ,v$session   c  
  where   a.OBJECT_ID=b.object_id  
  AND   a.SESSION_ID=c.SID  
  and   c.USERNAME='gdzj'
阅读(2453) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~