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)

  • 相关阅读:
    Linux下新建服务
    查看MYSQL日志(包含最近锁表日志)
    Linux后台运行进程
    MYSQL分析慢查询
    Linux下打开超大文件方法
    通过文件列表打包文件
    linux学习笔记<基本知识普及>
    虚拟机的安装
    Android NDK编程,引入第三方.so库
    linux下软件安装与卸载
  • 原文地址:https://www.cnblogs.com/js2ja/p/11882667.html
Copyright © 2011-2022 走看看