oracle 儲存過程編輯 卡死

2022-03-08 15:55:29 字數 1420 閱讀 6268

一、可用sys登入,

二、查鎖session_id

查詢儲存過程operationdata_imp被哪些session鎖住而無法編譯

select * from dba_ddl_locks where name =upper('operationdata_imp');

三、查出sid  serial#

解決辦法如下: 

如果利用上面的命令殺死乙個程序後,程序狀態被置為"killed",但是鎖定的資源很長時間沒有被釋放,那麼可以在os一級再殺死相應的程序(執行緒),

首先執行下面的語句

獲得程序(執行緒)語句號:

select spid, osuser, s.program from v$session s,v$process p where

s.paddr=p.addr and s.sid=33 (33就是上面的sid

)在os上殺死這個程序(執行緒):

1)在unix上,用root身份執行命令: #kill -9 12345(即第3步查詢出的spid)

2)在windows(unix也適用)用orakill殺死執行緒,orakill是oracle提供的乙個可執行命令,在cmd裡執行,語法為: orakill sid thread 其中: sid:表示要殺死的程序屬於的例項名 thread:是要殺掉的執行緒號,即獲得程序(執行緒)語句號查詢出的spid。

例:c:>orakill orcl 12345  orcl例項名。12345獲得程序(執行緒)語句號查出的spid

ps:這裡要注意的是kill os程序是在服務端操作,而不是你程式所在客戶機。

解決方法如下:

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:alter system kill session 'sid值,serial#值' immediate;

Oracle 儲存過程 編譯時卡死不動

這個該死的問題困擾了好久,多方分析之後,才知道,儲存過程編譯沒完成,或者編譯失敗時,oracle 資料庫會自動把相應的儲存過程鎖起來,最無賴的做法 是重啟資料庫,此問題就解決 每天重啟兩次資料庫想死的心都有了,經過今天的查詢 終於找的好的解決方法 一 找到之前除錯的儲存過程 名稱,使用一下語句找到 ...

Oracle儲存過程編譯卡死的解決方法

在oracle資料庫中重新修改編譯了某個儲存過程a呼叫的另乙個過程b後,需要手動將a重新編譯,一定不要在重新編譯a前去呼叫a,否則會造成a編譯掛死的情況。特別是在訪問量大的情況下。這種情況下如果強行終止儲存過程編譯,再次recompile儲存過程會發現還是掛死的,這個主要是由於強行終止後會話為ina...

Oracle儲存過程編譯卡死的解決方法

oracle儲存過程編譯卡死的解決方法 解決方法如下 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 為儲存過...