ORA-00054 故障處理一例
--************************
-- ORA-00054 故障處理一例
--************************
最近index job出現失敗,於是嘗試手動執行試試。收到了ORA-00054的錯誤訊息。
一、錯誤訊息
SQL> ALTER INDEX ESMDBA.ESM_PRCS_ERR_IDX1 rebuild;
ALTER INDEX ESMDBA.ESM_PRCS_ERR_IDX1 rebuild
*
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified
二、查看當前數據庫中當前鎖定對象
SQL> col OBJECT_NAME for a30
SQL> col username format a20
SQL> set linesize 200
SELECT object_name, s.username, s.sid, s.serial#, p.spid, to_char(s.logon_time,'yyyy-mm-dd hh24:mi:ss') logon_time
FROM v$locked_object l, dba_objects o, v$session s, v$process p
WHERE l.object_id = o.object_id
AND l.session_id = sSQL> 2 3 .sid
AND s.paddr = p.addr; 4 5
OBJECT_NAME USERNAME SID SERIAL# SPID LOGON_TIME
------------------------------ -------------------- ---------- ---------- ------------ -------------------
PLAN_TABLE A505995 622 15849 26577 2011-06-08 03:04:30
ESM_PRCS_ERR SMEVFP 396 60589 8388 2011-06-11 18:24:51
VNDR_FEED_SCHED SMEVFP 467 15860 3119 2011-06-11 22:30:48
BB_RF_VNDR_FEED_RCRD SMEVFP 467 15860 3119 2011-06-11 22:30:48
BB_RF_VNDR_REPSTRY SMEVFP 773 1079 8440 2011-06-11 18:24:55
BB_RF_VNDR_FEED_RCRD_DATA SMEVFP 467 15860 3119 2011-06-11 22:30:48
BB_RF_VNDR_FEED_RCRD_DATA SMEVFP 467 15860 3119 2011-06-11 22:30:48
7 rows selected.
三、查看錶對象上資訊
SQL> select OWNER,INDEX_NAME,TABLE_NAME,INDEX_TYPE from dba_indexes where INDEX_NAME like '%ESM_PRCS_ERR_IDX1%';
OWNER INDEX_NAME TABLE_NAME INDEX_TYPE
------------------------------ ------------------------------ ------------------------------ ---------------------
ESMDBA ESM_PRCS_ERR_IDX1 ESM_PRCS_ERR NORMAL
SQL> SELECT sql_text
2 FROM v$session, v$sqltext_with_newlines
3 WHERE decode(v$session.sql_hash_value, 0, prev_hash_value, sql_hash_value) =
v$sqltext_with_newlines.hash_value
AND v$session.sid = &sid
ORDER BY piece;
4 5 6 Enter value for sid: 396
old 5: AND v$session.sid = &sid
new 5: AND v$session.sid = 396
SQL_TEXT
----------------------------------------------------------------
SELECT ERR_OID, MQ_MSGE FROM ESM_PRCS_ERR WHERE ERR_OID = :1 FOR
UPDATE NOWAIT
四、進一步嘗試
事實上此時做任何表結構的操作與分析都將會收到ORA-00054錯誤
SQL> analyze table ESMDBA.ESM_PRCS_ERR validate structure;
analyze table ESMDBA.ESM_PRCS_ERR validate structure
*
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified
SQL> analyze index ESMDBA.ESM_PRCS_ERR_IDX1 validate structure;
analyze index ESMDBA.ESM_PRCS_ERR_IDX1 validate structure
*
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified
五、殺掉鎖定的會話
SQL> alter system kill session '396,60589';
System altered.
SQL> alter session set current_schema=ESMDBA;
Session altered.
SQL> show parameter db_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string O01GRS3
SQL> ALTER INDEX ESMDBA.ESM_PRCS_ERR_IDX1 rebuild;
Index altered.
六、原因
1.select for update
select for update是用於數據併發控制的語句。執行該語句後,會在表上加持RX鎖(Row Exclusive,10gR1之前是Row Share鎖),
在被選中記錄上加行鎖。但是,正是因為其加鎖的操作,for update子句會導致select查詢的效能下降。
2.關於select for update與select for update nowait
當使用 select for update 的時候,其他會話上與之相關的DML,DDL都會被掛起,直到會話select for update的鎖定被解除。
當使用 select for update nowait 的時,其他會話上與之相關的DML,DDL都會被掛起不再是掛起,是直接返回一個資源忙的錯誤。
3.結論
無論是使用select ... for update 還是使用 select ... for update nowait。都會對相關的行集進行鎖定,其他會話進行相關
行集的寫操作都會被掛起,直到該鎖定被解除。所以,在使用了select ... for update或者 select ... for update nowait 後,要
盡快解除鎖定,避免其他會話掛起太久,從而導致系統效能下降。
七、 快捷參考
有關效能優化請參考
有關ORACLE體系結構請參考
Oracle 聯機重做日誌檔案(ONLINE LOG FILE)
Oracle 實例和Oracle數據庫(Oracle體系結構)
有關閃回特性請參考
Oracle 閃回特性(FLASHBACK DATABASE)
Oracle 閃回特性(FLASHBACK DROP & RECYCLEBIN)
Oracle 閃回特性(Flashback Query、Flashback Table)
Oracle 閃回特性(Flashback Version、Flashback Transaction)
有關基於用戶管理的備份和備份恢復的概念請參考
Oracle 基於用戶管理恢復的處理(詳細描述了介質恢復及其處理)
有關RMAN的備份恢復與管理請參考
RMAN 備份路徑困惑(使用plus archivelog時)
有關ORACLE故障請參考
對引數FAST_START_MTTR_TARGET = 0 的誤解及設定
有關ASM請參考
有關SQL/PLSQL請參考
SQL 基礎--> 集合運算(UNION 與UNION ALL)
SQL 基礎--> 層次化查詢(START BY ... CONNECT BY PRIOR)
SQL 基礎--> ROLLUP與CUBE運算符實現數據彙總
有關ORACLE其它特性
使用OEM,SQL*Plus,iSQL*Plus 管理Oracle實例
日誌記錄模式(LOGGING 、FORCE LOGGING 、NOLOGGING)
使用外部表管理Oracle 告警日誌(ALAERT_$SID.LOG)
簇表及簇表管理(Index clustered tables)
ORACLE_SID、DB_NAME、INSTANCE_NAME、DB_DOMIAN、GLOBAL_NAME
Oracle 補丁全集 (Oracle 9i 10g 11g Path)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-1068445/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- OGG 故障處理一例
- goldengate故障處理一例Go
- goldengate故障處理一例(續)Go
- database link故障處理一例Database
- 處理mysql複製故障一例薦MySql
- ORACLE 10G rac故障處理一例Oracle 10g
- oracle dataguard資料同步故障處理一例Oracle
- oracle ora-00054錯誤處理Oracle
- 【故障處理】一次RAC故障處理過程
- MongoDB故障處理MongoDB
- 故障分析 | Greenplum Segment 故障處理
- 處理set autotrace故障又一例_ora-942_sp2-0611
- GPON網路故障如何處理?GPON網路故障處理流程
- 【故障處理】ORA-600:[13013],[5001]故障處理
- 【故障處理】ORA- 2730*,status 12故障分析與處理
- linux故障處理Linux
- ora-故障處理
- ORA-00054: resource busy and acquire with NOWAIT specified處理UIAI
- mysqlconnect bug 處理一例。MySql
- 線上故障處理手冊
- MySQL show processlist故障處理MySql
- 微服務的故障處理微服務
- teams登入故障處理
- Oracle更新Opatch故障處理Oracle
- 如何快速處理線上故障
- Mysql故障處理2則MySql
- dataguard故障處理一則
- AIX系統故障處理AI
- 【Linux】 nfs 故障處理LinuxNFS
- 遠端通過監聽連線報ORA-01034故障處理一例
- ORA-04030處理一例
- ORA-16038處理一例
- 【故障處理】CRS-1153錯誤處理
- 【故障處理】ORA-19809錯誤處理
- MySQL SLAVE故障一例MySql
- 網路故障一例
- undo表空間故障處理
- flash_recovery_area故障處理