oracle ora-00054:resource busy and acquire with nowait specified解决方法
当某个数据库用户在数据库中插入、更新、删除一个表的数据,或者增加一个表的主键时或者表的索引时,常常会出现ora-00054:resource busy and acquire with nowait specified这样的错误。
主要是因为有事务正在执行(或者事务已经被锁),所有导致执行不成功。
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 constraint PK_test primary key (test_NO);
若提示:ORA-00030: User session ID does not exist
alter session set events immediate trace name flush_cache level 1
后果不详
ORA-00031: session marked for kill
一些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
ORA-00031: session marked for kill
Cause: The session specified in an ALTER SYSTEM KILL SESSION command cannot be killed immediately (because it is rolling back or blocked on a network operation), but it has been marked for kill. This means it will be killed as soon as possible after its current uninterruptible operation is done.
Action: No action is required for the session to be killed, but further executions of the ALTER SYSTEM KILL SESSION command on this session may cause the session to be killed sooner.
kill -9 12345
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 oracle ora-00054:resource busy and acquire with nowait specified解决方法
相关文章
- ORA-13535: name (string) is already used by an existing baseline template ORACLE 报错 故障修复 远程处理
- 解决Oracle适配器错误:一种简单方法(oracle适配器错误)
- 使用Oracle实现数据去重(oracle中去重复)
- 利用 Oracle 触发器实现自动化处理(oracle触发器类型)
- 【Oracle】查看补丁的方法(oracle查看补丁)
- Oracle数据库的物理结构解析:表空间、数据文件与段的关系及优化方法。(oracle数据库物理结构)
- Oracle 字段名改变方法简介(oracle改变字段名)
- Oracle订单管理系统:轻松管理订单、提高效率(oracle订单)
- Oracle字符类型转换技巧大全,如何实现快速高效的字符类型转换方法?详解实用的转换语句及技巧,一文搞定Oracle字符类型转换!(oracle字符类型转换)
- 了解自连接查询在Oracle数据库中的应用方法(自连接查询oracle)
- Oracle 回滚空间:从未来看过去(oracle 回滚空间)
- Oracle全局索引:创建提高数据库性能的方法(oracle 全局索引)
- 用法Oracle IN 用法简介(oracle的in)
- 解决Oracle数据库IO错误的最佳方法(io错误oracle)
- 破解h2连接Oracle的方法(h2连接oracle)
- Oracle数据库中集合的功能介绍(oracle中集合介绍)
- Oracle中表追加列的简单方法(oracle中表追加列)
- Oracle数据库更改列名的大小写(oracle修改列大小写)
- Oracle如何实现修改主键个数(oracle修改主键个数)
- 所有行Oracle实现依次返回所有行的方法(oracle依次返回)
- Oracle中实现余数百分比计算的方法(oracle 余数百分比)
- 函数Oracle数据库下使用AVG函数的实践(oracle中查询avg)
- Oracle中提取中文数据的方法(oracle中提取中文)
- Oracle中高效实现除法的方法(oracle中如何做除法)
- Oracle起诉中国对未经许可使用软件的严重侵权(oracle 中国 起诉)
- Oracle数据库中符号的使用(oracle中 $作用)
- Oracle数据库中处理无效字符的方法(oracle中为无效字符)
- Oracle作业管理详情披露(oracle job明细)
- 解决Oracle错误代码00059的方法(oracle 00059)