Oracle 查看 对象 持有锁的情况

本文提供了一种通过使用SQL查询系统中对象锁情况的方法来解决Oracle数据库中表加字段时出现ORA-00054错误的问题。具体步骤包括使用特定SQL语句查看锁状态,并根据查询结果处理锁定的会话,从而释放锁并允许修改表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

同事在测试库上对一个表加字段,提示 ORA-00054, 资源忙。 应该是表对象的锁没有释放。

 

用如下SQL 查看一下系统中相关对象上锁的情况:

 

 

  1.   
  2. SELECT S.SIDSESSION_ID,  
  3.        S.USERNAME,  
  4.        DECODE (LMODE,  
  5.                0, None ' 
  6.                1, Null ' 
  7.                2, Row-S(SS) ' 
  8.                3, Row-X(SX) ' 
  9.                4, Share' 
  10.                5, 'S/Row-X (SSX) ' 
  11.                6, 'Exclusive ' 
  12.                TO_CHAR (LMODE))  
  13.           MODE_HELD,  
  14.        DECODE (REQUEST,  
  15.                0, None ' 
  16.                1, Null ' 
  17.                2, Row-S(SS) ' 
  18.                3, Row-X(SX) ' 
  19.                4, Share' 
  20.                5, 'S/Row-X (SSX) ' 
  21.                6, 'Exclusive ' 
  22.                TO_CHAR (REQUEST))  
  23.          MODE_REQUESTED,  
  24.        O.OWNER|| ' || O.OBJECT_NAME||  ' || O.OBJECT_TYPE|| ' as OBJECT_NAME,  
  25.        S.TYPELOCK_TYPE,  
  26.        L.ID1LOCK_ID1,  
  27.        L.ID2LOCK_ID2  
  28.   FROMV$LOCK L, SYS.DBA_OBJECTSO,V$SESSION  
  29.  WHERE L.SID S.SID AND L.ID1 O.OBJECT_ID  


 

 


该SQL 显示所有对象上的锁,如果要查某个具体的对象,可以根据OBJECT_NAME 字段进行一下过滤,找到对应的SID 之后去查V$SESSION 视图。

 

该视图会显示session 对应的信息,包括终端的信息,如果找到了终端,可以让它提交或者回滚一下就OK了。我这里是测试环境,直接把session kill 掉了。然后修改表就ok了。

 

 

  1. SQL>alter system kill session 'SID,SERIAL#'  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值