ORACLE鎖等待的處理方法
前言:鎖等待的管理是資料庫管理員在日常工作中會碰到較多的一個問題,一般來說大型的ERP鎖等待的處理會相對較少,小型的應用系統鎖等待會相對比較多。
常規的鎖等待的處理方法如下:
1) 先查詢持有鎖的物件:
指令碼:select a.sid, b.spid from (select s.sid, s.paddr from v$session s,v$lock l WHERE l.sid = s.sid and l.block=1) a, v$process b where a.paddr=b.addr;
2)kill相應的session:
指令碼:alter system kill session 'sid,serial#';
以上的操作可以處理大約80%的鎖等待的問題,還有20%的鎖等待問題透過以上的語句是解決不了的,最近在就碰到了一個,當進行kill session的時候出現了提示"ORA-00031: session marked for kill",這個問題可以有兩個處理方法:
方法一、重啟資料庫:這個方法肯定是不推薦的,每個公司對系統的可用性都是有很高的要求的,一旦重啟了系統就表示這個重啟的過程中系統屬於不可用的狀態,IT的系統可用性就降低了。(該方法適合不同oracle且連sqlplus都不知道怎麼用的朋友)
方法二、從作業系統進行殺執行緒的操作,因為unix和windows作業系統的不一樣,所以處理的方法也有些不一樣;
1)unix和linux下面的操作步驟如下:
a)根據sid的資訊找出作業系統的程式資訊
指令碼:select p.spid, osuser, s.program from v$session s,v$process p where s.paddr=p.addr and s.sid=&SID;
SQL> select p.spid, osuser, s.program from v$session s,v$process p where s.paddr=p.addr and s.sid=&SID; Enter value for sid: 23 old 1: select p.spid, osuser, s.program from v$session s,v$process p where s.paddr=p.addr and s.sid=&SID new 1: select p.spid, osuser, s.program from v$session s,v$process p where s.paddr=p.addr and s.sid=23 SPID OSUSER PROGRAM ------------ ---------------- ----------------------------------------- 8782014 ecqadm (TNS V1-V3) |
b) root使用者下,透過作業系統進行殺程式
指令碼:kill -9 8782014
2)由於windows作業系統下面ORACLE在任務管理只能檢視一個oracle.exe的程式,當然不能直接對這個程式進行結束。oracle提供了相應的操作工具orakill,詳細的操作如下:
C:\Users\Administrator>orakill orakill Usage: orakill sid thread where sid = the Oracle instance to target thread = the thread id of the thread to kill The thread id should be retrieved from the spid column of a query such as: select spid, osuser, s.program from v$process p, v$session s where p.addr=s.paddr |
orakill sid thread
sid:表示要殺死的程式屬於的例項名
thread:是要殺掉的執行緒號,即第3步查詢出的spid。
例:c:>orakill orcl 8782014
總結:公司的ERP系統執行了3年的時間了,資料量也到2TB了,資料庫也是公司所有的資料庫裡面最繁忙的一個了,但是從執行到現在還沒有進行過kill session的操作。相比公司的另外一個屬於自己開發的系統,資料量10G不到,但是幾乎每個月都會出現鎖等待,需要DBA從中干預。鎖等待或死鎖不是資料庫的問題而是應用程式的問題,經常遇到有這些問題的應用,恭喜你升官加薪的機會就在眼前。
******************************************************************************************************
本文作者:JOHN QQ:1916066696 (請備註資料庫)
ORACLE技術部落格:
ORACLE 獵人筆記 http://blog.itpub.net/12679300/
*******************************************************************************************************
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29802484/viewspace-1387551/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle TX鎖的處理Oracle
- oracle常見異常等待——latch處理思路Oracle
- 【Oracle】死鎖的產生與處理Oracle
- oracle使用者鎖住、過期處理方式Oracle
- 常見的wait等待事件及處理(zt)AI事件
- log file sync等待事件處理思路事件
- oracle分散式事務異常處理方法Oracle分散式
- Oracle SQL處理OracleSQL
- ORACLE分散式事務鎖各種場景下的處理詳解Oracle分散式
- mybatis+oracle 批次插入多條資料的處理方法MyBatisOracle
- 一次ORACLE分散式事務鎖異常處理分析Oracle分散式
- ruby webdriver 顯性等待、隱性等待、內部超時處理Web
- 常見佇列等待事件處理思路佇列事件
- Oracle DataGuard歸檔日誌丟失處理方法Oracle
- oracle中undo表空間丟失處理方法Oracle
- Oracle 高水位查詢和處理方法彙總Oracle
- MySQL 死鎖和鎖等待MySql
- 【SQL】Oracle SQL處理的流程SQLOracle
- Oracle壞塊處理Oracle
- oracle異常處理Oracle
- Mysql如何處理死鎖MySql
- 檢視MySQL鎖等待的原因MySql
- oracle 高水位分析處理Oracle
- oracle高水位線處理Oracle
- oracle ORA-08104處理Oracle
- Oracle更新Opatch故障處理Oracle
- Oracle非法日期 處理方案Oracle
- Oracle資料使用者密碼過期處理方法Oracle密碼
- 【ASK_ORACLE】Linux從6升級到7導致Oracle產生大量Log file sync等待事件處理辦法OracleLinux事件
- 故障處理】佇列等待之enq: US - contention案例佇列ENQ
- 【故障處理】佇列等待之enq: US - contention案例佇列ENQ
- oracle的鎖Oracle
- JavaScript常用的字串處理方法JavaScript字串
- MySQL鎖等待與死鎖問題分析MySql
- Oracle密碼過期處理Oracle密碼
- Oracle異常錯誤處理Oracle
- ORACLE 異常錯誤處理Oracle
- Oracle 監聽異常處理Oracle
- 如何處理執行緒死鎖執行緒