[转]数据库存储过程中利用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;
发表评论
-
一个简单的随机数字串函数,欢迎拍砖改进
2006-02-22 14:41 634static public string GenRandom ... -
一个简单的e-mail校验函数,欢迎拍砖改进
2006-02-22 15:13 726/// <summary> /// 校验是否 ... -
一个简单的取用户真实IP函数[B/S],欢迎拍砖改进
2006-02-22 15:28 714可以取的真实IP的哦public static string ... -
一个高效判断字符串是否全数字的函数,请大家指正拍砖
2006-02-22 18:50 903看到很多人都采用正则表达式或者一些其它五花八门的算法。经过简单 ... -
多语言Web系统布局的几个小帖士
2006-02-28 14:50 916基于窗体的整体大小使用级联样式表表达式调整元素的大小 ... -
VS2003中自定义控件的智能提示解决方案备忘
2006-02-28 21:26 954这个问题困饶了很久了。一直没有妥善解决。最近从nhiberna ... -
Oracle中隐式游标和显式游标的教训[同事的经历]
2006-02-28 21:34 808一直以为以下这种语句(执行一)就是隐式游标,跟显式定义游标(执 ... -
一个简单的UrlRewrite示例[演示用,写给同事看的,VS2003环境]
2006-03-20 13:07 890UrlDemo.rar下载比较简单。关键点如下:一.Versi ... -
[笔记]1.软件的质量特性characteristics of software quality
2006-05-17 13:14 731外在特性:该软件产品用户所能感受到的部分。包括:正确性可用性效 ... -
[笔记]2.软件质量的一些统计数据
2006-05-17 13:43 1060一个关键事实:提高开发效率和改善质量的最佳途径——减少代码返工 ... -
[笔记]3.软件代码中的BUG问题的一些记录
2006-05-18 08:50 786题记 你越了解你的对手 ... -
[笔记]4.软件规模和开发的关系
2006-05-18 13:47 526前言: 对非软件领域的其他领域[比如化工、船舶等等] ... -
[SQL使用经验]选用 IN 还是 EXISTS,哪个性能更好
2006-09-12 10:08 1304一、EXISTS 并非总比IN 快,究竟应该选用 IN 还是 ... -
两个读取数据库VIew的定义的SQL语句的写法[Oracle /SQL SERVER]
2006-12-01 18:05 1070例如想读取的VIEW名称 MYVIEW在ORACLE中:SEL ... -
部署Excel相关的应用程序过程中遇到“检索COM类工厂中CLSID...”的两个错误的解决方法
2007-01-29 10:52 2006最近用.net写了一个相关Excel的B/S的程序,部署到20 ... -
VS2005无法调试,绑定句柄无效问题的解决方法
2007-02-02 13:04 1941今天我的VS2005调试时遇到以下两个错误: 1.无法连接到名 ... -
powerdesigner中生成数据库脚本时出现长度限制问题的解决方法
2007-02-09 16:23 896今天有同事问这个问题,错误显示如下:事实上相关设计的脚本可以在 ... -
[转载整理]一本java书的序言——开发历程思绪随笔
2007-11-26 13:16 722以下文字是一本java书的 ...
相关推荐
系统级的环境变量一般在/etc/profile 文件中定义 在 CAMS 系统 与数据库 相关的环境变量就定义在/etc/profile 文件中 如下所示 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/...
PL/SQL不安装Oracle连接数据库 1、下载instantclient-basic-win32-11.2.0.1.0此为压缩包,解压就行(路径如:D:\oracle\instantclient\instantclient).解压的路径自行调整 2、新建tnsnames.ora文件,路径如(D:\...
和exp.exe一起使用可以导出oracle数据库备份文件
TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误 TNS-00511: 无监听程序 文章转自:http://www.luocs.com/archives/464.html 此文版权归作者 – yaogang所有,转载请注明yaogang©www.luocs.com。 ...
oracle10g的两个版本的客户端,本人经常使用,不需要安装数据库,装完客户端,即可通过plsql访问数据库,且可以使用imp和exp命令导入导出dmp文件。 附上,操作配置: 安装版本(10.2.0.5.0和10.2.0.1.0版本) (1)如果用...
vs2013运行库,当程序报错msvcr120xxxx时安装 利用vs2013编译的应用程序,在客户机会需要安装相应的运行库;此库还解决了:如何解决 ORA-28595: Extproc 代理: DLL 路径无效
如果您只有少量 Oracle 表要同步到 MySQL 数据库,那么这可能就是您想要的。 这真的很简单。 这个概念是向 Oracle 添加一个小的 extproc,它发送 UDP 消息,然后为这些消息提供一个接收器,将其应用于 MySQL 的任何...
访问存储在oracle中的ST_Geometry类型数据的SQL函数通过扩展oracle的external procedure agent或者extproc来实现,因此,直接使用这些SQL函数需要配置oracle的listener,让oracle能够找到这些扩展库。如果使用SDE...
打开oracle客户端安装路径下的tnsnames.ora编辑添加自己的数据库信息。 XE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_...
32位oracle11.2.0.1 BIN文件夹,数据库管理员版,包含sqlplus,imp,exp,impdp,expdp等完整工具。exe列表:adrci、agtctl、amdu、asmtool、asmtoolg、CreatDep、csscan、dbv、dg4odbc、dg4pwd、dgmgrl、diskmon、...
安装好了之后可以通过这个路径找到一个文本文件: oracle\product\10.2.0\db_1\NETWORK\ADMIN\listener.ora 还一个在同路径下的tnsnames.ora文件,这两个文本中的一些信息要一样的。 你看看我的这两个文本文件的...
EXTPROC_CONNECTION_DATA ORCL Homes OraDb10g_home1 (D:\oracle\product\10.2.0\db_1) DLLs D:\oracle\product\10.2.0\db_1\bin\oci.dll TNS File D:\oracle\product\10.2.0\db_1\Network\Admin\tnsnames....
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.111.123)(PORT = 1521)) ) ) ADR_BASE_LISTENER = /opt/oracle tnsnames.ora ORCL = (DESCRIPTION = (ADDRES
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) (CONNECT_DATA = (SID = CLRExtProc) (PRESENTATION = RO) ) ) ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.120)...
2.1.2 Ensure 'extproc' Is Not Present in 'listener.ora' (Scored) .......................................... 23 2.1.3 Ensure 'ADMIN_RESTRICTIONS_<listener_name>' Is Set to 'ON' (Scored) ........ 24 ...