Oracle鎖等待的處理方法

來源:互聯網
上載者:User

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                    dw.sapECQ_DVEBMGS00@joeoneecq (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從中幹預。鎖等待或死結不是資料庫的問題而是應用程式的問題,經常遇到有這些問題的應用,恭喜你陞官加薪的機會就在眼前。

在CentOS 6.4下安裝Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虛擬機器中安裝步驟

Debian 下 安裝 Oracle 11g XE R2

Oracle效能最佳化 之 共用池

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.