smon程式互為死鎖案例--oracle一個bug處理

post0發表於2007-02-10
smon程式互為死鎖案例--oracle一個bug處理[@more@]以下這篇文章發表在我的blog上。
貼到這裡與大家共享。

=====================
環境:

OS: AIX 5.2

DB: oracle9206 RAC

兩個例項上面smon程式都在等待enqueue事件。從而導致部分使用者無法登陸,排序請求臨時表空間也不行。。。



接到客戶電話,說有些使用者無法登陸,掛在那裡,修改它的密碼也是掛在那裡。並且好多查詢結果都出不來。。

登上去檢查,發現smon程式在等待enqueue事件。所以引起了上面的現象。檢查v$lock

A節點:

12 TX 2752512 475202 6 0
12 TM 22 0 3 0
12 TM 18 0 3 0
12 TX 1441873 792576 0 6

B節點:

12 TX 1441873 792576 6 0
12 TM 22 0 3 0
12 TM 18 0 3 0
12 TX 2752512 475202 0 6

從這裡也可以發現,兩個例項之間發生死鎖了。

客戶說他前一天晚上重起過資料庫,重啟後也是一樣的。

檢查smon程式的sql語句:

select o.owner#,o.obj#,decode(o.linkname,null, decode(u.name,null,'SYS',u.name),o.remoteowner),
o.name,o.linkname,o.namespace,o.subname
from user$ u, obj$ o where u.user#(+)=o.owner# and o.type#=1
and not exists (select p_obj# from dependency$ where p_obj# = o.obj#)
order by o.obj# for update;

從SQL語句上看,應該是smon程式在清理obj$物件。

在metalink搜尋,發現oracle有個這樣的bug,導致互為死鎖。oracle提供了相應的補丁,但是沒有aix上面的版本。

現在由於兩個例項的smon程式都在清理obj$表格,從而導致了死鎖,如果禁止掉一個smon程式清理obj$表格,這個bug不就可以避免了嗎?

於是想起10052事件,其功能禁止smon程式清理obj$表。
event="10052 trace name context forever"

在其中一個例項上填加10052事件後,重啟這個例項後,一切正常。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-899037/,如需轉載,請註明出處,否則將追究法律責任。

相關文章