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的TM鎖、TX鎖Oracle
- 日常運維之TX鎖處理(一)運維
- 日常運維之TX鎖處理(二)運維
- ORACLE TX鎖Oracle
- Oracle的TX鎖(行級鎖、事務鎖)Oracle
- 【故障處理】佇列等待之TX - allocate ITL entry引起的死鎖處理佇列
- oracle的TM鎖、TX鎖知識完全普及Oracle
- Oracle 死鎖處理Oracle
- Oracle死鎖處理Oracle
- ORACLE鎖等待的處理方法Oracle
- 處理Oracle Session中的鎖OracleSession
- ORACLE死鎖及處理方式Oracle
- oracle 死鎖查詢處理Oracle
- 【Oracle九大效能檢視】之1.v$lock_處理TX鎖實驗及總結Oracle
- 【Oracle】死鎖的產生與處理Oracle
- GES:Potential blocker on resource TX問題的處理BloC
- 關於Oracle死鎖處理方法Oracle
- Oracle死鎖查詢及處理Oracle
- 檢視處理Oracle中被鎖物件的SQLOracle物件SQL
- TX鎖查詢
- 對TM鎖和TX鎖的簡單理解
- enq: TX - row lock contention等待事件處理ENQ事件
- 關於 TX 鎖的兩句sqlSQL
- TX鎖(Transaction Lock)分析 (zt)
- oracle使用者鎖住、過期處理方式Oracle
- 處理表鎖定的情況
- 處理鎖住的統計資訊
- 對於死鎖的處理流程:
- Mysql如何處理死鎖MySql
- MySQL加鎖處理分析MySql
- MySQL 加鎖處理分析MySql
- 【故障處理】佇列等待之TX - allocate ITL entry案例佇列
- 產生TX鎖等待不同情形的分析
- oracle鎖表問題處理 v$lock v$locked_objectOracleObject
- oracle 資料庫鎖表處理 ORA-00031Oracle資料庫
- smon程式互為死鎖案例--oracle一個bug處理Oracle
- 【故障】“ORACLE使用者被鎖定”故障處理和分析Oracle
- RDSforMySQLInnoDB行鎖等待和鎖等待超時的處理ORMMySql