现象:

    执行update、truncate提示 ORA-00054: resource busy and acquire with NOWAIT specified.

解决方法:

    因为系统是RAC系统,当时在第一个node没有查询到锁状态,查看第二台时候才看到锁的信息

1.查询数据库中的锁

  select * from v$lock;
  select * from v$lock where block=1;

2.查询被锁的对象

  select * from v$locked_object;

3.查询阻塞

  查被阻塞的会话
  select * from v$lock where lmode=0 and type in ('TM','TX');

  查阻塞别的会话锁
  select * from v$lock where lmode>0 and type in ('TM','TX');

4.查询数据库正在等待锁的进程

  select * from v$session where lockwait is not null;

5.查询会话之间锁等待的关系

  select a.sid holdsid,b.sid waitsid,a.type,a.id1,a.id2,a.ctime from v$lock a,v$lock b where a.id1=b.id1 and a.id2=b.id2 and a.block=1 and b.block=0;

6.查询锁等待事件
  select * from v$session_wait where event='enqueue';

解决方案:

1)首先得到被锁对象的session_id
  select session_id from v$locked_object;

2)通过上面得到的session_id去取得v$session的sid和serial#,然后对该进程进行终止。
  SELECT sid, serial#, username, osuser FROM v$session where sid = session_id;
  ALTER SYSTEM KILL SESSION 'sid,serial';
example:

SQL> select session_id from v$locked_object;

SESSION_ID
----------
1383
1503
1503

SQL> SELECT sid, serial#, username, osuser FROM v$session where sid = 1383;

SID    SERIAL# USERNAME   OSUSER

---------- ---------- ------------     ---------------

1383      34768     CRMS         oracle

SQL>ALTER SYSTEM KILL SESSION '1383,34768';

一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库。现在提供一种方法解决这种问题,那就是在ORACLE中杀不掉的,在OS一级再杀。

1.下面的语句用来查询哪些对象被锁:

select object_name,machine,s.sid,s.serial# 
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;

2.下面的语句用来杀死一个进程:
alter system kill session '24,111'; (其中24,111分别是上面查询出的sid,serial#)

以上两步,可以通过Oracle的管理控制台来执行。

3.如果利用上面的命令杀死一个进程后,进程状态被置为"killed",但是锁定的资源很长时间没有被释放,那么可以在os一级再杀死相应的进程(线程),首先执行下面的语句获得进程(线程)号:
select spid, osuser, s.program 
from v$session s,v$process p
where s.paddr=p.addr and s.sid=24 (24是上面的sid)

4.在OS上杀死这个进程(线程):
1)在unix上,用root身份执行命令: 
#kill -9 12345(即第3步查询出的spid)
2)在windows(unix也适用)用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:
orakill sid thread
其中:
sid:表示要杀死的进程属于的实例名
thread:是要杀掉的线程号,即第3步查询出的spid。
例:c:>orakill orcl 12345

------------------------------------------------------------------------------------

通过sessionid获取当前执行的sql语句:

select
substr(s.username,1,18) username,
s.sid,s.serial#,s.machine,y.sql_text
from v$session s,v$process p,v$transaction t,v$rollstat r,v$rollname n,v$sql y
where s.paddr = p.addr
and s.taddr = t.addr (+)
and t.xidusn = r.usn (+)
and r.usn = n.usn (+)
and s.username is not null
and s.sql_address=y.address
--and s.sid=
order by s.sid,s.serial#,s.username,s.status;

ORA-00054 资源正忙的更多相关文章

  1. Oracle解锁,解决“ora00054:资源正忙”错误

    Oracle解锁,解决“ora00054:资源正忙”错误 一.处理步骤:--1.获取被锁对象的session_idSELECT session_id FROM v$locked_object; --2 ...

  2. oracle报错:ORA-00054: 资源正忙,要求指定 NOWAIT

    ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源: --首先得到被锁对象的session_idselect session_id from v$locked_object; -- ...

  3. oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT

    oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT 问题如下: SQL> conn scott/tiger@vm_database Connected to Oracle ...

  4. Oracle中修改表名遇到“ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效”

    Oracle 11g中想修改表名: rename ASSETPORJECT to ASSETPROJECT; 结果提示:ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超 ...

  5. Oracle报 ORA-00054资源正忙的解决办法

    来源于:http://www.cnblogs.com/loveLearning/p/3625544.html oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT 问题如下: S ...

  6. 解决ORA-00054资源正忙的问题

    有时候在drop表或者其他对象的时候,会遇到ORA-00054:资源正忙,要求指定NOWAIT(中文字符集)或者ORA-00054: resource busy and acquire with NO ...

  7. oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT_数据库的几种锁

    问题如下: SQL> conn scott/tiger@vm_databaseConnected to Oracle Database 11g Enterprise Edition Releas ...

  8. ORA-00054:资源正忙,要求指定NOWAIT

    --ORA-00054:资源正忙,要求指定NOWAIT-- --以DBA角色, 查看当前数据库里锁的情况可以用如下SQL语句-- SELECT sid, serial#, username, osus ...

  9. Oracle提示“资源正忙,需指定nowait”的解决方案

    Oracle提示“资源正忙,需指定nowait”的解决方案  | T 本文我们主要介绍了Oracle数据库操作表时提示“资源正忙,需指定nowait”的解决方案,希望能够对您有所帮助. AD:51CT ...

  10. SQL记录-资源正忙online或nowait

    1.多个tomcat 修改3个端口 2.oracle-00054:资源正忙 被锁住了 建立索引加online参数 1:创建索引时会产生的锁 2:dml 语句会产生的锁 3:索引创建时加上关键字 onl ...

随机推荐

  1. HTML+Javascript制作拼图小游戏详解(二)

    上一篇我们说了网页的基本布局.接下来将为大家带来具体的实现方法. 拼图通表格来实现,做一个方形的表格,改变其大小使之如图所示. 试想一下如果我们将一张图片剪成6张分别放入对应位置,然后再把它打乱,这样 ...

  2. POJ 2385

    #include <algorithm> #include <cstdlib> #include <numeric> #include <iostream&g ...

  3. android权限permission大全(权限提醒)

    1.Android.permission.WRITE_USER_DICTIONARY允许应用程序向用户词典中写入新词 2.android.permission.WRITE_SYNC_SETTINGS写 ...

  4. Liunx安装Git

    环境:CentOS 6.5 min 安装git yum -y install gcc curl curl-devel zlib-devel openssl-devel perl cpio expat- ...

  5. 自然语言处理--TF-IDF(关键词提取)

    TF-IDF算法 TF-IDF(词频-逆文档频率)算法是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度.字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它 ...

  6. redis 安装 与错误解决办法

    redis 安装与安装中遇到的错误 redis 安装 wget http://download.redis.io/releases/redis-4.0.11.tar.gz .tar.gz cd red ...

  7. springcloud-05-ribbon中不使用eureka

    ribbon在有eureka的情况下, 可以不使用eureka, 挺简单, 直接上代码 application.xml server: port: spring: # 设置eureka中注册的名称, ...

  8. crontab的用法

    转载于:点击打开链接   cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业. 由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动.关闭这个服务: / ...

  9. php的304方式

    一般浏览器请求php是不会被缓存的,除非php直接显示的发送head 304 if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { $browserCache ...

  10. CentOS install搭建SVN服务器

    安装步骤如下: 1.命令:yum install subversion 之后会打印很多消息,显示 Complete! 则完成. 2.查看 svn 版本:svnserve --version 3.创建S ...