博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORA-00054 资源正忙 "resource busy and acquire with NOWAIT specified"错误
阅读量:5036 次
发布时间:2019-06-12

本文共 1276 字,大约阅读时间需要 4 分钟。

ORA-00054 资源正忙 "resource busy and acquire with NOWAIT specified"错误 [oracle@mlab2 data]$ oerr ora 00054 00054, 00000, "resource busy and acquire with NOWAIT specified or timeout expired" // *Cause: Interested resource is busy. // *Action: Retry if necessary or increase timeout.   引起该错误的常见原因是: 所需要的资源正忙或者参数DDL_LOCK_TIMEOUT(11g)指定的DDL锁超时指标被达到,注意在11g之前默认情况下DDL语句以NOWAIT形式出现 对于该错误的建议是 稍后重试SQL命令语句,推荐是在业务空闲时期执行,或者指定更大的DD_LOCK_TIMEOUT,或者不要使用显示的NOWAIT子句   关于该ORA-00054错误的详细说明: 在绝大多数情况下ORA-00054都是最常见不过的报错信息,常在SQL语句被其他用户的工作阻塞时出现,该被阻塞的SQL命令存在2种可能: 在语句中指定了"NOWAIT"子句,因此该语句将不被阻塞等待,而直接报错即ORA-00054错误 语句本身是DDL,在11g之前或者DDL_LOCK_TIMEOUT=0,该DDL语句直接返回ORA-54错误 简而言之 DDL或 SELECT .. FOR UPDATE NOWAIT都可能因为存在不兼容的锁模式而遇到ORA-54错误   相关的诊断步骤: 该ORA-00054错误一般不需要特别去诊断,除非他频繁影响应用正常运作或者意外出现。 最简单的我们可以通过该语句本身去定位哪些对象(主要是TABLE)被以其他进程以不兼容的模式锁住。 对于重复执行的DDL语句,若采用PL/SQL存储过程DBMS_SQL来调用则可以由于本PL/SQL程序块的一些依赖关系导致该DDL访问的对象被锁。 对于SELECT FOR UPDATE语句,可以尝试去掉其NOWAIT子句来检查该语句如何被阻塞。 若存在阻塞可以通过V$LOCk检测阻塞情况,例如: SELECT * FROM V$LOCK WHERE request!=0; --找出被阻塞的进程   也可以直接参考更高效的语句 DIAG LOCK:   其次有必要检查一些,是否外键列都有了必要的索引?(这可能导致额外的表锁,虽然在10g以后得到优化) 若是SELECT ... FOR UPDATE引起的锁,是否有把2表连接(JOIN)的操作?这样可能导致父和子行都被锁住,若仅仅想锁住child row,则需要加入以下子句: FOR UPDATE OF COLUMN_ON_CHILD_TABLE      

转载于:https://www.cnblogs.com/macleanoracle/archive/2013/03/19/2968050.html

你可能感兴趣的文章
Oracle数据库的增、删、改、查
查看>>
阿里市值超越亚马逊 马云开启下半场技术理想
查看>>
MySql执行分析
查看>>
git使用中的问题
查看>>
yaml文件 .yml
查看>>
linux字符集修改
查看>>
phpcms 添加自定义表单 留言
查看>>
mysql 优化
查看>>
读书笔记 ~ Nmap渗透测试指南
查看>>
WCF 配置文件
查看>>
动态调用WCF服务
查看>>
oracle导出/导入 expdp/impdp
查看>>
类指针
查看>>
css修改滚动条样式
查看>>
2018.11.15 Nginx服务器的使用
查看>>
Kinect人机交互开发实践
查看>>
百度编辑器UEditor ASP.NET示例Demo 分类: ASP.NET...
查看>>
JAVA 技术类分享(二)
查看>>
android客户端向服务器发送请求中文乱码的问
查看>>
UOJ#220. 【NOI2016】网格 Tarjan
查看>>