檢視Oracle中儲存過程長時間被卡住的原因

2021-09-07 10:34:07 字數 1542 閱讀 8355

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

select * from v$session where sid=***;  

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

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

[sql]view plain

copy

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

select * from v$locked_object lo ,   

all_objects  ao    where lo.object_id= ao.object_id ;  

檢視後發現遠端資料庫中並沒有涉及到a、b表被鎖

7、檢視遠端資料的會話:

[sql]view plain

copy

select * from v$session where terminal like '%機器名%'  and program='oracle.exe'  

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

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

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

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

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

Oracle中儲存過程

1 建立乙個儲存過程 create or replace procedure pro name parameter1 parameter2 is as begin plsql sentences pl sql語句,儲存過程功能實現的主體 exception dowith sentences 異常處理...

Oracle 中儲存過程的建立

在oracle 中用到的視覺化的開發工具是pl sql 其儲存過程也和在sql中的無二。今天也算是複習一下舊知識。是什麼?是乙個 集 也可以理解成是乙個程式塊。它在資料庫中來實現功能。為什麼用?1快 因為資料庫接收到從程式中傳過來的 語句,資料庫還要進行編譯成自己認識的語言 即程式每執行一次就編譯一...

mysql中儲存過程

delimiter,簡單解釋下這個命令的用途,在mysql中每行命令都是用 結尾,回車後自動執行,在儲存過程中 往往不代表指令結束,馬上執行,而delimiter原本就是 的意思,因此用這個命令轉換一下 為 這樣只有收到 才認為指令結束可以執行 檢視myql中已經存在的儲存過程 show proce...