Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1014747
  • 博文数量: 116
  • 博客积分: 3758
  • 博客等级: 中校
  • 技术积分: 1316
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-17 11:49
个人简介

这家伙很懒。。。

文章分类

全部博文(116)

文章存档

2016年(3)

2015年(2)

2014年(1)

2013年(9)

2012年(25)

2011年(50)

2010年(12)

2009年(14)

分类: Oracle

2011-03-31 17:04:12

今天同事操作表时发现不能update,于是搜了一些资料加以整理........ 

      其实解锁并不复杂,用PL/SQL可以很方便解锁,可以用两种方式得到目前被锁住的表。第一种是,直接从,Tools->Session里面查看,里面有很多的Session和进程,下面有一个Lock的Tab,选中那个Tab,然后一条一条地去上面Session,如果Lock这一栏有数据,就说明被锁住了,在Objec_Name里面可以看到表名。 

      如果是自己的表,可以得到Sid和Serial#,接着执行以下语句就可以解锁: 

      alter system kill session 'sid,serial#'; 

     第二种方法是用语句得到详细的被锁住的表的信息,语句如下: 


SELECT /*+ rule */ s.username, 
decode(l.type,'TM','TABLE LOCK', 
'TX','ROW LOCK', 
NULL) LOCK_LEVEL, 
o.owner,o.object_name,o.object_type, 
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser 
FROM v$session s,v$lock l,dba_objects o 
WHERE l.sid = s.sid 
AND l.id1 = o.object_id(+) 
AND s.username is NOT Null 


-----------------------------------------------------------------------------------
这个语句经测试也可以

select
s.username,
decode(l.type,'tm','table lock','tx','row lock',null) lock_level,
o.owner,
o.object_name,
o.object_type,
s.sid,
s.serial#,
s.terminal,
s.machine,
s.program,
s.osuser
from v$session s,v$lock l,dba_objects o
where l.sid = s.sid
and l.id1 = o.object_id(+)
and s.username is not null;

--kill session语句
alter system kill session'sid,serial#';


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