ITPub博客

首页 > 数据库 > Oracle > 监听配置细节参数详解两则

监听配置细节参数详解两则

原创 Oracle 作者:zhcunique 时间:2021-03-23 08:35:05 0 删除 编辑
  1. Listener.ora中的ADR_BASE_LISTENER参数是什么意思?
    ADR_BASE_LISTENER=/u01/app


    用来指定监听的log和trace放在哪里。
    Purpose
    To specify the base directory in to which tracing and logging incidents are stored when ADR is enabled.
    Default
    The default is ORACLE_BASE, or ORACLE_HOME/log if ORACLE_BASE is not defined.
    Values
    Any valid directory path to a directory with write permission.

  2. (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))是什么意思?

    在编程过程中,我们可能会发现有些功能通过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 连接字符串名称,如果成功,则说明监听没有问题。
    [oracle@book admin]$ tnsping EXTPROC_CONNECTION_DATA


    下面用例子说明上面内容。
    接下来,我们创建一个C语言编写的函数,如下:
    [oracle@book ~]$ vi calc_tax.c
    calc_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 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。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69994536/viewspace-2764312/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
先后就职于银行、券商等金融机构科技部门,从事数据库管理、自动化运维管理与系统运维相关工作,拥有Oracle 11g OCM/OCP证书,通过CFA二级考试。

注册时间:2021-02-04

  • 博文量
    73
  • 访问量
    499676