加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

ORA-00054资源正忙,要求指定以nowait方式获取资源的解决过程

(2015-08-08 16:12:13)
标签:

ora-00054

ora-00054资源正忙

ora-00054报错解决

ora-00054错误详解

oracle错误解决处理

分类: Oracle数据库
       在ORACLE数据操作处理过程中,进程会遇到资源发生锁定或死锁的情况,一般情况都是由于在执行数据更新、删除、插入时,没有提交操作,而其他资源又在使用该表资源时就是报死锁的错误。那针对这种情况如何处理呢?下面将针对出现死锁情况后的处理做详细的说明。

一、错误描述
中文:ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源
英文:ORA-00054: resource busy and acquire with nowait specified

二、解决方法
1、以DBA权限用户登录,用下列语句找出所有被锁定的对象,定位出哪个回话占用着资源,可以看到是那个用户,操作系统登录名称,操作时间等详细信息
select l.session_id,o.owner,o.object_name,l.oracle_username,l.os_user_name,o.last_ddl_time
from gv$locked_object l,dba_objects o
where l.object_id=o.object_id;

结果:
session_id owner     object_name          oracle_username         os_user_name        last_ddl_time
---------- -------- -------------------- ------------------------ ------------------- ------------------
158        sa        test_1               test01                   hyy_win8           2013-8-24 11:59:25
146        sa        test_1               test02                   xjj_win8           2016-3-4 18:06:46

说明:查询当前被锁定资源的情况,定位哪些会话需要被删除。

2、找出所有造成锁定的会话
select t2.sid,t2.serial#,t1.oracle_username,t1.os_user_name,t2.logon_time,t2.status,t2.terminal,
       t2.machine,t2.osuser,t2.program,t2.type,t2.sql_exec_start,
'alter system kill session '''||t2.sid||','||t2.serial#||''';' as kill_command
from gv$locked_object t1,gv$session t2
where t1.session_id=t2.sid 
order by t2.logon_time;

结果:
      SID    SERIAL# ORACLE_USERNAME                OS_USER_NAME                   LOGON_TIME  STATUS   TERMINAL                       MACHINE                                                          OSUSER                         PROGRAM                                          TYPE       SQL_EXEC_START
---------- ---------- ------------------------------ ------------------------------ ----------- -------- ------------------------------ ---------------------------------------------------------------- ------------------------------ ------------------------------------------------ ---------- --------------
      1201      25100 test_db                          oracle                         2018-7-2 9: ACTIVE                                  rac1                                                             oracle                         sqlplus@rac1 (TNS V1-V3)                         USER       2018-7-2 11:18


3、kill 所有占用资源的会话
命令形式:alter system kill session 'sid,serial#';
杀掉占用test_1的资源的会话:

alter system kill session '158,15184';
alter system kill session '146,8229';

4、如果数据库级杀不掉,需要到服务器上杀掉进程
--查看进程号
select b.spid,a.osuser,b.program
  from gv$session a,gv$process b
 where a.paddr=b.addr
   and a.sid=158;

--登录服务器,查看是否存在相关进程号
ps -ef|grep spid
--使用root用户杀掉进程
kill -9 spid


本文参考网络资料,在ORACLE报该错误时,通过实际应用总结而来。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有