• ORACLE中ORA00054: 资源正忙, 但指定以 NOWAIT 方式获取资源的解决方法


    同时对一个表操作,update,truncate 等操作,会造成此错误,另外,事物没有提交,从而进行其他操作也有可能会造成此异常。

    ORA-00054 resource busy and acquire with NOWAIT specified

    Cause: The NOWAIT keyword forced a return to the command prompt because a resource was unavailable for a LOCK TABLE or SELECT FOR UPDATE command.

    Action: Try the command after a few minutes or enter the command without the NOWAIT keyword.

    原因:对表进行相关操作时,该表被锁定,或表正在被其他程序占用,导致系统忙。

    解决:对表解锁或等待完成。


    比如当我修改表的某一记录时候,没有commit,并又去修改表结构,则会触发此异常。

    异常信息: ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源

    异常demo:

    Let's try to produce the problem in our development environment. I have opened two session that connected to database under a schema. In one session, I have created a table and inserted data into it.


    SQL> create table a (a number);
    内陆运输
    Table created.

    SQL> insert into a values(1);

    1 row created.

    I did not yet committed data in session 1. Now in another session whenever I try to any ddl like (alter table, drop table) ORA-00054 will produce.

    In another session,
    SQL> alter table a add b number;
    alter table a add b number
    *
    ERROR at line 1:
    ORA-00054: resource busy and acquire with NOWAIT specified


    SQL> drop table a;
    drop table a
    *
    ERROR at line 1:
    ORA-00054: resource busy and acquire with NOWAIT specified

    SQL> lock table a in exclusive mode nowait;
    lock table a in exclusive mode nowait
    *
    ERROR at line 1:
    ORA-00054: resource busy and acquire with NOWAIT specified


    Cause of the Problem
    Whenever you try to do any structural changes on a table oracle try to lock the table exclusively with NOWAIT option(this is in 10.2g while in 11g you can change the wait timeout). If oracle fails to lock the table exclusively then ORA-00054 will occur.

    Solution of the Problem
    In 10.2g you are limited to several choices to solve the problem. To avoid it,

    -Re run the DDL at a later time when the database become idle.
    or,

    -Kill the sessions that are preventing the exclusive lock.
    or,

    -Prevent end user to connect to the database and then run the DDL.

    You have different views to see locking information about the table.女装品牌排行榜
    1)DBA_BLOCKERS: Displays a session if it is not waiting for a locked object but is holding a lock on an object for which another session is waiting. In our scenario this view will not help.

    2)DBA_DDL_LOCKS: It lists all DDL locks held in the database and all outstanding requests for a DDL lock.

    3)DBA_DML_LOCKS: It lists all DML locks held in the database and all outstanding requests for a DML lock.
    If you query from it in the mode_held field you will see 'row exclusive lock'.
    SQL> select mode_held from dba_dml_locks where owner='MAXIMSG';

    MODE_HELD
    -------------
    Row-X (SX)

    4)DBA_LOCK: It lists all locks or latches held in the database, and all outstanding requests for a lock or latch.

    5)DBA_LOCK_INTERNAL: It displays a row for each lock or latch that is being held, and one row for each outstanding request for a lock or latch.

    6)DBA_LOCKS is a synonym for DBA_LOCK.

    7)DBA_WAITERS: Shows all the sessions that are waiting for a lock.

    In order to see locked object query,

  • 相关阅读:
    当你不知道今天星期几,不妨在编辑器写下这段代码
    自定义注解!绝对是程序员装逼的利器!!
    什么是可串行化MVCC
    Jetpack新成员,一篇文章带你玩转Hilt和依赖注入
    连接真机开发安卓(Android)移动app MUI框架 添加购物车等——混合式开发(四)
    从前世今生聊一聊,大厂为啥亲睐时序数据库
    工作五年,面试官说我只会CRUD!竟然只给我10K!
    bootstrap知识总结
    数据处理的两个基本问题05 零基础入门学习汇编语言42
    转移指令的原理02 零基础入门学习汇编语言44
  • 原文地址:https://www.cnblogs.com/sky7034/p/2133304.html
Copyright © 2020-2023  润新知