ora-00054 表被lock導致資源忙等待不能操作案例
1.現場狀態
時間:2012年8月20日
資料庫版本:Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
作業系統平臺:HP-UX
告警日誌: more alert_mdsoss.log
2.定位問題
報錯現象:
ORA-00054: resource busy acquire with nowait specified 資源忙
協成日誌報錯:SQL ERR :insert into table GNTCPCNN12082015 不能插入表
3.分析原因
一般像這種情況可能是這個表正在被使用,有可能有lock暫時不能使用,在dba許可權下檢視一下是否有v$locked_object,有的話把session幹掉
SQL> select * from v$locked_object;
XIDUSN XIDSLOT XIDSQN OBJECT_ID SESSION_ID ORACLE_USERNAME OS_USER_NAME PROCESS LOCKED_MODE
---------- ---------- ---------- ---------- ---------- ---------------- --------------- --------------------
13 13 681477 79913476 855 MDSOSS mdsdb2 12897 6
7 41 600151 79914479 998 MDSOSS npmuser 10468 3
7 41 600151 79914483 998 MDSOSS npmuser 10468 3
7 41 600151 79914481 998 MDSOSS npmuser 10468 3
19 27 701115 79913681 1032 MDSOSS mdsdb3 8658 6
61 30 182840 153240 1059 MDSOSS oracle 12738 3
61 30 182840 212 1059 MDSOSS oracle 12738 3
61 30 182840 165 1059 MDSOSS oracle 12738 3
30 7 545652 79915059 1073 MDSOSS npmuser 20387 3
52 39 385940 79913551 1085 MDSOSS mdsdb3 12960 6
51 17 461665 79914748 1090 MDSOSS npmuser 15454 3
51 17 461665 79914756 1090 MDSOSS npmuser 15454 3
51 17 461665 79914763 1090 MDSOSS npmuser 15454 3
58 24 262815 79914375 1175 MDSOSS npmuser 6369 3
58 24 262815 79914380 1175 MDSOSS npmuser 6369 3
58 24 262815 79914378 1175 MDSOSS npmuser 6369 3
10 46 680893 79913459 1179 MDSOSS mdsdb2 2581 6
17 rows selected
SQL> select * from v$locked_object;
XIDUSN XIDSLOT XIDSQN OBJECT_ID SESSION_ID ORACLE_USERNAME OS_USER_NAME PROCESS LOCKED_MODE
---------- ---------- ---------- ---------- ---------- ---------------- --------------- --------------------
42 22 507847 79915291 976 MDSOSS npmuser 25324 3
42 22 507847 79915263 976 MDSOSS npmuser 25324 3
42 22 507847 79915282 976 MDSOSS npmuser 25324 3
1 5 650009 79915671 989 MDSOSS npmuser 1175 3
1 5 650009 79915675 989 MDSOSS npmuser 1175 3
1 5 650009 79915676 989 MDSOSS npmuser 1175 3
我進行了2次查詢。第一次發現mdsdb2、mdsdb3使用者操作的插入物件正在被鎖定,並且鎖的級別都是6級,級別非常高,導致資源被佔用,如果此時在對錶操作就會報ora-00054,後來查詢了第二次,就沒有mdsdb2、mdsdb3使用者的鎖物件了,此時就可以操作表了。
4.查詢哪些使用者下哪些表被鎖住了
select A.sid, b.serial#,
2 decode(A.type,
3 'MR', 'Media Recovery',
4 'RT','Redo Thread',
5 'UN','User Name',
6 'TX', 'Transaction',
7 'TM', 'DML',
8 'UL', 'PL/SQL User Lock',
9 'DX', 'Distributed Xaction',
10 'CF', 'Control File',
11 'IS', 'Instance State',
12 'FS', 'File Set',
13 'IR', 'Instance Recovery',
14 'ST', 'Disk Space Transaction',
15 'TS', 'Temp Segment',
16 'IV', 'Library Cache Invalida-tion',
17 'LS', 'Log Start or Switch',
18 'RW', 'Row Wait',
19 'SQ', 'Sequence Number',
20 'TE', 'Extend Table',
21 'TT', 'Temp Table',
22 'Unknown') LockType,
23 c.object_name,
24 b.username,
25 b.osuser,
26 decode(a.lmode, 0, 'None',
27 1, 'Null',
28 2, 'Row-S',
29 3, 'Row-X',
30 4, 'Share',
31 5, 'S/Row-X',
32 6, 'Exclusive', 'Unknown') LockMode,
33 B.MACHINE,D.SPID
34 from v$lock a,v$session b,all_objects c,V$PROCESS D
35 where a.sid=b.sid and a.type in ('TM','TX')
36 and c.object_id=a.id1
37 AND B.PADDR=D.ADDR
38 ;
SID SERIAL# LOCKTYPE OBJECT_NAME USERNAME OSUSER LOCKMODE MACHINE SPID
--------------- ------------ ------------------- ----------------------- --------------- --------- ----------------------------- ------------
867 6254 DML TMP2720003 MDSOSS npmuser RowX TJGRAPP 28373
935 46865 DML GNWEBBRW12082016 MDSOSS mdsdb1 Exclusive TJ-Unicom-Group-Analyse-02 4632
1120 33384 DML TMP244701 MDSOSS npmuser RowX TJGRAPP 844
1120 33384 DML TMP244702 MDSOSS npmuser RowX TJGRAPP 844
1120 33384 DML TMP244703 MDSOSS npmuser Row-X TJGRAPP 844
1030 53327 DML GNMMO12082016 MDSOSS mdsdb3 Exclusive TJ-Unicom-Group-Analyse-02 5211
867 6254 DML TMP2720001 MDSOSS npmuser Row-X TJGRAPP 28373
867 6254 DML TMP2720002 MDSOSS npmuser Row-X TJGRAPP 28373
1014 46058 DML TMP748801 MDSOSS npmuser Row-X TJGRAPP 3086
1014 46058 DML TMP748802 MDSOSS npmuser Row-X TJGRAPP 3086
1014 46058 DML TMP748803 MDSOSS npmuser Row-X TJGRAPP 3086
1176 22983 DML TMP790301 MDSOSS npmuser Row-X TJGRAPP 3168
994 20324 DML TMP791601 MDSOSS npmuser Row-X TJGRAPP 3170
13 rows selected
小結:例如 GNWEBBRW12082016 這個表現在已經被mdsdb1使用者使用,在沒有commit之前,其他使用者是不能使用的,如果其他使用者此時也想訪問這個表就會發生ora-00054錯誤!就會有資源爭用導致資源忙等待
解決方法:
1.重啟資料庫 startup force
2.等待鎖釋放
3.強制kill會話
Leonarding
2012.8.20
天津&autumn
分享技術~收穫快樂
Blog:http://space.itpub.net/26686207
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26686207/viewspace-741415/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 併發insert操作導致的dead lock
- 設定drawables物件背景導致資源被影響物件
- 【北亞資料恢復】誤操作導致雲伺服器表被truncate,表內資料被delete的資料恢復資料恢復伺服器delete
- swap空間不足導致mysql被OOM kill案例MySqlOOM
- 隱形轉換導致全表掃描案例
- ORA-1652 臨時表空間滿了導致新會話資料不能入庫診斷案例會話
- LGWR寫操作會導致效能全域性卡頓案例分析
- 12c impdp慢問題 - 分割槽表預先建立表結構導致並行parallel不能被使用並行Parallel
- oracle bug 6825287導致DX鎖等待Oracle
- MySQL Flush導致的等待問題MySql
- Oracle11g新特性導致空表不能匯出Oracle
- Oracle資料庫分割槽表SPLIT操作導致歸檔瘋漲Oracle資料庫
- MySQL Online DDL導致全域性鎖表案例分析MySql
- oracle goldengate ddl 操作導致複製程式abended處理案例OracleGo
- 主外來鍵約束之主表插入未提交導致外來鍵表插入hang住的等待事件 TX-row lock contention事件
- ASM磁碟組故障導致資料庫不能起來ASM資料庫
- goldengate 觸發器導致oracle 表空間不能onlineGo觸發器Oracle
- GoldenGate導致的Streams miscellaneous event等待事件Go事件
- 異常程式導致大量資源佔用
- 大量"library cache lock"事件導致資料庫無法連線事件資料庫
- 儲存多路徑故障導致資料庫死掉案例資料庫
- 表資料被誤操作的恢復
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- 伺服器資料恢復-誤操作導致mysql資料庫資料丟失的資料恢復案例伺服器資料恢復MySql資料庫
- ORA-00054: 資源正忙,要求指定 NOWAITAI
- 10.2.0.1監聽子程式導致資料庫不能響應資料庫
- Sybase資料庫日誌過大導致不能啟動(轉)資料庫
- 【北亞資料庫資料恢復】誤操作導致資料丟失的華為雲mysql資料恢復案例資料庫資料恢復MySql
- 等待事件之Row Cache Lock事件
- LIBRARY CACHE LOCK 等待事件事件
- enable table lock 的enqueue等待ENQ
- windows 防火牆 導致 tnsping 不能成功Windows防火牆
- 【北亞資料恢復】輸入錯誤命令導致MySQL資料庫資料被刪除的資料恢復案例資料恢復MySql資料庫
- oracle分割槽表的常規操作導致對索引的影響Oracle索引
- 故障:核心表業務高峰期授權導致library cache lock和mutex x競爭Mutex
- 【RAC】處理VIP資源被佔用導致Cluster叢集軟體無法正常部署問題
- 同時開啟節點導致資料DDL操作慢 ??
- latch:library cache lock等待事件事件