Decode360's Blog

          業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
          Oracle外部調(diào)用及進程終止
          ?
          ??? 關(guān)于Oracle外接的一些接口,這方面很不熟悉,所以這塊內(nèi)容說實話沒怎么看明白,摘錄到這邊,留著等以后學習使用。
          ?
          一、如何連接外部過程
          ?
          ??? 外部過程是從另外的程序中調(diào)用的過程,一般會采用不同的語言編碼,例如調(diào)用C、Java子程序等。Oracle提供了一個特殊的接口“調(diào)用規(guī)范”,這個接口允許用戶調(diào)用使用其他語言編寫的外部過程。
          ?
          ??? 要調(diào)用外部過程,首先激活網(wǎng)絡監(jiān)聽進程。網(wǎng)絡監(jiān)聽進程第一步啟動外部過程代理(默認名為extproc);第二步建立起網(wǎng)絡連接;第三步將DLL名稱、外部過程名稱以及參數(shù)傳遞給外部過程代理;然后外部代理裝在DLL并運行外部過程;最后將返回值傳回應用采用程序。
          ?
          ??? 1、配置一個調(diào)用外部過程環(huán)境
          ?
          ????? ① 編輯tnsname.ora文件,添加一個入口連接到監(jiān)聽進程(以及隨后的外部過程代理)
          ????? ② 編輯listener.ora文件,為外部過程監(jiān)聽進程添加一個入口
          ????? ③ 啟用一個單獨的監(jiān)聽進程來專門處理外部過程
          ????? ④ 限制單獨的監(jiān)聽進程權(quán)限,不能讀寫數(shù)據(jù)庫或Oracle服務器地址空間的權(quán)限
          ????? ⑤ 若外部過程代理在一臺遠程計算機上,那么可以講訪問的外部過程代理設置在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以便于默認的外部過程代理的名稱一致。
          ?
          ?
          二、終止對話
          ?
          ??? 1、終止對話
          ?
          ??? ALTER SYSTEM KILL SESSION '7,15';
          ?
          ??? 7代表該會話的系統(tǒng)標識號,15代表串行號
          ?
          ??? 2、識別要終止的對話
          ?
          ??? SELECT SID, SERIAL#, STATUS
          ????? FROM V$SESSION
          ???? WHERE USERNAME = 'JWARD';
          ?
          ??? 3、終止處于激活狀態(tài)的對話
          ?
          ??? 當SESSION處于ACTIVE狀態(tài)時KILL SESSION,則事務將被回滾,而且收到消息:
          ??? ORA-00028:your session has been killed
          ?
          ??? 在收到ORA-00028后如果重新連接到數(shù)據(jù)庫錢提交了另外語句,則Oracle返回:
          ??? ORA-01012:not logged on
          ?
          ??? 當SESSION在執(zhí)行網(wǎng)絡I/O或回滾某個事務時無法被KILL,只能等操作完成。
          ??? ALTER SYSTEM終止對話需要等待60秒的終止過程,不能被終止的操作執(zhí)行超過60秒則將其表示為“已被終止”
          ?
          ??? 4、非激活狀態(tài)SESSION被KILL的情況
          ?
          ??? 非激活的SESSION被KILL后不會立即收到ORA-00028消息,只有再次試圖使用時才會返回。
          ?
          ??? 非激活狀態(tài)SESSION被KILL后會在V$SSESSION視圖中的STATUS標記為KILLED,
          ??? 當用戶試圖再次使用該會話時,該會話信息才會從V$SSESSION中刪除
          ?
          ?
          ?
          ?
          posted on 2008-11-19 19:43 decode360 閱讀(336) 評論(0)  編輯  收藏 所屬分類: 08.DBA
          主站蜘蛛池模板: 汝城县| 个旧市| 长岛县| 黄骅市| 天气| 富源县| 北京市| 北海市| 溧水县| 许昌市| 洛隆县| 贵德县| 大余县| 新邵县| 普格县| 井研县| 仁化县| 大冶市| 集贤县| 广饶县| 耿马| 台南市| 平罗县| 伊宁市| 那曲县| 安福县| 清涧县| 济宁市| 曲阳县| 中宁县| 绩溪县| 类乌齐县| 大宁县| 益阳市| 介休市| 铜山县| 宜城市| 清远市| 赤水市| 潞城市| 禹州市|