資料庫異常hang住解決

dawn009發表於2014-05-16
下午內網測試庫同事反應查詢更新資料很慢,有時甚至表都打不開,後來透過伺服器【linux】的top命令檢視了下,cpu和mem佔用正常,但wait高達80%多(下面兩圖顯示的就是問題前後觀察EM對比的截圖,版本是oracle10gR2,EM的效果比oracle11gR2遜色不少哈):

--------------------------------------&gt>


----------------------------&gt>
接著透過sqldevelpdev客戶端查詢有沒有鎖等待之類會話事件,果然有,而且是兩個session持有TX鎖,然後透過下面的sql查詢從oracle和linux級別kill掉了相應session,以為風波就此平靜,結果過了不到一分鐘查詢又出現,只不過這次只有一個session持有TX鎖,於是就去查詢對應的sql_txt,找到後發現是個同事寫的儲存過程,定時任務,當時正在執行,讓其確認下是不是任務執行出問題了,結果一查,是程式問題,造成的死迴圈,它會批次發起會話,kill一個後接著又鎖,迴圈反覆,後來他改了下程式後重新執行,一切恢復通暢.


--查詢死鎖
select sess.sid, sess.serial#,  lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode 
 from v$locked_object lo, dba_objects ao,v$session sess 
where ao.object_id = lo.object_id and lo.session_id = sess.sid;

--oracle級別kill session
alter system kill session '1627,1';
alter system kill session '1564,64740';

--查詢當前連線會話
select s.value,s.sid,a.username,a.MACHINE from v$sesstat S,v$statname N,v$session A
where n.statistic#=s.statistic# and name='session pga memory' and s.sid=a.sid and a.sid=1626
order by s.value;

--查詢造成死鎖的sql語句
SELECT   a.SID, a.username, s.sql_text FROM v$session a, v$sqltext s
WHERE a.sql_address = s.address AND a.sql_hash_value = s.hash_value  and a.SID=1626
ORDER BY a.username, a.SID, s.piece;
--造成鎖等待的操作內容
begin 
flt_com.p_line_relation_change(:A0,:B0,:C0,:D0,:E0,:ret_errorcode,:ret_errorname);
end;
--透過sid查詢pid,進而透過系統級別kill
select spid, osuser, s.program from v$session s,v$process p where s.paddr=p.addr and s.sid=1605;
--伺服器級別kill 
kill -9 spid
--------------------------------over game

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

相關文章