共計 2524 個字符,預計需要花費 7 分鐘才能閱讀完成。
這篇文章主要介紹了 Oracle 出現 ORA-00054 錯誤怎么辦,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
在進行數據庫維護的過程中要刪除一個中間表,遇到如下錯誤:
sys@DW drop table dwods.member_DELTA;
drop table dwods.member_DELTA
*
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
發現表因為執行 dml 被鎖住,下面給出錯誤的處理思路和過程,具體情況而異:
1 查看被數據庫中被鎖的用戶信息:
sys@DW select t2.username,t2.sid,t2.serial#,t2.logon_time
2 from v$locked_object t1,v$session t2
3 where t1.session_id=t2.sid order by t2.logon_time;
USERNAME SID SERIAL# LOGON_TIME
—————————— ———- ———- ——————-
DWODS 1520 42477 2011-11-17 18:00:40
DWODS 1594 7385 2011-11-17 18:41:27
dwods 被鎖住,因為事務是 18:41 分發起的,所以查看一下 sid 為 1594 的信息,
2 查詢出 sql 信息根據實際情況,進行操作
sys@DW select sql_text from v$session a,v$sqltext_with_newlines b
2 where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash_value
3 and a.sid= sid order by piece;
Enter value for sid: 1594
old 3: and a.sid= sid order by piece
new 3: and a.sid=1594 order by piece
SQL_TEXT
—————————————————————-
insert /*+ append +*/ into DWODS.MEMBER_delta (ACTION,
ADDRESS,
……..
32 rows selected.
正是發起的那個語句,查看用戶的信息進行確認
sys@DW @user_info
Enter value for sid: 1594
old 12: where a.sid = sid
new 12: where a.sid = 1594
USERNAME SID SERIAL# OS Process Logon time OSUSER PROGRAM STATUS
——— —– ——- —————————– ——– ———————– ———–
DWODS 1594 7385 3309 17/11/2011 18:41:27 etl sqlplus@dw1 (TNS V1-V3) ACTIVE
1 row selected.
3 選擇 kill 掉進程
這里知道此 session 可以殺掉,所以殺掉此 session
sys@DW alter system kill session 1594,7385
System altered.
4 進行確認:
在數據庫確認
sys@DW @user_info
Enter value for sid: 1594
old 12: where a.sid = sid
new 12: where a.sid = 1594
no rows selected
sys@DW select t2.username,t2.sid,t2.serial#,t2.logon_time
2 from v$locked_object t1,v$session t2
3 where t1.session_id=t2.sid order by t2.logon_time;
USERNAME SID SERIAL# LOGON_TIME
————— ——- ——- ——————-
DWODS 1520 42477 2011-11-17 18:00:40
DWODS 1520 42477 2011-11-17 18:00:40
2 rows selected.
在 os 層確認,進程已經被殺。
oracle@dw1:/home/oracle ps -ef | grep 3309
oracle 22565 18543 0 18:59 pts/5 00:00:00 grep 3309
再次執行刪除表的操作:
sys@DW drop table dwods.member_DELTA;
Table dropped.
—— 附上:
user_info。sql 腳本的內容:
select
a.username,
a.sid,
a.serial#,
b.spid OS Process ,
to_char(a.logon_time, DD/MM/YYYY hh34:mi:ss) Logon time ,
a.osuser,
a.program,
a.status
from v$session a, v$process b
where a.sid = sid
and a.paddr = b.addr
/
感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“Oracle 出現 ORA-00054 錯誤怎么辦”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!