oracle 表锁死的解决方法


我们在操作 数据库 的 时候,有时候会由于操作不当引起数据库表被锁定,这么我们经常不知所措,不知怎么给这些表解锁,在pl/sql Developer工具的的菜单“tools”里面的“sessions”可以查询现在存在的会话,但是我们很难找到那个会话被锁定了,想找到所以被锁的 会话就更难了,下面这叫查询语句可以查询出所以被锁的会话。如下:

1查看被锁的表:

SELECTp.spid,

      c.object_name,

      b.session_id,

      a.serial#,

      b.oracle_username,

      b.os_user_name

 FROMv$process p, v$session a, v$locked_object b, all_objects c

 WHEREp.addr = a.paddr

  ANDa.process = b.process

  ANDc.object_id = b.object_id;

解锁:
alter system kill session
'b.session_id,a.serial#';
在系统层面终止进程:
[Windows]  ntsd -c q -p
p.spid
[Linux]        ps -ef|grep
p.spid

2查询当前表锁的方法:

SELECTall_objects.object_name,

      s.sid,

      s.serial#,

      s.osuser,

      s.program,

      s.machine,

      s.client_info

 FROMv$lock k, v$session s, all_objects

 WHEREk.sid = s.sid

  ANDk.TYPEIN('TX','TM')

  ANDk.id1 = all_objects.object_id;

v$locked_object用以详细的描述了当前锁定对象的详细信息,OBJECT_ID为对象IDSESSION_ID为当前登录用户Session号,ORACLE_USERNAMEOracle的用户名,OS_USER_NAME为操作系统用户名等

v$lock该视图说明当前锁定的所有对象,锁定SID号,锁定类型等信息;

3、查询锁

--存在锁请求,即被阻塞

SELECTsn.username,

      m.sid,

      sn.serial#,

      m.TYPE,

      decode(m.lmode,

             0,

             'None',

             1,

             'Null',

             2,

             'Row Share',

             3,

             'Row Excl.',

             4,

             'Share',

             5,

             'S/Row Excl.',

             6,

             'Exclusive',

             lmode,

             ltrim(to_char(lmode,'990'))) lmode,

      decode(m.request,

             0,

             'None',

             1,

             'Null',

             2,

             'Row Share',

             3,

             'Row Excl.',

             4,

             'Share',

             5,

             'S/Row Excl.',

             6,

             'Exclusive',

             request,

             ltrim(to_char(m.request,'990'))) request,

      m.id1,

      m.id2

 FROMv$session sn, v$lock m

 WHEREsn.sid = m.sid

  ANDm.request !=0

 ORDERBYid1, id2, m.request

--不存在锁请求,但是锁定的对象被其他会话请求锁定

SELECTsn.username,

      m.sid,

      sn.serial#,

      m.TYPE,

      decode(m.lmode,

             0,

             'None',

             1,

             'Null',

             2,

             'Row Share',

             3,

             'Row Excl.',

             4,

             'Share',

             5,

             'S/Row Excl.',

             6,

             'Exclusive',

             lmode,

             ltrim(to_char(lmode,'990'))) lmode,

      decode(m.request,

             0,

             'None',

             1,

             'Null',

             2,

             'Row Share',

             3,

             'Row Excl.',

             4,

             'Share',

             5,

             'S/Row Excl.',

             6,

             'Exclusive',

             request,

             ltrim(to_char(m.request,'990'))) request,

      m.id1,

      m.id2

 FROMv$session sn, v$lock m

 WHEREsn.sid = m.sid

  ANDm.request =0

  ANDm.lmode !=4

  AND(id1, id2)IN(SELECTs.id1, s.id2

                       FROMv$lock s

                      WHERErequest !=0

                        ANDs.id1 = m.id1

                        ANDs.id2 = m.id2)

 ORDERBYid1, id2, m.request

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值