編譯的存儲過程的時候,程序死住,等待一會出現(xiàn)ora-04021錯誤解決辦法:
創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供尤溪網(wǎng)站建設(shè)、尤溪做網(wǎng)站、尤溪網(wǎng)站設(shè)計、尤溪網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、尤溪企業(yè)網(wǎng)站模板建站服務(wù),十余年尤溪做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
1.可能被鎖住
查看v$lockedselect b.sid,b.serial#,b.machine,b.terminal,b.program,b.process,b.status from v$lock a , v$session b
where a.SID = b.SID
得到死鎖session的SID,SERIAL#參看這個是否為你自己用戶下的,然后kill掉session
2.可能被掛起
查看v$session_waitselect b.serial#,a.* from v$session_wait a,v$session
bwhere a.sid = b.sid得到等待的session的sid和serial#3.查看dba_ddl_locksselect
session_id sid, owner, name, type,
mode_held held, mode_requested request
from dba_ddl_locks
where name = 'your_package_name'
Oracle中出現(xiàn)無效對象,就是因為在創(chuàng)建函數(shù)或存儲過程等,里邊的內(nèi)容書寫不正確導(dǎo)致。如果要重新編譯,需要先修正錯誤,然后編譯。
工具:Oracle 10g、PL/SQL
步驟:
1、在PL/SQL中打開出現(xiàn)編譯錯誤的函數(shù)或存儲過程,這里以存儲過程為例。
2、右鍵點擊該存儲過程,選擇“編輯”。
3、根據(jù)錯誤提示,找到錯誤,并修改錯誤。
4、改正錯誤后,點擊左上方的“齒輪”狀按鈕。
5、運行成功后,則該存儲過程就會變?yōu)榫幾g成功的狀態(tài)。
//通過編寫的連接類創(chuàng)建一個連接
dbconn db = new dbconn();
Connection con1 = db.conn;
String callSQL1 = new String();
ResultSet rs1 = null;
//創(chuàng)建一個CallableStatement變量st1來調(diào)用存儲過程信息
CallableStatement st1 = null;
try {
st1 = con1.prepareCall("{ call p(?,?,?,?) }");
st1.setString(1, "參數(shù)1");
st1.setString(2, "參數(shù)2");
st1.setString(3, "參數(shù)3");
st1.registerOutParameter(4,Types.INTEGER); //此處4 代表第一個"?" 則表示存儲過程返回的值 這里要注意Types的類型,當(dāng)需要有返回值時
st1.execute();
System.out.println(st1.getInt(4));//輸出存儲過程的返回值,當(dāng)有返回值時
} catch (Exception error) {
try {
con1.rollback(); //操作不成功則回退
} catch (Exception ex9) {
ex9.printStackTrace();
}
out.print("系統(tǒng)出錯" + error.getMessage());
} finally {
try {
if (st1 != null) {
st1.close();
}
} catch (Exception error) {
}
db.disconnect();
}
在第三方的pl/sql developer軟件下能編譯
也可以使用oracle開發(fā)的sql developer下進(jìn)行編譯
不安裝pl/sql開發(fā)軟件時,可以用oracle安裝時帶上的sqlplus進(jìn)行編譯,連接上sqlplus后,粘貼上你要編譯的程序,然后執(zhí)行("/")即可!
要使用 OMPT,需要在系統(tǒng)上安裝和運行 Oracle Solaris 11。除了安裝過程中使用的 root 權(quán)限之外,運行任何 OMPT 實用程序通常無需任何其他特殊權(quán)限。
如果您想編譯 MPI 程序,則需要安裝 Oracle Solaris Studio 12.1 或更高版本。在運行 MPI 程序的節(jié)點集群上,可以在其中一個節(jié)點上安裝 Oracle Solaris Studio 并僅在該節(jié)點上編譯 openmpi-15 程序包,但在所有節(jié)點上都安裝該程序包。
要獲取 OMPT,請安裝 openmpi-15 程序包,該程序包由一個映像包管理系統(tǒng) (IPS) 信息庫托管,您的系統(tǒng)上應(yīng)配置有該信息庫。要驗證是否配置了 IPS 信息庫,請運行 pkg publisher 命令。
如果尚未 配置 IPS 信息庫,請在嘗試添加 openmpi-15 程序包之前配置它。否則,程序包添加將失敗。
系統(tǒng)應(yīng)配置了網(wǎng)絡(luò)訪問(如果是通過網(wǎng)絡(luò)訪問 IPS 信息庫)或本地配置的從同一系統(tǒng)提供服務(wù)的 IPS 信息庫。
本文示例使用了本地配置的 IPS 信息庫,如 pkg publisher 命令的以下輸出所示,該輸出指示 IPS 信息庫通過 HTTP 托管在 localhost 上。
root@solarix:/usr/share/distro_const# pkg publisher
PUBLISHER TYPE STATUS URI
solaris origin online
驗證配置了信息庫之后,以 root 身份運行 pkg install openmpi-15 命令添加該分發(fā)構(gòu)造器程序包。然后從 IPS 信息庫下載 openmpi-15 程序包并立即安裝。
pkg install openmpi-15 命令顯示進(jìn)程的狀態(tài),如清單 1 所示,這樣便于觀察進(jìn)度。
清單 1:pkg install openmpi-15 命令的輸出
root@solarix:~# pkg install openmpi-15
Creating Plan
Packages to install: 2
Create boot environment: No
DOWNLOAD PKGS FILES XFER (MB)
service/picl 0/2 0/1430 0.0/11.9[K
developer/openmpi-15 1/2 1430/1430 11.9/11.9[K
Completed 2/2 1430/1430 11.9/11.9[K
PHASE ACTIONS
Install Phase 1639/1639
PHASE ITEMS
Package State Update Phase 1/2
Package State Update Phase 2/2
Image State Update Phase 1/2
Image State Update Phase 2/2
PHASE ITEMS
Reading Existing Index 1/8
Reading Existing Index 5/8
Reading Existing Index 8/8
Indexing Packages 2/2
安裝完 openmpi-15 程序包之后,只需在 PATH 變量中包括 /usr/openmpi/ompi-15/bin,然后就一切準(zhǔn)備妥當(dāng)。
使用 OMPT 編譯 MPI 程序
使用 OMPT 編譯 MPI 程序有兩種方式。您可以使用程序包中包含的編譯器包裝器(mpicc、mpiCC、mpif77 和 mpif90)或者直接調(diào)用編譯器。
因為需要包含的 include、library 和 run 路徑,建議采用第一種方法。包裝器將其不了解的所有選項都傳給 Oracle Solaris Studio 編譯器,因此您應(yīng)能夠使用包裝器實用程序替換 makefile 中編譯器的所有實例。
以清單 2 作為示例 MPI 程序,可以使用一行命令編譯程序:
mpicc hello.c -o hello.x
清單 2:示例 hello.c 程序
#include stdio.h
#include mpi.h
int main(int argc, char **argv) {
int np, me;
MPI_Init(argc,argv);
MPI_Comm_size(MPI_COMM_WORLD,np);
MPI_Comm_rank(MPI_COMM_WORLD,me);
printf("hello from %d of %d\n", me, np);
MPI_Finalize();
return 0;
}
還可以執(zhí)行兩階段的編譯和鏈接:
mpicc -c hello.c
mpicc hello.o -o hello.x
如果要直接執(zhí)行編譯器而不使用包裝器,可以通過向包裝器提供 -showme 選項來確定包裝器使用的選項:
mpicc -showme hello.c -o hello.x
使用 OMPT 運行 MPI 程序
編譯完可執(zhí)行文件并與 OMPT 庫鏈接之后,可以單獨運行該程序或使用并行作業(yè)啟動器實用程序 mpirun 來運行。
要單獨運行程序,只需運行該可執(zhí)行文件,就跟普通非并行可執(zhí)行文件一樣。但是,隨后將由該程序來負(fù)責(zé)調(diào)用相應(yīng)的 MPI API(如 MPI_Comm_spawn 或 MPI_Comm_spawn_multiple)來生成 MPI 作業(yè)的其他進(jìn)程。
要一開始就創(chuàng)建運行多個進(jìn)程的 MPI 作業(yè),請使用 mpirun 實用程序。例如,如果您要使用總共 8 個進(jìn)程在 2 個節(jié)點上運行我們的示例 MPI 程序,可以使用以下命令:
mpirun -np 8 -host hostname1,hostname2 hello.x
有幾個選項可以與 mpirun 一起用來控制綁定、布局、輸出重定向等等。通過執(zhí)行 mpirun -h 或 man mpirun 可以獲取有關(guān)這些選項的更多信息。