`

[转]数据库存储过程中利用extproc调用共享程序库/动态链接库,间接可以实现调用操作系统命令

阅读更多

1 数据库程序库
主要介绍使用ORACLE数据库的LIBRARY功能访问操作系统的共享程序库或动态链接库(DLL)
1.1 环境设置
l 检查extproc程序是否安装正确,在操作系统下,运行:
$  $ORACLE_HOME/bin//extproc
若显示结果为以下字样,则表示安装正确
Oracle Corporation --- WEDNESDAY JAN 24 2007 14:58:30.598
Heterogeneous Agent Release 10.1.0.4.0 – Production
l 检查环境变量是否设置正确:
$  echo $LD_LIBRARY_PATH
结果应该为:
$ORACLE_HOME/lib:/usr/lib:$ORACLE_HOME/ctx/lib
如果不是,则需要在数据库德操作系统用户的配置文件中设置
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:$ORACLE_HOME/ctx/lib
export LD_LIBRARY_PATH

1.2 数据库设置
数据库的缺省设置中一般都已经存在,若没有,请增加相关部分的内容
1.2.1 listener.ora文件设置
确认extproc的相关设置已经存在该文件中,没有则增加。
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = cmstest)
      (ORACLE_HOME = /u01/app/oracle/product/10.1.0/Db_1)
      (SID_NAME = cmstest)
    )
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/10.1.0/Db_1)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.30.2.21)(PORT = 1521))
    (ADDRESS= (PROTOCOL= IPC)(KEY= EXTPROCTEST))
  )
修改该文件后,需要重新启动监听程序:
$ORACLE_HOME/bin/lsnrctl stop
$ORACLE_HOME/bin/lsnrctl start
1.2.2 tnsnames.ora文件设置
如果没有extproc_connection_data,则需要增加,注意名称不能改变,若sqlnet.ora中要求有domain的附加信息,则可以按照要求增加,如extproc_connection_data.zte.com.cn
另外,KEY和SID需要与listener.ora中的保持一致。
extproc_connection_data =
    (DESCRIPTION=
         (ADDRESS_LIST =
             (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROCTEST))
        )
        (CONNECT_DATA=
            (SID=PLSExtProc)
        ) )
1.3 使用举例
l 编写一个调用操作系统命令的程序,采用编辑器,编写一个C程序:extproc.c
---- 程序代码开始 ---------
int sysrun(char *command)
    {
     return system(command);
    }
----- 程序代码结束 --------
l 使用make命令,将C程序编译成为.so程序
make –f $ORACLE_HOME/rdbms/demo/demo_rdbms.mk extproc_no_context SHARED_LIBNAME=extproc.so OBJS=extproc.o
l 将文件extproc.so复制到目录$ORACLE_HOME/lib下
cp extproc.so $ORACLE_HOME/lib/.
l 在数据库中,创建程序库
SQL> create or replace library shell_lib as ‘$ORACLE_HOME/lib/extproc.so’;
l 创建数据库存储过程,与extproc中的程序建立联系
create or replace procedure sysrun(syscomm in varcha2) as
     language C
     name “sysrun”
     library shell_lib
     parameters(syscomm string);
l 这样,就可以运行操作系统得命令了,如:
Begin
  -- 列出目录下的所有文件名到文件j01.txt中
  sysrun('/bin/ls -l >/tmp/j01.txt');
  -- 运行sql*loader工具
  Sysrun(’$ORACLE_HOME/bin/sqlldr userid=<连接串> control=<控制文件名>’);
end;

分享到:
评论

相关推荐

    SQLServer存储过程调用WebService

    ### SQL Server 存储过程中调用 WebService 的实现方法 #### 一、引言 在企业级应用开发中,Web Service 作为一种标准的接口技术,被广泛用于不同平台之间的服务交互。而在 SQL Server 数据库中直接调用 Web ...

    oracle,如何在plsql里调用C语言写的程序,OCP漫漫路途之调用[收集].pdf

    2. PL/SQL调用的C函数需要通过别名库(Alias Library)来定位,别名库在数据库中定义,包含了外部函数所在动态链接库的路径和名称。 3. PL/SQL将调用请求发送给监听器。 4. 监听器启动一个extproc进程,该进程专用于...

    为oracle增加系统调用接口

    本示例通过创建用户、权限分配、编写C语言程序以及在Oracle环境中部署这些程序来实现系统调用接口。 #### 创建用户及权限配置 首先,需要创建一个专门用于此目的的用户,并赋予相应的权限: 1. **创建用户**:...

    Oracle外部过程在高性能海量数据处理中的应用.pdf

    这个监听程序产生一个可执行程序extproc,extproc加载动态库,调用共享库中的适当例程,并将调用结果返回给PL/SQL。每次不同的外部过程调用时,extproc会加载相关的共享库,但仅限于它尚未被加载的情况。 对于性能...

    Oracle8i PL_SQL外部过程在海量数据处理中的应用.pdf

    外部过程通常被存储在服务器端的共享库或动态链接库中。当客户端应用程序需要执行这些过程时,PL/SQL会与Oracle的监听进程进行通信,监听进程启动一个专门的代理进程extproc。这个代理进程负责加载共享库,并执行...

    Oracle数据库系统安全配置.pdf

    Oracle数据库系统安全配置是确保数据安全的关键环节,尤其是在Linux或Unix操作系统环境下。本文将深入探讨其中的几个关键配置步骤,以增强Oracle数据库系统的安全性。 首先,对于安全补丁的更新加固,保持数据库...

    两个oracle数据库的监听的配置

    在Oracle环境中,为了实现高可用性和资源的有效利用,经常会遇到需要在同一台服务器上部署多个Oracle实例的情况。这种部署模式被称为“Oracle双实例”或者“多实例”。本文将详细介绍如何配置Oracle双实例的监听器...

    ArcGIS连接SDE 在数据库连接处添加数据库连接之前必须安装oracle client客户端库

    - **额外配置**:如果需要通过非ArcGIS的客户端应用程序连接数据库,则可能还需要在tnsnames.ora文件(Oracle 10g)或extproc.ora文件(Oracle 11g)中添加相应的条目,并设置相应环境变量,如ORA_HOME和PATH等。...

    通过ORACLE通用连接访问SQLServer数据库的方法

    通过Oracle通用连接访问SQL Server数据库...通过以上步骤,我们可以成功地在Oracle环境中建立与SQL Server数据库之间的连接,实现跨数据库的数据访问和操作。这对于需要整合多个不同数据库系统的应用场景来说尤为重要。

    oracle通过odbc建立dblink访问sqlserver数据库

    ODBC是一种标准的数据库访问接口,允许应用程序通过动态链接库(DLL)与多种数据库管理系统进行通信。这种通信层充当了一个中间件的角色,使得应用程序能够独立于特定的数据库系统进行开发,从而增强了程序的可移植...

    Oracle11g结合ArcGIS10.2建立空间数据库ST_Geometry类库配置

    - 配置过程中需要注意数据库连接信息、空间参考系统等参数。 - 配置完成后,可能会遇到如文中所述的问题——“ST_Geometry形状库路径可能无效,或者未在Oracle实例中正确配置EXTPROC”。 #### 三、解决ST_...

    数据库操作

    根据给定的信息,本文将详细解析“数据库操作”的核心知识点,并着重探讨Oracle数据库中的关键概念与操作命令。 ### 数据库操作概述 数据库操作是管理、维护及查询数据库中数据的一系列过程。它主要包括数据定义...

    Oracle 数据库安全隐患排查及维护对策研究.pdf

    此外,DBA还需要检查数据库日志以检测可能的攻击,并确保Extproc等可能被滥用的功能已关闭,以防止外部过程调用导致的数据泄漏。 为了应对这些安全隐患,DBA应该采取一系列的防护措施。首要的是定期更新数据库版本...

    用plsql查询Arcgis空间数据

    例如,在安装完ArcGIS Desktop或ArcSDE之后,可以在指定路径下找到相应的动态链接库(DLL)文件,如`st_shapelib.dll`。 - **安装路径**:在Windows环境下,该DLL通常位于`D:\Program Files (x86)\ArcGIS\Desktop...

    RPGLE 事务处理程序实例代码

    `CommitTransaction`和`RollbackTransaction`通常是指向CL程序的外部过程调用,如`Trans_CL.CLLE`,这些CL程序会使用`SQLRPGLE`或`SQLCMD`命令来执行SQL的COMMIT或ROLLBACK。 接下来,我们讨论事务的隔离级别。在...

    Oracle10g数据库DBA2官方资料OCP

    - **创建专门的监听器处理外部过程调用**:为外部过程调用创建独立的监听器,避免与其他服务共享监听器带来的安全问题。 #### 练习实例 - **密码保护监听器管理任务**:使用 `lsnrctl` 命令来设置密码,例如 `...

    Oracle数据库维护

    Oracle 8i引入了在线索引创建和重建的功能,使得可以在不影响应用程序的情况下进行索引操作。 **4.4 使用可传输的表空间实现数据在数据库间的移动** 可传输的表空间功能允许用户将表空间从一个数据库移动到另一个...

    为使用ST_Geometry SQL函数配置oracle的网络服务

    这主要依赖于Oracle的外部过程调用(External Procedure Calls)能力,即通过extproc组件,允许执行数据库外部的程序或库,从而实现对复杂数据类型的处理,例如空间数据。 #### 二、配置步骤详解 ##### 步骤1:...

Global site tag (gtag.js) - Google Analytics