listener.ora中PLSExtPro 和ExtProc的作用(转)

默认安装时,会安装一个PL/SQL外部程序(ExtProc)条目在listener.ora中,是oracle为调用外部程序默认配置的监听,它的名字通常是ExtProc或PLSExtProc,但一般不会使用它,可以直接从listener.ora中将这项移除,因为对ExtProc已经有多种攻击手段了,在不使用外部程序时,oracle也是建议删除的。

PLSExtPro 是pl/sql   external  procdure 的意思,就是在pl/sql中调用外部语句,如c,java写的过程。

现在,Oracle已经全面支持JAVA了,这东西也就过时了,之所以继续保留是考虑到兼容以前老版本的数据库实例。

 有时可能会在多个数据库实例之间拷贝listener.ora,请检查拷贝来的文件中是否含有不需要的服务,确保只留下的确需要的服务项目,减少监听器受攻击的面。

http://blog.chinaunix.net/uid-23177306-id-2531135.html

典型的listener.ora 文件内容:

SID_LIST_LISTENER =   (注册到监听器的service name所在区域)
  (SID_LIST =
    (SID_DESC =       (对外部过程调用的服务名)
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/product/oracle)
      (PROGRAM = extproc)
    )
  )

LISTENER =     (监听名称)
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = franklindb)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))   (对外部过程调用的监听信息)
    )
  )

-- 备注 --   
     默认安装时,会安装一个PL/SQL外部程序(ExtProc)条目在listener.ora中,
是oracle为调用外部程序默认配置的监听,它的名字通常是ExtProc或PLSExtProc,
但一般不会使用它。可以直接从listener.ora中将这项移除,因为对ExtProc已经有多
种攻击手段了,在不使用外部程序时,oracle也是建议删除的。
  PLSExtProc是pl/sql external procdure的意思,就是在pl/sql中调用外部语句,
如c、java写的过程。现在,Oracle已经全面支持JAVA了,这东西也就过时了,之所以
继续保留是考虑到兼容以前老版本的数据库。
  有时可能会在多个数据库实例之间拷贝listener.ora,检查拷贝来的文件中是否
含有不需要的服务,确保只留下的确需要的服务项目,减少监听器受攻击的面。
http://blog.itpub.net/24419958/viewspace-673107/

tnsnames.ora默认会有如下内容EXTPROC_CONNECTION_DATA =  (DESCRIPTION =  (ADDRESS_LIST =  (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))  )  (CONNECT_DATA =  (SID = PLSExtProc)  (PRESENTATION = RO)  )  )    这个主要用于调用外部过程。如使用全文检索时就需要设置EXTPROC_CONNECTION_DATA一般对我们是没啥用的

http://zhidao.baidu.com/link?url=IadLwPA4XM6C2K26tf8qKgplbB5eJZvMukPfpCBTpw1Ro17PhADnWsPwh515aZyooViYKeCTokh3Vyqeqc92fq

在编程过程中,我们可能会发现有些功能通过PL/SQL完成会很麻烦,而通过C/C++语言编程则会容易很多。因此,Oracle提供了在PL/SQL程序里直接调用外部函数(包括C函数或Java方法)的功能。调用外部函数的过程如下:
——用户进程执行PL/SQL程序。
——在执行的PL/SQL程序过程中,调用了一个C/C++语言写的函数:c_func。这里需要借助别名库(Alias Library)。别命苦是数据库里的一个对象,用来描述一个外部函数所在的动态链接库的路径和名称。通过别名库,从而可以知道调用的外部函数在哪个文件里。
——PL/SQL将对外部函数的调用请求发给监听器。
——监听器生成一个extproc进程,该进程专门用来处理对外部函数的调用。每个session都会生成一个属于该session的extproc进程,并且在整个session生命周期里,extproc进程会一直存在。
——Extproc进程负责将别名库所指定的动态链接库文件加载到内存。
——Extproc进程执行指定的外部函数,并将结果返回给服务器进程,进而返回给用户进程。
需要对监听器进行配置(在listener.ora文件中配置),从而启动extproc进程。其中“(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))”说明监听extproc进程请求的地址;而SID_DESC部分则说明extproc进程的连接信息。
然后我们还要配置tnsnames.ora文件,注意,该文件也必须位于数据库服务器端(应该是说,tnsname.ora文件的以下内容属于数据库客户端的)。我们需要添加如下内容:
EXTPROC_CONNECTION_DATA=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))
)
(CONNECT_DATA=
(SID=PLSExtProc)
)
)
配置完毕以后,可以尝试tnsping 连接字符串名称,如果成功,则说明监听没有问题。
[[email protected] admin]$ tnsping EXTPROC_CONNECTION_DATA
下面用例子说明上面内容。
接下来,我们创建一个C语言编写的函数,如下:
[[email protected] ~]$ vi calc_tax.c
calc_tax(n)
int n;
{
int tax;
tax=(n*15)/100;
return(tax);
}
该函数完成的功能非常简单,计算传入参数的15%,并作为税额返回给调用者。
将calc_tax.c文件编译成动态链接库,并将生成的库文件复制到$ORACLE_HOME/bin目录下:
[[email protected] ~]$ cc -shared -o calc_tax.so calc_tax.c
[[email protected] ~]$ cp calc_tax.so $ORACLE_HOME/bin
然后,我们创建一个别名库,用来说明将要调用的C函数所在的库文件,并将使用c_code别名库的权限赋给HR用户:
SQL> connect / as sysdba
SQL> create or replace library c_code as '$ORACLE_HOME/bin/calc_tax.so';
2 /
SQL> grant execute on c_code to hr;
要使用这个calc_tax函数,还需要在数据库里创建一个调用声明。如下所示:
SQL> connect hr/hr
SQL> create or replace function call_c
2 (x binary_integer)
3 return binary_integer
4 as language c
5 library sys.c_code
6 name "calc_tax";
7 /
在调用声明里定义了calc_tax函数的传入传出参数、所在的别名库名称(library sys.c_code 部分)以及在动态链接库中的函数名(name "calc_tax")等。
现在,我们就可以通过调用call_c,进而调用calc_tax函数了。如下所示:
SQL> set serveroutput on
SQL> var v_salary number;
SQL> var v_tax number;
SQL> exec :v_salary := 10000;
SQL> exec :v_tax := call_c(:v_salary);
SQL> print v_tax;
V_TAX
-----------
1500
从返回结果可以看到,我们成功调用了C函数calc_tax。http://blog.csdn.net/haiross/article/details/12912195

 

