Oracle TX鎖的處理
什麼是 T X 鎖呢?我們這裡簡單的說明下:
在 Oracle 資料庫中,當一個事務首次發起一個 DML 語句時就獲得一個 TX 鎖,該鎖保持到事務被提交或回滾。當兩個或多個會話在表的同一條記錄上執行 DML 語句時,第一個會話在該條記錄上加鎖,其他的會話處於等待狀態。當第一個會話提交後, TX 鎖被釋放,其他會話才可以加鎖。
當 Oracle 資料庫發生 TX 鎖等待時,若處理不及時常會引起 Oracle 資料庫掛起或死鎖,產生 ORA-00060 的錯誤,導致應用出現長時間未響應、大量事務失敗等問題。
下面我們可以簡單的模擬一個 T X 鎖:
會話 A : 我要對錶 zqz .t1 做更新,而且我還故意不提交
SQL> update zqz.t1 set id=2 where id=1;
5 rows updated. |
會話 B :我對會話 A 的惡行一無所知,我也要去更新表 zq z.t1 的同樣的行:
SQL> update zqz.t1 set id=10086 where id=1;
|
漫長的等待過後,會話 B 發現,我怎麼還沒執行完這條 sql ,按道理應該很快的啊???
如何查詢到 T X 鎖的相關資訊
這個時候,我們用以下語句去查詢,就會發現資料庫出現了個 T X 鎖:
select b.inst_id, b.sid, b.serial#, b.username, b.blocking_session, b.program, b.machine, a.sql_id, a.sql_text from gv$sql a, gv$session b where a.sql_id = b.sql_id and b.event = 'enq: TX - row lock contention' and a.inst_id = b.inst_id; |
查詢到會話 B 被阻塞了。
我們再使用以下 sql ,可以查詢到被鎖物件的具體資訊:
select a.inst_id, b.owner, b.object_name, b.object_type, a.row_wait_obj#, a.row_wait_file#, a.row_wait_block#, a.row_wait_row# from gv$session a, dba_objects b where a.event = 'enq: TX - row lock contention' and a.row_wait_obj# = b.object_id;
|
再再使用以下 sql ,我們可以查詢到罪魁禍首的會話資訊:
select a.INST_ID, b.sid, b.serial#, a.spid, a.username, a.program, b.event from gv$process a, gv$session b where a.inst_id = b.inst_id and a.addr = b.paddr and b.sid in ( select blocking_session from gv$session where event = 'enq: TX - row lock contention' )
|
原來內鬼就是會話 id 為 73 的會話。
如何處理 T X 鎖 :
接下來你可以選擇以下的方法去處理這個會話(在確保不會影響業務的情況下):
1.
用以下
S
QL
來
kill
該會話:
alter system kill session'{sid},{serial_id}' immediate; |
2. 直接找到這個會話的作業系統程式,直接 kill -9 殺掉
程式號就是它:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69993859/viewspace-2753137/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE TX鎖Oracle
- 日常運維之TX鎖處理(一)運維
- 日常運維之TX鎖處理(二)運維
- 【Oracle】死鎖的產生與處理Oracle
- oracle使用者鎖住、過期處理方式Oracle
- Oracle SQL處理OracleSQL
- ORACLE分散式事務鎖各種場景下的處理詳解Oracle分散式
- 一次ORACLE分散式事務鎖異常處理分析Oracle分散式
- 【SQL】Oracle SQL處理的流程SQLOracle
- Oracle壞塊處理Oracle
- oracle異常處理Oracle
- Mysql如何處理死鎖MySql
- oracle 高水位分析處理Oracle
- oracle高水位線處理Oracle
- oracle ORA-08104處理Oracle
- Oracle更新Opatch故障處理Oracle
- Oracle非法日期 處理方案Oracle
- oracle的鎖Oracle
- Oracle密碼過期處理Oracle密碼
- Oracle異常錯誤處理Oracle
- ORACLE 異常錯誤處理Oracle
- Oracle 監聽異常處理Oracle
- 如何處理執行緒死鎖執行緒
- enq: TX - index contention基礎理論ENQIndex
- mysql事務處理與鎖機制MySql
- Oracle Enqueues Wait Events 三 enq: TX - row lock contentionOracleENQAI
- oracle SP2-問題處理Oracle
- Oracle 10g RAC故障處理Oracle 10g
- oracle ora-00054錯誤處理Oracle
- oracle遊標批次處理資料Oracle
- Oracle 11.2.0.4 Dataguard兩則故障處理Oracle
- 【鎖】Oracle鎖系列Oracle
- Oracle sql 語句中帶有特殊的字元處理OracleSQL字元
- 何處理資料恢復 資料丟失 面試tx的架構師的崗位問的資料恢復面試架構
- ORACLE GoldenGate 使用技巧-容錯處理等OracleGo
- Oracle日常問題處理ORA-04031Oracle
- ORACLE ORA-01110: ORA-27072: 處理Oracle
- Oracle開發基礎-異常處理Oracle