mysql实现程序的动态链接,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 BJS=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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值