查看Oracle中預存程序長時間被卡住的原因

來源:互聯網
上載者:User

標籤:本地   ddr   tail   串連   tle   步驟   sql   lin   term   

1:查V$DB_OBJECT_CACHE

SELECT * FROM V$DB_OBJECT_CACHE WHERE name=‘CUX_OE_ORDER_RPT_PKG‘ AND LOCKS!=‘0‘;

注意:CUX_OE_ORDER_RPT_PKG 為預存程序的名稱。

發現 locks=2

2:按對象查出sid的值

select /*+ rule*/  SID from V$ACCESS WHERE object=‘CUX_OE_ORDER_RPT_PKG‘;

注意:CUX_OE_ORDER_RPT_PKG 為預存程序的名稱。

3:查sid,serial#

SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID=‘剛才查到的SID‘;

4、根據會話id(sid),此會話的等待事件:

[sql] view plain copy
  1. select * from v$session where sid=***;  

event欄位即為等待事件。查詢後我們發現這個會話等待事件為SQL*Net message from dblink;在查看會話的logon_time為兩天前。這個時間遠超過我們估計時間。

5、根據會話id查看此會話正在執行的sql語句

[sql] view plain copy
  1. select sql_text from v$sqlarea where address= (select   sql_address  from v$session where sid=***);  

查詢後發現正在執行的sql語句為通過dblink到遠端資料庫上A表查詢資料,插入到B表。

6、串連遠端資料庫,查詢當前被鎖的對象

[sql] view plain copy
  1. select * from v$locked_object lo ,   
  2. all_objects  ao    where lo.OBJECT_ID= ao.object_id ;  

查看後發現遠端資料庫中並沒有涉及到A、B表被鎖

7、查看遠端資料的會話:

[sql] view plain copy
  1. select * from v$session where terminal like ‘%機器名%‘  and program=‘Oracle.exe‘  

使用dblink串連遠端資料庫,在遠端資料庫上的會話的program應該是是oracle.exe

查詢後發現,兩個遠程庫有時候根本沒有相關會話,有時候可能有相關會話,但其等待事件是 SQL*Net message from client 遠程庫在等待本地Oracle給他發請求。

 

本地庫等dblink遠程庫,遠程庫等待client訊息。看來這個預存程序是不可能執行完了。

具體什麼原因造成了,還不清楚。

 

這裡給出的處理方法就是殺死會話


http://blog.csdn.net/fupei/article/details/7325190

具體步驟可參考上面的文章

查看Oracle中預存程序長時間被卡住的原因

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.