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中删除