Oracle中編譯package掛死的原因

2021-08-13 10:14:01 字數 1260 閱讀 6829

**

1.package在編譯的時候,用到了某些物件,而這個物件恰好被鎖住了,也就是說編譯執行緒發生了死鎖現象,程式掛死也就很正常了。

2.package中寫了某些奇怪的語句,oracle的編譯器出問題了。

第二種原因聽起來很不可思議,但是我之前確實遇到過。。。

首先,轉乙個檢查oracle資料庫中物件死鎖及解決辦法的文章:

引用——第一種情況解決辦法

一些oracle中的程序被殺掉後,狀態被置為"killed",但是鎖定的資源很長時間不釋放,有時實在沒辦法,只好重啟資料庫。現在提供一種方法解決這種問題,那就是在oracle中殺不掉的,在os一級再殺。 

1.下面的語句用來查詢哪些物件被鎖:

select object_name,machine,s.sid,s.serial#

from v$locked_object l,dba_objects o ,v$session

s where l.object_id = o.object_id and l.session_id=s.sid;

2.下面的語句用來殺死乙個程序:

alter system

kill session '24,111'; (其中24,111分別是上面查詢出的sid,serial#)

【注】以上兩步,可以通過oracle的管理控制台來執行。

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

select spid, osuser, s.program

from v$session

s,v$process p

where s.paddr=p.addr and

s.sid=24 (24是上面的sid)

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

1)在unix上,用root身份執行命令:

#kill -9 12345(即第3步查詢出的spid)

2)在windows(unix也適用)用orakill殺死執行緒,orakill是oracle提供的乙個可執行命令,語法為:

orakill sid thread

其中:

sid:表示要殺死的程序屬於的例項名

thread:是要殺掉的執行緒號,即第3步查詢出的spid。

例:c:>orakill orcl 12345

Oracle中編譯過程,函式和包

編譯過程 alter procedure new procedure compile 為了能夠執行此命令,需要擁有這個過程,或者具有alter any procedure系統許可權。編譯函式 alter function new function compile 為了能夠執行,需要擁有此函式,或者具...

重新編譯ORACLE中的INVALID物件

set heading off set feedback off set echo off set lines 999 spool run invalid.sql select alter object type owner object name compile from dba objects ...

oracle 編譯無效物件

oracle 編譯無效物件 1.手動編譯 如果無效物件的數量很少,那麼你可以逐個編譯這些物件.如alter package my package compile alter package my package compile body alter procedure my procedure co...