Oracle外部調(diào)用及進(jìn)程終止
?
??? 關(guān)于Oracle外接的一些接口,這方面很不熟悉,所以這塊內(nèi)容說實(shí)話沒怎么看明白,摘錄到這邊,留著等以后學(xué)習(xí)使用。
?
一、如何連接外部過程
?
??? 外部過程是從另外的程序中調(diào)用的過程,一般會(huì)采用不同的語言編碼,例如調(diào)用C、Java子程序等。Oracle提供了一個(gè)特殊的接口“調(diào)用規(guī)范”,這個(gè)接口允許用戶調(diào)用使用其他語言編寫的外部過程。
?
??? 要調(diào)用外部過程,首先激活網(wǎng)絡(luò)監(jiān)聽進(jìn)程。網(wǎng)絡(luò)監(jiān)聽進(jìn)程第一步啟動(dòng)外部過程代理(默認(rèn)名為extproc);第二步建立起網(wǎng)絡(luò)連接;第三步將DLL名稱、外部過程名稱以及參數(shù)傳遞給外部過程代理;然后外部代理裝在DLL并運(yùn)行外部過程;最后將返回值傳回應(yīng)用采用程序。
?
??? 1、配置一個(gè)調(diào)用外部過程環(huán)境
?
????? ① 編輯tnsname.ora文件,添加一個(gè)入口連接到監(jiān)聽進(jìn)程(以及隨后的外部過程代理)
????? ② 編輯listener.ora文件,為外部過程監(jiān)聽進(jìn)程添加一個(gè)入口
????? ③ 啟用一個(gè)單獨(dú)的監(jiān)聽進(jìn)程來專門處理外部過程
????? ④ 限制單獨(dú)的監(jiān)聽進(jìn)程權(quán)限,不能讀寫數(shù)據(jù)庫(kù)或Oracle服務(wù)器地址空間的權(quán)限
????? ⑤ 若外部過程代理在一臺(tái)遠(yuǎn)程計(jì)算機(jī)上,那么可以講訪問的外部過程代理設(shè)置在4ORACLE_HOME/BIN路徑
?
??? 2、編輯tnsname.ora文件
?
??? EXTPROC_CONNECTION_DATE=
??? (DESCRIPTION=
??? (ADDRESS=(PROTOCOL=ipc)(KEY=extproc_key))
??? (CONNECT_DATA=
??? (SID=extproc_agent)))
?
??? 關(guān)鍵字為extproc_key,它必須與listener.ora文件中指定的KEY值一致,而extproc_agent也必須與listener.ora文件中的SID_NAME一致
?
??? 3、編輯listener.ora文件
?
??? LISTENER=
??? (DESCRIPTION=
??? (ADDRESS=
(PROTOCOL=ipc)(KEY=extproc_key)))
??? SID_LIST_LISTENER=
??? (SID_LIST=
??? (SID_DESC=(SID_NAME=extproc_agent)(ORACLE_HOME=/u1/app/oracle/9.0)(PROGRAM=extproc)))
?
??? PROGRAM參數(shù)值extproc以便于默認(rèn)的外部過程代理的名稱一致。
?
?
二、終止對(duì)話
?
??? 1、終止對(duì)話
?
??? ALTER SYSTEM KILL SESSION '7,15';
?
??? 7代表該會(huì)話的系統(tǒng)標(biāo)識(shí)號(hào),15代表串行號(hào)
?
??? 2、識(shí)別要終止的對(duì)話
?
??? SELECT SID, SERIAL#, STATUS
????? FROM V$SESSION
???? WHERE USERNAME = 'JWARD';
?
??? 3、終止處于激活狀態(tài)的對(duì)話
?
??? 當(dāng)SESSION處于ACTIVE狀態(tài)時(shí)KILL SESSION,則事務(wù)將被回滾,而且收到消息:
??? ORA-00028:your session has been killed
?
??? 在收到ORA-00028后如果重新連接到數(shù)據(jù)庫(kù)錢提交了另外語句,則Oracle返回:
??? ORA-01012:not logged on
?
??? 當(dāng)SESSION在執(zhí)行網(wǎng)絡(luò)I/O或回滾某個(gè)事務(wù)時(shí)無法被KILL,只能等操作完成。
??? ALTER SYSTEM終止對(duì)話需要等待60秒的終止過程,不能被終止的操作執(zhí)行超過60秒則將其表示為“已被終止”
?
??? 4、非激活狀態(tài)SESSION被KILL的情況
?
??? 非激活的SESSION被KILL后不會(huì)立即收到ORA-00028消息,只有再次試圖使用時(shí)才會(huì)返回。
?
??? 非激活狀態(tài)SESSION被KILL后會(huì)在V$SSESSION視圖中的STATUS標(biāo)記為KILLED,
??? 當(dāng)用戶試圖再次使用該會(huì)話時(shí),該會(huì)話信息才會(huì)從V$SSESSION中刪除
?
?
?
?