默认安装时,会安装一个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/

  1. 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

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

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

  1. oracle中的listener.ora和tnsnames.ora

    一.oracle的客户端与服务器端 oracle在安装完成后服务器和客户端都需要进行网络配置才能实现网络连接.    服务器端配置监听器,客户端配置网络服务名. 服务器端可配置一个或多个监听程序 . ...

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

    不论是单实例还是RAC,对于非缺省端口下(1521)的监听器,pmon进程不会将service/instance注册到监听器,即不会实现动态注册.与单实例相同,RAC非缺省端口的监听器也是通过设置参数 ...

  3. 记录一份Oracle 正确的监听配置文件listener.ora与tnsnames.ora

    一.前言 昨天中午接到领导指示,有其他组的负责人B在厄瓜多尔演示他们组的产品,然后我们组的负责人就想说也在那边搭一套环境,(北美那边的亚马逊云环境),让B帮忙演示下我们的系统. 于是,开始了一个比较曲 ...

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

    oracle网络配置三个配置文件 listener.ora.sqlnet.ora.tnsnames.ora ,都是放在$ORACLE_HOME/network/admin目录下.1. sqlnet.o ...

  5. oracle安装完成后目录中不论有没有tnsnames.ora和listener.ora文件 PLSQL都能连上的问题解决方法

    今天遇到这个问题了,发现listener.ora文件和tnsnames.ora文件在Net Work文件夹下没有,正常情况下安装完oracle或者是oracle Client是会有的,但是在Net M ...

  6. oracle三个网络配置文件(listener.ora、tnsname.ora、sqlnet.ora)的作用

    oracle网络配置 三个配置文件 listener.ora.sqlnet.ora.tnsnames.ora ,都是放在$ORACLE_HOME\network\admin目录下. 1.  sqlne ...

  7. oracle的listener.ora sqlnet.ora tnsnames.ora三个文件的关联性

    学习:http://www.cnblogs.com/william-lee/archive/2010/10/20/1856261.html 之前因为安装的是windows server 2008 r2 ...

  8. oracle: listener.ora 、sqlnet.ora 、tnsnames.ora的配置及例子

    1.解决问题:TNS或者数据库不能登录.      最简单有效方法:使用oracle系统提供的工具 netca 配置(把原来的删除掉重新配置)     $netca  2.然而,仍有疑问:如何指定'l ...

  9. oracle的sqlnet.ora,tnsnames.ora,listener.ora三个配置文件

    总结: 1 .三个配置文件都是放在$ORACLE_HOME\network\admin目录下. 2 .sqlnet.ora确定解析方式 3 .listener.ora上设SID_NAME,通常用于JD ...

随机推荐

  1. DP:树DP

    The more, The Better Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  2. 玩转html5(二)----用canvas结合脚本在画布上画简单的图(html5又一强大功能)

    在html5中可以使用canvas标签在画布上画图,先直接上代码,这篇文章先简单介绍一下canvas的使用方法,简单画几个圆,矩形,三角形,写字. 在代码中均给出了注释,在这里特别强调的一点是:使用c ...

  3. 使用邮件发送执行时间久的SQL语句

    ALTER proc [dbo].[usp_EmailLongRunningSQL] as begin declare@LongRunningQueries AS TABLE ( lrqId int ...

  4. hdu 4944 FSF’s game(数论)

    题目链接:hdu 4944 FSF's game 题目大意:给定N,能够用不大于N的长a和宽b.组成N∗(N−1)2种不同的矩形,对于每一个矩形a∗b要计算它的值,K为矩形a,b能够拆分成若干个K∗K ...

  5. LayoutInflater使用

    在实际工作中,事先写好的布局文件往往不能满足我们的需求,有时会依据情况在代码中自己定义控件,这就须要用到LayoutInflater.LayoutInflater在Android中是“扩展”的意思,作 ...

  6. Tomcat部署发布JSP应用程序的三种方法 (转)

    Tomcat部署发布JSP应用程序的三种方法     1.直接放到Webapps目录下      Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应 ...

  7. java Double保留小数点位数

    0和#都是占位符,但在不同的地方,作用不一样0: 比实际数字的位数多,不足的地方用0补上. new DecimalFormat("00.00").format(3.14) //结果 ...

  8. 《数据结构、算法及应用》9.(C++实施订单)

    最近阅读<数据结构.算法及应用>这本书,书中的习题汇总,用自己的方法来实现这些问题.可能效率.等方面存在着非常多的问题,也可能是错误的实现.假设大家在看这本书的时候有更优更好的方法来实现, ...

  9. [LeetCode55]Jump Game

    题目: Given an array of non-negative integers, you are initially positioned at the first index of the ...

  10. C# 读取IE缓存文件(2)

    private void button1_Click(object sender, EventArgs e) { , nBufSize; IntPtr buf; INTERNET_CACHE_ENTR ...