时间: 2015-10-16

listener.ora中PLSExtPro 和ExtProc的作用(转)的相关文章

Oracle的网络三大配置文件(sqlnet.ora、tnsnames.ora、listener.ora)

Oracle的网络三大配置文件(sqlnet.ora.tnsnames.ora.listener.ora)   blog文档结构图: 1  说明 为了使得外部进程能够访问Oracle 数据库则必须配置Oracle 网络服务器环境配置, Oracle 网络服务器环境是通过配置listener.ora .sqlnet.ora 和 tnsnames.ora 共三个文件来进行的.由于oracle数据库是一个客户端服务器的软件,所以,首先需要接收来自客户端的连接请求,服务器就必须配置监听器:其次,客户端要

ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)

        不论是单实例还是RAC,对于非缺省端口下(1521)的监听器,pmon进程不会将service/instance注册到监听器,即不会实现动态注册.与单实例相同,RAC非缺省端口的监听器也是通过设置参数local_listener来达到目的.除此之外,还可以对实例进行远程注册,以达到负载均衡的目的.这是通过一个参数remote_listener来实现.   有关Oracle 网络配置相关基础以及概念性的问题请参考:      配置ORACLE 客户端连接到数据库   配置非默认端口

oracle的sqlnet.ora , tnsnames.ora , Listener.ora 文件的作用(转)

oracle网络配置三个配置文件 listener.ora.sqlnet.ora.tnsnames.ora ,都是放在$ORACLE_HOME/network/admin目录下.1. sqlnet.ora-----作用类似于linux或者其他unix的nsswitch.conf文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串.例如我们客户端输入sqlplus sys/[email protected]假如我的sqlnet.ora是下面这个样子SQLNET.AUTHENTICATION_SERVIC

listener.ora,tnsnames.ora中一个空格的威力

最近几天被网络监听配置搞得焦头烂额,有时候配置没问题,有时候就出莫名其妙的问题,今天专门花时间总结了一下,希望对大家有所帮助. listener.ora,tnsnames.ora有时候没有netca,netmgr这样的图形工具来创建的时候,只能手工来做,手工做的时候会有一些格式的问题,多加一个空格,或者少一个空格,就会有不同的结果. 案例一 下面是一个监听的基本配置,我故意在前面多加了一个空格(黄色标记所示).  LISTE1=   (DESCRIPTION=     (ADDRESS_LIST

ORACLE RAC 监听配置 (listener.ora tnsnames.ora)

    Oracle RAC 监听器的配置与单实例稍有不同,但原理和实现方法基本上是相同的.在Oracle中 tns进程用于为指定网络地址上的一个或多个Oracle 实例提供服务注册,并响应来自客户端对该服务提出的连接请求.一旦连接请求到达,并派生出一个服务器进程建立服务器与用户端之间的连接(专有服务器dedicated server)或转发服务请求(共享服务器模式shared server).如果监听器知道多于一个实例提供所请求的服务,则可能会根据客户端与服务器端相关配置将请求定位到较低负载的

Oracle Net Listener Parameters (listener.ora)(转)

  12/20 7 Oracle Net Listener Parameters (listener.ora) This chapter provides a complete listing of the listener.ora file configuration parameters. This chapter contains these topics: Overview of Oracle Net Listener Configuration File Oracle Net List

ORACLE专家级问题:请问listener.ora文件是干什么用的

问题描述 1.这个文件是什么时候创建的,安装数据库软件? 还是安装数据实例?2.如果执行lsnrctl start会读取 listener.ora 文件,那为什么我现在服务器上面 $HOME/product/11g/network/admin 都被我删除了, 监听服务还可以启动?3.lsnrctl 服务启动的原理是什么? 问题补充:up2pu 写道 解决方案 lz很有专研精神啊 哈哈.解决方案二:1,listener.ora文件在创建数据库实例的时候,提供的tnsname到主机名或者ip的对应.

Oracle环境变量、监听listener.ora、tnsnames.ora、sqlnet.ora配置

Oracle环境变量.监听listener.ora.tnsnames.ora.sqlnet.ora配置 点击(此处)折叠或打开 NLS_DATE_FORMAT=YYYY-MM-DD HH24:mi:ss NLS_LANG=AMERICAN_CHINA.ZHS16GBK ORACLE10G=D:\Program files\app\oracle\product\10.2.0\db_1 ORACLE11G=D:\Program files\app\oracle\product\11.2.0.1\db

一个listener.ora配置细节的问题

今天做练习的时候,发现一个问题,可能是很小的细节问题,但确实稍微折腾了一下,记录于此,方便以后查阅. 问题现象: 1. 配置listener.ora静态监听. 2. 使用静态监听创建EM. 3. 使用sqlplus system/[email protected]或EZCONNECT方式,也提示错误: 4. 使用sqlplus / as sysdba可以正常登录. 问题排查: 1. 看报错,ORA-01034错误,给出了几种可能: (1) SGA不足. > 我是跑着虚拟机,sqlplus / as sysdb