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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- RDSforMySQLInnoDB行鎖等待和鎖等待超時的處理ORMMySql
- oracle常見等待事件及處理方法Oracle事件
- 關於Oracle死鎖處理方法Oracle
- 批量解決oracle鎖等待的方法Oracle
- 【實驗】【LOCK】“鎖等待”模擬、診斷及處理方法
- Oracle TX鎖的處理Oracle
- Oracle 死鎖處理Oracle
- Oracle死鎖處理Oracle
- 處理Oracle Session中的鎖OracleSession
- 'library cache lock'等待事件的處理方法事件
- 【故障處理】佇列等待之TX - allocate ITL entry引起的死鎖處理佇列
- ORACLE死鎖及處理方式Oracle
- oracle 死鎖查詢處理Oracle
- 【Oracle】死鎖的產生與處理Oracle
- oracle常見異常等待——latch處理思路Oracle
- Oracle死鎖查詢及處理Oracle
- 檢視處理Oracle中被鎖物件的SQLOracle物件SQL
- Oracle阻塞(鎖等待)查詢Oracle
- 【ORA-02049】超時分散式事務處理等待鎖 解決方法 推薦分散式
- oracle 誤刪除的處理方法Oracle
- 查詢並刪除Oracle中等待的鎖Oracle
- oracle bug 6825287導致DX鎖等待Oracle
- oracle使用者鎖住、過期處理方式Oracle
- ORACLE資料庫壞塊的處理 (處理無物件壞快的方法)Oracle資料庫物件
- wait等待事件及其處理方法 awr top5 報告AI事件
- Oracle 排序中常用的NULL值處理方法Oracle排序Null
- oracle??邏輯DG同步卡住,session等待row cache lock的處理過程OracleSession
- 關於HW-contention等待的處理
- 常見的wait等待事件及處理AI事件
- 處理等待發貨過帳的交貨
- 對oracle中出現的壞塊的處理方法Oracle
- log file sync等待事件處理思路事件
- gc current request等待時間處理GC
- ORACLE 11g新特性-允許DDL鎖等待DML鎖Oracle
- 處理表鎖定的情況
- 處理鎖住的統計資訊
- 對於死鎖的處理流程:
- Oracle undo表空間爆滿的處理方法Oracle