PLSQL_Oracle Table Lock表级锁的处理(案例)

20150506 Created By BaoXinjian

一、摘要


当某个数据库用户在数据库中插入、更新、删除一个表的数据,或者增加一个表的主键时或者表的索引时,常常会出现ora-00054:resource busy and acquire with nowait specified这样的错误。

主要是因为有事务正在执行(或者事务已经被锁),所有导致执行不成功。

 

二、模拟表级锁产生


Step1. 在一个session中对表bxj_regions做更新操作

Step2. 在另外一个session对该表进行Truncate操作后,该表因为被锁住,会产生相应Error

 

三、处理表级锁过程


Step1. 查看数据库中哪些对象处在被锁状态 

select t2.username, t2.sid, t2.serial#, t2.logon_time, t3.owner, t3.object_name, t3.object_type
  from v$locked_object t1, v$session t2, dba_objects t3
 where t1.session_id = t2.sid and t1.object_id = t3.object_id order by t2.logon_time;

Step2. 根据sid, 查看该session所运行的sql语句 

select a.username, a.sid, a.serial#, b.sql_text
  from gv$session a, gv$sqltext b
 where a.sql_address = b.address and a.sid = 23 and a.inst_id = 1 order by b.piece

Step3. 根据sid,查看该session是由哪个用户发起的 

select a.username,
       a.inst_id,
       a.sid,
       a.serial#,
       b.spid "OS Process",
       to_char(a.logon_time,'DD/MM/YYYY hh24:mi:ss'), a.command, a.osuser, a.program, a.module, a.status from gv$session a, gv$process b where a.inst_id = 1 and a.sid = 23 and a.paddr = b.addr and a.inst_id = b.inst_id

Step4. 如果确认该session可以进行删除, 则kill session, 若时间操作过久,对象被锁住太长

alter system disconnect '23,45832'  immediate;

 

Thanks and Regards


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值