ORACLE自動重編譯包導致查詢被卡

gxlineji發表於2016-06-17


如果包、儲存過程、函式關聯的物件有DDL變化或者引用了全域性變數(並重編譯了包含全域性變數的包),那麼首次呼叫時,會重編譯該包、儲存過程、函式關聯
如果是並行呼叫包、儲存過程、函式關聯,很容易導致記憶體鎖,
其它session如果要查詢關聯的物件,將會出現 cursor: pin S wait on X 等待,查詢被卡住。

查詢被卡住的session,以及被卡在的SQL:
select se.BLOCKING_SESSION,sql.INST_ID,se.event,sql.SQL_TEXT,sql.SQL_FULLTEXT,sql.SQL_ID,se.* 
from gv$sqlarea sql ,gv$session se
 where sql.ADDRESS=se.SQL_ADDRESS and sql.INST_ID=se.INST_ID
 and se.status='ACTIVE' and se.BLOCKING_SESSION is not null;


查詢包、儲存過程、函式關聯的物件:
select * from dba_dependencies t where owner='xxx';

查詢上次DDL時間
select * from dba_objects t where owner='xxx' order by t.last_ddl_time desc ;

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

相關文章