Oracle外部调用及进程终止

Oracle外部调用及进程终止
一、如何连接外部过程
 
    外部过程是从另外的程序中调用的过程,一般会采用不同的语言编码,例如调用C、Java子程序等。Oracle提供了一个特殊的接口“调用规范”,这个接口允许用户调用使用其他语言编写的外部过程。
 
    要调用外部过程,首先激活网络监听进程。网络监听进程第一步启动外部过程代理(默认名为extproc);第二步建立起网络连接;第三步将DLL名称、外部过程名称以及参数传递给外部过程代理;然后外部代理装在DLL并运行外部过程;最后将返回值传回应用采用程序。
 
    1、配置一个调用外部过程环境
 
      ① 编辑tnsname.ora文件,添加一个入口连接到监听进程(以及随后的外部过程代理)
      ② 编辑listener.ora文件,为外部过程监听进程添加一个入口
      ③ 启用一个单独的监听进程来专门处理外部过程
      ④ 限制单独的监听进程权限,不能读写数据库或Oracle服务器地址空间的权限
      ⑤ 若外部过程代理在一台远程计算机上,那么可以讲访问的外部过程代理设置在4ORACLE_HOME/BIN路径
 
    2、编辑tnsname.ora文件
 
    EXTPROC_CONNECTION_DATE=
    (DESCRIPTION=
    (ADDRESS=(PROTOCOL=ipc)(KEY=extproc_key))
    (CONNECT_DATA=
    (SID=extproc_agent)))
 
    关键字为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参数值extproc以便于默认的外部过程代理的名称一致。
 
 
二、终止对话
 
    1、终止对话
 
    ALTER SYSTEM KILL SESSION '7,15';
 
    7代表该会话的系统标识号,15代表串行号
 
    2、识别要终止的对话
 
    SELECT SID, SERIAL#, STATUS
      FROM V$SESSION
     WHERE USERNAME = 'JWARD';
 
    3、终止处于激活状态的对话
 
    当SESSION处于ACTIVE状态时KILL SESSION,则事务将被回滚,而且收到消息:
    ORA-00028:your session has been killed
 
    在收到ORA-00028后如果重新连接到数据库钱提交了另外语句,则Oracle返回:
    ORA-01012:not logged on
 
    当SESSION在执行网络I/O或回滚某个事务时无法被KILL,只能等操作完成。
    ALTER SYSTEM终止对话需要等待60秒的终止过程,不能被终止的操作执行超过60秒则将其表示为“已被终止”
 
    4、非激活状态SESSION被KILL的情况
 
    非激活的SESSION被KILL后不会立即收到ORA-00028消息,只有再次试图使用时才会返回。
 
    非激活状态SESSION被KILL后会在V$SSESSION视图中的STATUS标记为KILLED,
    当用户试图再次使用该会话时,该会话信息才会从V$SSESSION中删除
 
 
 




-The End-

你可能感兴趣的:(Oracle外部调用及进程终止)