zoukankan      html  css  js  c++  java
  • ORA-00054:resource busy and acquire with NOWAIT specified or timeout expired(锁表解决方法)

    一、故障描述:

      在数据库中插入、更新、删除一个表的数据,或者增加一个表的主键时或者表的索引时,或者是增加修改列字段时时,报错: ORA-00054:resource busy and acquire with NOWAIT specified or timeout expired,如下图。按照字面意思,是资源忙,被占用了。处理思路:查到谁在占用资源,并且杀掉占用该资源的会话就可以了。有可能产生的原因有:1.创建索引时会产生的锁  2.dml 语句会产生的锁  3.索引创建时加上关键字 online时产生的锁。解决处理方法:1.等待其他会话释放资源 2.找出占用资源的会话,并删除 3.重启数据库,当然只有第2种比较适用。

    pl-sql中报错如图:

    解决方法如下:
    1、用dba权限的用户查看数据库都有哪些锁

    SELECT T2.USERNAME,T2.SID,T2.SERIAL#,T2.LOGON_TIME
    FROM V$LOCKED_OBJECT T1,V$SESSION T2
    WHERE T1.SESSION_ID=T2.SID ORDER BY T2.LOGON_TIME;

    如:testuser 339 13545 2009-3-5 17:40:05
    知道被锁的用户testuser,sid为339,serial#为13545

    2、根据sid查看具体的sql语句,如果sql不重要可以跳过,直接kill

    SELECT SQL_TEXT FROM V$SESSION A,V$SQLTEXT_WITH_NEWLINES B
    WHERE DECODE(A.SQL_HASH_VALUE, 0, PREV_HASH_VALUE, SQL_HASH_VALUE)=B.HASH_VALUE
    AND A.SID=&SID ORDER BY PIECE;

    查出来的sql,如: BEGIN :ID := SYS.DBMS_TRANSACTION.LOCAL_TRANSACTION_ID; END;

    3、kill该事务(释放锁)
    ALTER SYSTEM KILL SESSION '339,13545';

    4、这样就可以执行其他的事务sql语句了

     如给表加一列:     
    ALTER TABLE TEST ADD ORG_NAME VARCHAR2(50)

  • 相关阅读:
    NUTCH Exception in thread "Thread-12751" java.lang.OutOfMemoryError: PermGen space
    未登录词识别
    中文分词索引
    hadoop 存储空间满了
    nutch 生产者队列的大小如何控制 threadcount * 50
    nutch 采集到的数据与实际不符
    nutch 采集效率--设置采集间隔
    异常: http://www.ly.com/news/visa.html: java.io.IOException: unzipBestEffort returned null
    hbase 取多个版本数据
    JavaScript制作时钟特效
  • 原文地址:https://www.cnblogs.com/js2ja/p/11882667.html
Copyright © 2011-2022 走看看