Oracle数据库表被锁

 1、数据库表被锁的现象

     在操作数据库时,有的时候我们会很突然的遇到数据库报下面这个错误

[sql]  view plain copy
  1. ORA-00054: resource busy and acquire with NOWAIT specified  
     下面是从网上获取的对该问题的解析,供大家参考

     第一个可能的原因是在lock table 和select for update 的句子中有nowait关键字导致报错。nowait关键字的意思是当你要锁定某一资源时,如果该资源正被别的用户锁定则直接返回错误信息,而不是等待别的用户解锁。

    第二个原因是你执行了ddl语句并且这个ddl 无法获得需要的锁。


    2、表被锁的解决办法

     第一种办法是“治病”,采用如下方法可以解决眼前遇到的问题,既然表被锁,那么解锁就是了。 

[sql]  view plain copy
  1. SELECT a.username,decode(b.type,'TM','TABLE LOCK','TX','ROW LOCK',NULL) LOCK_LEVEL,  
  2.  c.owner,c.object_name,c.object_type,  
  3.  a.sid,a.serial#,a.terminal,a.machine,a.program,a.osuser  
  4. FROM v$session a,v$lock b,dba_objects c  
  5. WHERE b.sid = a.sid  
  6. AND b.id1 = c.object_id(+)  
  7. AND a.username is NOT Null;  
     找到被锁的表,执行以下语句解锁

[sql]  view plain copy
  1. alter system kill session 'sid,serial#';  
      以上方法是看病就医的办法,难保以后还回遇到这个问题,下面看看另一个办法。

     第二种办法是“治本”,这个办法是oracle_11g才适用的方法,

[sql]  view plain copy
  1. alter session set ddl_lock_timeout = 600;  
    或者

[sql]  view plain copy
  1. alter system set ddl_lock_timeout = 600;  
     这种方法是设置系统或会话的锁定时间。这个办法实际上也不是治本的方法,但是可以减少人工操作罢了,要想治本还是要求我们的开发人员和数据库使用人员在操作数据库的时候记得要commit。

Oracle数据库定通常是由于并发访问或事务操作导致的,这可能会阻止其他用户对进行读取或写入。以下是查询和解的基本步骤: 1. **查看定信息**: 使用SQL `SELECT * FROM v$session WHERE rownum = 1` 或 `DBA_LOCKS` 视图可以获取当前活动会话的信息,特别是检查哪些进程正在。如果想知道特定定情况,可以用: ```sql SELECT * FROM dba_objects WHERE object_name = 'YOUR_TABLE_NAME' AND lock_type != 'IMMEDIATE'; ``` 2. **确定定级别**: SQL中的`LOCKS`子句可以帮助分析定状态,例如 `SELECT * FROM YOUR_TABLE LOCK TABLE IN SHARE MODE` 就能看到共享(SH),而 `UPDATE ... FOR UPDATE` 可能持有行级排他(RX)。 3. **识别定原因**: 要判断是哪个事务或查询导致了定,需要检查相关的SQL历史记录或者跟踪视图如`V$SESSION_WAIT`, `V$LOCK` 等。 4. **尝试解**: 如果定是由某个具体的事务引起的,你可以尝试通过发出`UNLOCK TABLE YOUR_TABLE NOWAIT` 来强制解。但是请注意,`NOWAIT`选项会使请求立即返回,如果等待队列中有事务正在等待该,则可能会抛出异常。 5. **手动解**: 如果上述操作无效,可能需要手动干预事务来释放定。这通常涉及回滚事务或修改事务代码以避免长时间定。 6. **优化定策略**: 分析应用程序的定模式,确保合理的定粒度和适当的隔离级别设置,有助于减少定冲突。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值