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