oracle ora-00054:resource busy and acquire with nowait specified解決方法
當某個數(shù)據(jù)庫用戶在數(shù)據(jù)庫中插入、更新、刪除一個表的數(shù)據(jù),或者增加一個表的主鍵時或者表的索引時,常常會出現(xiàn)ora-00054:resource busy and acquire with nowait specified這樣的錯誤。
主要是因為有事務正在執(zhí)行(或者事務已經(jīng)被鎖),所有導致執(zhí)行不成功。
1、用dba權限的用戶查看數(shù)據(jù)庫都有哪些鎖
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、根據(jù)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、這樣就可以執(zhí)行其他的事務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中的進程被殺掉后,狀態(tài)被置為"killed",但是鎖定的資源很長時間不釋放,有時實在沒辦法,只好重啟數(shù)據(jù)庫。現(xiàn)在提供一種方法解決這種問題,那就是在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的管理控制臺來執(zhí)行。
3.如果利用上面的命令殺死一個進程后,進程狀態(tài)被置為"killed",但是鎖定的資源很長時間沒有被釋放,那么可以在os一級再殺死相應的進程(線程),首先執(zhí)行下面的語句獲得進程(線程)號:
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身份執(zhí)行命令:
#kill -9 12345(即第3步查詢出的spid)
2)在windows(unix也適用)用orakill殺死線程,orakill是oracle提供的一個可執(zhí)行命令,語法為:
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
相關文章
plsql連接oracle數(shù)據(jù)庫報ora 12154錯誤解決方法
今天遇到一個問題,plsql連接oracle數(shù)據(jù)庫報ora 12154錯誤,本文將為您詳細介紹此等問題的解決方法2012-11-11
PLSQL創(chuàng)建新用戶并導入導出.dmp文件全過程
plsql導入.sql和.dmp文件時會經(jīng)常用到,對于初學者來說可能沒有那么簡單,畢竟oracle數(shù)據(jù)庫比較麻煩,這篇文章主要給大家介紹了關于PLSQL創(chuàng)建新用戶并導入導出.dmp文件的相關資料,需要的朋友可以參考下2023-11-11
oracle 存儲過程和觸發(fā)器復制數(shù)據(jù)
oracle 存儲過程和觸發(fā)器復制數(shù)據(jù)的代碼,需要的朋友可以參考下。2009-11-11
Maven中央倉庫正式成為Oracle官方JDBC驅動程序組件分發(fā)中心(推薦)
這篇文章主要介紹了Maven中央倉庫正式成為Oracle官方JDBC驅動程序組件分發(fā)中心,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
Oracle數(shù)據(jù)庫優(yōu)化策略總結篇
本文介紹了一些很實用但卻不是很常見的Oracle數(shù)據(jù)庫的優(yōu)化策略,包括批量FETCH、SQL預解析等,需要的朋友可以參考下2015-08-08
Oracle實現(xiàn)查詢2個日期所跨過的月份列表/日期列表的方法分析
這篇文章主要介紹了Oracle實現(xiàn)查詢2個日期所跨過的月份列表/日期列表的方法,結合實例形式分析了Oracle日期相關查詢與運算相關操作技巧,需要的朋友可以參考下2019-09-09

