博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
listener.ora中PLSExtPro 和ExtProc的作用(转)
阅读量:6177 次
发布时间:2019-06-21

本文共 3551 字,大约阅读时间需要 11 分钟。

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

在编程过程中,我们可能会发现有些功能通过完成会很麻烦,而通过++语言编程则会容易很多。因此,Oracle提供了在程序里直接调用外部函数(包括C函数或Java方法)的功能。调用外部函数的过程如下:——用户进程执行程序。——在执行的PL/SQL程序过程中,调用了一个++语言写的函数: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 连接字符串名称,如果成功,则说明监听没有问题。[oracle@book admin]$ tnsping EXTPROC_CONNECTION_DATA
下面用例子说明上面内容。
接下来,我们创建一个C语言编写的函数,如下:[oracle@book ~]$ vi calc_tax.ccalc_tax(n)int n;{int tax;tax=(n*15)/100;return(tax);}该函数完成的功能非常简单,计算传入参数的15%,并作为税额返回给调用者。将calc_tax.c文件编译成,并将生成的库文件复制到$ORACLE_HOME/bin目录下:[oracle@book ~]$ cc -shared -o calc_tax.so calc_tax.c[oracle@book ~]$ cp calc_tax.so $ORACLE_HOME/bin然后,我们创建一个别名库,用来说明将要调用的C函数所在的库文件,并将使用c_code别名库的权限赋给HR用户:SQL> connect / as sysdbaSQL> 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/hrSQL> create or replace function call_c2 (x binary_integer)3 return binary_integer4 as language c5 library sys.c_code6 name "calc_tax";7 /在调用声明里定义了calc_tax函数的传入传出参数、所在的别名库名称(library sys.c_code 部分)以及在中的函数名(name "calc_tax")等。现在,我们就可以通过调用call_c,进而调用calc_tax函数了。如下所示:SQL> set serveroutput onSQL> 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

 

你可能感兴趣的文章
Github创建分支
查看>>
转换PHP脚本成为windows的执行程序
查看>>
Python组织文件 实践:将带有美国风格日期的文件改名为欧洲风格日期
查看>>
实现iOS7上tableView的切割线像iOS6中的效果
查看>>
使用阿里云接口进行银行卡四要素实名认证
查看>>
聊聊excel生成图片的几种方式
查看>>
20 万网络节点背后的数据创新应用
查看>>
理论 | 朴素贝叶斯模型算法研究与实例分析
查看>>
docker安装gitlab只需要3分钟
查看>>
Android菜鸟学习js笔记 一
查看>>
Java基础之SPI机制
查看>>
使用js控制滚动条的位置
查看>>
【Tornado源码阅读笔记】tornado.web.Application
查看>>
lsyncd搭建测试
查看>>
移动web开发之像素和DPR
查看>>
nginx+tomcat+redis实现session共享
查看>>
UWP VirtualizedVariableSizedGridView 支持可虚拟化可变大小Item的View(二)
查看>>
rsync 介绍
查看>>
做一个合格的Team Leader -- 基本概念
查看>>
leetcode 190 Reverse Bits
查看>>