- 浏览: 1646677 次
- 性别:
- 来自: 福州
文章分类
- 全部博客 (583)
- strust2.0 (14)
- hibernate2.0 (5)
- java (13)
- javaScript (59)
- AJAX (8)
- TFS (6)
- 其它 (20)
- CSS (23)
- asp (18)
- Dojo (5)
- 项目管理 (3)
- SQLServer (25)
- oracle (26)
- .NET (221)
- 开源系统 (6)
- 常识 (41)
- 软件架构 (1)
- My SQL (1)
- SilverLight (10)
- Flex (1)
- window7 (1)
- 网络安全 (2)
- CMS (1)
- ECShop (4)
- 邮件系统 (9)
- Linq (0)
- 淘宝店铺经营宝典 (0)
- flash插件 (1)
- Hubble.net全文检索 (1)
- 在线编辑器 (1)
- 正则表达式 (1)
- 创业 (1)
- asp.net mvc (1)
- 全文检索 (0)
- 全文检索 HubbleDotNet (1)
- Android (27)
- TFS bin (1)
最新评论
-
z小小Jean:
有具体的解决方法吗
用命名imp导入DMP时报无法解析指定的连接标识符的解决办法 -
njoiop:
这些都是常用接口,IP地址、手机归属和身份证查询接口,基站定位 ...
IP地址、手机归属和身份证查询接口 -
Fs_sky:
那导出DMP如何包含序列等其他东西?
在plsql中如何导出dmp文件 -
qiywtc:
请问该怎么判断视频的格式再选择对应的播放格式来播放啊?
asp.net各种类型视频播放代码(全) -
xinghenhouzi:
楼主说的版本不同无法导入导出是什么意思?我用10g的exp.e ...
在plsql中如何导出dmp文件
从oracle 10g开始,oracle官方提供了一个精简的client,叫oracle instant client,只有几十M,免安装,可供分发。其下载地址:
http://www.oracle.com/technology/software/tech/oci/instantclient/index.html
至于如何配置、使用等,本文不予介绍。如果能够使用此client打包程序成功的,也可以不必看此文。网上有网友说,这个client比起普通的client,还存在很多bug,但我没有证实过。我之所以需要手工抽取,是因为,它不包括oracle oledb,而我的程序需要它。
下面介绍我此次抽取客户端的经历,以及从中总结出的一种通用的抽取方法。
首先,参照了三篇网文《Oracle10g Client的手工分发》(http://www.cnblogs.com/pilybird/archive/2006/10/24/538338.html),《Oracle OLEDB 的手工分发》(http://www.cnblogs.com/pilybird/archive/2006/10/26/540943.html),《Oracle学习笔记:手工注册oracle的oledb驱动》(http://www.cnblogs.com/jinzhenshui/archive/2009/01/08/1371634.html),我抽取了必须的文件,具体的抽取过程,可以参照下列dos脚本(需要修改定义的变量):
--------------------------------------------------------------------
@ECHO 从Oracle 10g Client中提取精简客户端
REM 定义变量
set ORACLE_CLIENT_HOME=E:\client_1
set DEST_ORA_CLIENT_DIR=E:\ora10g_client
REM sqlplus目录
mkdir %DEST_ORA_CLIENT_DIR%\sqlplus
mkdir %DEST_ORA_CLIENT_DIR%\sqlplus\mesg
copy %ORACLE_CLIENT_HOME%\sqlplus\mesg\*.* %DEST_ORA_CLIENT_DIR%\sqlplus\mesg
REM oracore目录
mkdir %DEST_ORA_CLIENT_DIR%\oracore
mkdir %DEST_ORA_CLIENT_DIR%\oracore\zoneinfo
copy %ORACLE_CLIENT_HOME%\oracore\zoneinfo\*.* %DEST_ORA_CLIENT_DIR%\oracore\zoneinfo
mkdir %DEST_ORA_CLIENT_DIR%\oracore\mesg
copy %ORACLE_CLIENT_HOME%\oracore\mesg\*.* %DEST_ORA_CLIENT_DIR%\oracore\mesg
REM Network目录
mkdir %DEST_ORA_CLIENT_DIR%\Network
mkdir %DEST_ORA_CLIENT_DIR%\Network\Admin
copy %ORACLE_CLIENT_HOME%\Network\Admin\sqlnet.ora %DEST_ORA_CLIENT_DIR%\Network\Admin\
copy %ORACLE_CLIENT_HOME%\Network\Admin\tnsnames.ora %DEST_ORA_CLIENT_DIR%\Network\Admin\
mkdir %DEST_ORA_CLIENT_DIR%\Network\mesg
copy %ORACLE_CLIENT_HOME%\Network\mesg\*.* %DEST_ORA_CLIENT_DIR%\Network\mesg\
REM Bin目录
mkdir %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oci.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oracle.key %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oraclient10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oracommon10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORACORE10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\orageneric10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\orahasgen10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oraldapclnt10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oran10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORANCDS10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\orancrypt10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oranhost10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oranl10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oranldap10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORANLS10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\orannzsbb10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oranro10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\orantcp10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\orantns10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oraocr10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oraocrb10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORAPLP10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORAPLS10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORASLAX10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORASNLS10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORASQL10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORAUNLS10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\orauts.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oravsn10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORAXML10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\sqlplus.exe %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\sqlplusw.exe %DEST_ORA_CLIENT_DIR%\Bin
REM 针对oracle oledb
copy %ORACLE_CLIENT_HOME%\bin\oip10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oip10.tlb %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oradc.ocx %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDB10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDB10.tlb %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDB10us.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDB10zhs.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDBgmr10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDBpus10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDBrfc10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDBrmc10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDBrst10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDButl10.dll %DEST_ORA_CLIENT_DIR%\Bin
REM Nls目录
mkdir %DEST_ORA_CLIENT_DIR%\Nls
mkdir %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx00001.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx00023.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx10001.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx10035.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx1boot.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx20001.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx20354.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx207d0.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx40001.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx20367.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
REM 针对oracle oledb
copy %ORACLE_CLIENT_HOME%\Nls\data\lx2001f.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx40002.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
mkdir %DEST_ORA_CLIENT_DIR%\Nls\mesg
copy %ORACLE_CLIENT_HOME%\Nls\mesg\*.* %DEST_ORA_CLIENT_DIR%\Nls\mesg
@pause 按任意键退出……
--------------------------------------------------------------------
抽取文件成功后,按照上面网文说的,导入相应的注册表,修改相应的环境变量,打包应用程序,安装后,运行还是不成功。试了几次,不成功后,后来想,是不是注册表有问题,于是想到了注册表监测软件Regmon。
接下来,在一台干净的机器(没有安装过oracle),安装oralce的普通client,选择上oracle oledb组件,使用Regmon监测安装过程。
安装成功后,采用Log parser2.2分析其监测日志,过滤出其中对注册表“CreateKey”的操作记录,仔细分析,可以找到下列键记录,从安装普通client的机器上导出这些键的注册表.reg文件。
--------------------------------------------------------------------
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient10g_home1
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB
HKEY_CLASSES_ROOT\OraOLEDB.Oracle.1
HKEY_CLASSES_ROOT\OraOLEDB.Oracle
HKEY_CLASSES_ROOT\CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}
HKEY_CLASSES_ROOT\OraOLEDB.ErrorLookup.1
HKEY_CLASSES_ROOT\OraOLEDB.ErrorLookup
HKEY_CLASSES_ROOT\CLSID\{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}
HKEY_CLASSES_ROOT\TypeLib\{0BB9AFD1-51A1-11D2-BB7D-00C04FA30080}
--------------------------------------------------------------------
再重新打包,安装发现还是不成功,我猜想是不是少了某个文件,于是又想到了用于文件监测的Filemon工具,发现在运行我的程序的时候,去打开%ORACLE_HOME% \Nls\data\下的一个.nlb文件不成功,于是添加,运行,ok(说明:上面的脚本已经包含此文件)。
利用上面的方法抽取,大约是28M左右。后来我想,何不利用Filemon检测到程序需要用到的文件列表,然后再抽取呢。于是我接下来做了下面的事情:
(1) 在一台干净的机器(没有安装过oracle),安装oracle客户端,选择oracle oledb组件;
(2) 把我的程序编译后直接拷贝到这台干净的机器上;
(3) 打开Filemon,运行编译的程序。
(4) 分析Filemon,利用Log parser2.2,查询出其中对oracle客户端所在目录下的文件“OPEN”操作的文件记录,即这些文件,是必须的文件;
(5) 继续利用Log parser2.2,根据查询出来的文件记录,生成相应的批处理脚本,稍加修改,即如下所示:
--------------------------------------------------------------------
REM 提出oracle10g的客户端
set ORA_CLIENT_DIR=E:\client_1
set DEST_ORA_CLIENT_DIR=E:\oracle_client10g
mkdir %DEST_ORA_CLIENT_DIR%\
mkdir %DEST_ORA_CLIENT_DIR%\BIN\
copy %ORA_CLIENT_DIR%\BIN\ORAOLEDB10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAOLEDBGMR10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORACLIENT10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORACORE10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANLS10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAUNLS10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAUTS.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAVSN10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORACOMMON10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAGENERIC10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORASNLS10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAXML10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAN10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANL10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANLDAP10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANNZSBB10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORALDAPCLNT10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANCRYPT10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANRO10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANHOST10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANCDS10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANTNS10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAPLS10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORASLAX10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAPLP10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAHASGEN10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAOCR10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAOCRB10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANTCP10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORASQL10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAOLEDBRST10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAOLEDBUTL10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORACLE.KEY %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAOLEDB10ZHS.DLL %DEST_ORA_CLIENT_DIR%\BIN\
copy %ORA_CLIENT_DIR%\BIN\ORAOLEDBPUS10.DLL %DEST_ORA_CLIENT_DIR%\BIN\
mkdir %DEST_ORA_CLIENT_DIR%\NETWORK\
mkdir %DEST_ORA_CLIENT_DIR%\NETWORK\ADMIN\
copy %ORA_CLIENT_DIR%\NETWORK\ADMIN\SQLNET.ORA %DEST_ORA_CLIENT_DIR%\NETWORK\ADMIN\
copy %ORA_CLIENT_DIR%\NETWORK\ADMIN\tnsnames.ora %DEST_ORA_CLIENT_DIR%\NETWORK\ADMIN\
mkdir %DEST_ORA_CLIENT_DIR%\NLS\
mkdir %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX1BOOT.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX00001.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX2001F.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX10001.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX00023.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX20354.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX10035.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX20001.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX20367.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX207D0.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX40002.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
mkdir %DEST_ORA_CLIENT_DIR%\ORACORE\
mkdir %DEST_ORA_CLIENT_DIR%\ORACORE\ZONEINFO\
copy %ORA_CLIENT_DIR%\ORACORE\ZONEINFO\TIMEZLRG.Dat %DEST_ORA_CLIENT_DIR%\ORACORE\ZONEINFO\
mkdir %DEST_ORA_CLIENT_DIR%\RDBMS
mkdir %DEST_ORA_CLIENT_DIR%\RDBMS\mesg
copy %ORA_CLIENT_DIR%\RDBMS\mesg\ocizhs.msb %DEST_ORA_CLIENT_DIR%\RDBMS\mesg\
copy %ORA_CLIENT_DIR%\RDBMS\mesg\ocius.msb %DEST_ORA_CLIENT_DIR%\RDBMS\mesg\
copy %ORA_CLIENT_DIR%\RDBMS\mesg\orazhs.msb %DEST_ORA_CLIENT_DIR%\RDBMS\mesg\
copy %ORA_CLIENT_DIR%\RDBMS\mesg\oraus.msb %DEST_ORA_CLIENT_DIR%\RDBMS\mesg\
@pause 按任意键继续……
--------------------------------------------------------------------
(6)运行批处理,抽取必须的文件,利用这种方法抽取的oracle客户端大约26M左右。同时根据Regmon检测的注册表修改记录,还须修改path变量,打包应用程序。
(7)在一台干净的机器上,安装测试,运行,ok。
总结:
(1)此种方法具有通用性,可以用来抽取oracle其它版本,甚至其他任何你想抽取或瘦身的程序;
(2)此种方法完全是一种外科式黑箱式技术,丝毫没有涉及程序的内部结构,这是其优点,也是其缺点,设想一个程序运行,在我们使用filemon监测的时候,它依赖了一些文件,然后我们抽取了它,倘若在我们停止监测后,在一个其它的运用场景,该程序又调用了一些其它文件,那么这些程序就遗漏了,唯一能够补救的方法就是,在使用filemon监测阶段,一定要能够充分的运行应用程序。
(3)抽取程序的要点:1)弄清楚需要抽取哪些必须的文件;2)弄清楚要修改哪些注册表;3)弄清楚要修改哪些环境变量。
------------------------------------------------------
转自:http://bluffstone.spaces.live.com/blog/cns!378A3196AFD42482!178.entry
filemon使用实例:http://xiong.blog.51cto.com/811/17720
http://www.oracle.com/technology/software/tech/oci/instantclient/index.html
至于如何配置、使用等,本文不予介绍。如果能够使用此client打包程序成功的,也可以不必看此文。网上有网友说,这个client比起普通的client,还存在很多bug,但我没有证实过。我之所以需要手工抽取,是因为,它不包括oracle oledb,而我的程序需要它。
下面介绍我此次抽取客户端的经历,以及从中总结出的一种通用的抽取方法。
首先,参照了三篇网文《Oracle10g Client的手工分发》(http://www.cnblogs.com/pilybird/archive/2006/10/24/538338.html),《Oracle OLEDB 的手工分发》(http://www.cnblogs.com/pilybird/archive/2006/10/26/540943.html),《Oracle学习笔记:手工注册oracle的oledb驱动》(http://www.cnblogs.com/jinzhenshui/archive/2009/01/08/1371634.html),我抽取了必须的文件,具体的抽取过程,可以参照下列dos脚本(需要修改定义的变量):
--------------------------------------------------------------------
@ECHO 从Oracle 10g Client中提取精简客户端
REM 定义变量
set ORACLE_CLIENT_HOME=E:\client_1
set DEST_ORA_CLIENT_DIR=E:\ora10g_client
REM sqlplus目录
mkdir %DEST_ORA_CLIENT_DIR%\sqlplus
mkdir %DEST_ORA_CLIENT_DIR%\sqlplus\mesg
copy %ORACLE_CLIENT_HOME%\sqlplus\mesg\*.* %DEST_ORA_CLIENT_DIR%\sqlplus\mesg
REM oracore目录
mkdir %DEST_ORA_CLIENT_DIR%\oracore
mkdir %DEST_ORA_CLIENT_DIR%\oracore\zoneinfo
copy %ORACLE_CLIENT_HOME%\oracore\zoneinfo\*.* %DEST_ORA_CLIENT_DIR%\oracore\zoneinfo
mkdir %DEST_ORA_CLIENT_DIR%\oracore\mesg
copy %ORACLE_CLIENT_HOME%\oracore\mesg\*.* %DEST_ORA_CLIENT_DIR%\oracore\mesg
REM Network目录
mkdir %DEST_ORA_CLIENT_DIR%\Network
mkdir %DEST_ORA_CLIENT_DIR%\Network\Admin
copy %ORACLE_CLIENT_HOME%\Network\Admin\sqlnet.ora %DEST_ORA_CLIENT_DIR%\Network\Admin\
copy %ORACLE_CLIENT_HOME%\Network\Admin\tnsnames.ora %DEST_ORA_CLIENT_DIR%\Network\Admin\
mkdir %DEST_ORA_CLIENT_DIR%\Network\mesg
copy %ORACLE_CLIENT_HOME%\Network\mesg\*.* %DEST_ORA_CLIENT_DIR%\Network\mesg\
REM Bin目录
mkdir %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oci.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oracle.key %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oraclient10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oracommon10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORACORE10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\orageneric10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\orahasgen10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oraldapclnt10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oran10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORANCDS10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\orancrypt10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oranhost10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oranl10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oranldap10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORANLS10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\orannzsbb10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oranro10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\orantcp10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\orantns10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oraocr10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oraocrb10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORAPLP10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORAPLS10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORASLAX10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORASNLS10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORASQL10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORAUNLS10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\orauts.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oravsn10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\ORAXML10.DLL %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\sqlplus.exe %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\sqlplusw.exe %DEST_ORA_CLIENT_DIR%\Bin
REM 针对oracle oledb
copy %ORACLE_CLIENT_HOME%\bin\oip10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oip10.tlb %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\oradc.ocx %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDB10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDB10.tlb %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDB10us.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDB10zhs.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDBgmr10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDBpus10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDBrfc10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDBrmc10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDBrst10.dll %DEST_ORA_CLIENT_DIR%\Bin
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDButl10.dll %DEST_ORA_CLIENT_DIR%\Bin
REM Nls目录
mkdir %DEST_ORA_CLIENT_DIR%\Nls
mkdir %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx00001.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx00023.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx10001.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx10035.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx1boot.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx20001.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx20354.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx207d0.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx40001.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx20367.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
REM 针对oracle oledb
copy %ORACLE_CLIENT_HOME%\Nls\data\lx2001f.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
copy %ORACLE_CLIENT_HOME%\Nls\data\lx40002.nlb %DEST_ORA_CLIENT_DIR%\Nls\data
mkdir %DEST_ORA_CLIENT_DIR%\Nls\mesg
copy %ORACLE_CLIENT_HOME%\Nls\mesg\*.* %DEST_ORA_CLIENT_DIR%\Nls\mesg
@pause 按任意键退出……
--------------------------------------------------------------------
抽取文件成功后,按照上面网文说的,导入相应的注册表,修改相应的环境变量,打包应用程序,安装后,运行还是不成功。试了几次,不成功后,后来想,是不是注册表有问题,于是想到了注册表监测软件Regmon。
接下来,在一台干净的机器(没有安装过oracle),安装oralce的普通client,选择上oracle oledb组件,使用Regmon监测安装过程。
安装成功后,采用Log parser2.2分析其监测日志,过滤出其中对注册表“CreateKey”的操作记录,仔细分析,可以找到下列键记录,从安装普通client的机器上导出这些键的注册表.reg文件。
--------------------------------------------------------------------
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient10g_home1
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB
HKEY_CLASSES_ROOT\OraOLEDB.Oracle.1
HKEY_CLASSES_ROOT\OraOLEDB.Oracle
HKEY_CLASSES_ROOT\CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}
HKEY_CLASSES_ROOT\OraOLEDB.ErrorLookup.1
HKEY_CLASSES_ROOT\OraOLEDB.ErrorLookup
HKEY_CLASSES_ROOT\CLSID\{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}
HKEY_CLASSES_ROOT\TypeLib\{0BB9AFD1-51A1-11D2-BB7D-00C04FA30080}
--------------------------------------------------------------------
再重新打包,安装发现还是不成功,我猜想是不是少了某个文件,于是又想到了用于文件监测的Filemon工具,发现在运行我的程序的时候,去打开%ORACLE_HOME% \Nls\data\下的一个.nlb文件不成功,于是添加,运行,ok(说明:上面的脚本已经包含此文件)。
利用上面的方法抽取,大约是28M左右。后来我想,何不利用Filemon检测到程序需要用到的文件列表,然后再抽取呢。于是我接下来做了下面的事情:
(1) 在一台干净的机器(没有安装过oracle),安装oracle客户端,选择oracle oledb组件;
(2) 把我的程序编译后直接拷贝到这台干净的机器上;
(3) 打开Filemon,运行编译的程序。
(4) 分析Filemon,利用Log parser2.2,查询出其中对oracle客户端所在目录下的文件“OPEN”操作的文件记录,即这些文件,是必须的文件;
(5) 继续利用Log parser2.2,根据查询出来的文件记录,生成相应的批处理脚本,稍加修改,即如下所示:
--------------------------------------------------------------------
REM 提出oracle10g的客户端
set ORA_CLIENT_DIR=E:\client_1
set DEST_ORA_CLIENT_DIR=E:\oracle_client10g
mkdir %DEST_ORA_CLIENT_DIR%\
mkdir %DEST_ORA_CLIENT_DIR%\BIN\
copy %ORA_CLIENT_DIR%\BIN\ORAOLEDB10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAOLEDBGMR10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORACLIENT10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORACORE10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANLS10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAUNLS10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAUTS.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAVSN10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORACOMMON10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAGENERIC10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORASNLS10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAXML10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAN10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANL10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANLDAP10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANNZSBB10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORALDAPCLNT10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANCRYPT10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANRO10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANHOST10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANCDS10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANTNS10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAPLS10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORASLAX10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAPLP10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAHASGEN10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAOCR10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAOCRB10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORANTCP10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORASQL10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAOLEDBRST10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAOLEDBUTL10.DLL %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORACLE.KEY %DEST_ORA_CLIENT_DIR%\bin\
copy %ORA_CLIENT_DIR%\BIN\ORAOLEDB10ZHS.DLL %DEST_ORA_CLIENT_DIR%\BIN\
copy %ORA_CLIENT_DIR%\BIN\ORAOLEDBPUS10.DLL %DEST_ORA_CLIENT_DIR%\BIN\
mkdir %DEST_ORA_CLIENT_DIR%\NETWORK\
mkdir %DEST_ORA_CLIENT_DIR%\NETWORK\ADMIN\
copy %ORA_CLIENT_DIR%\NETWORK\ADMIN\SQLNET.ORA %DEST_ORA_CLIENT_DIR%\NETWORK\ADMIN\
copy %ORA_CLIENT_DIR%\NETWORK\ADMIN\tnsnames.ora %DEST_ORA_CLIENT_DIR%\NETWORK\ADMIN\
mkdir %DEST_ORA_CLIENT_DIR%\NLS\
mkdir %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX1BOOT.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX00001.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX2001F.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX10001.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX00023.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX20354.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX10035.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX20001.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX20367.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX207D0.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
copy %ORA_CLIENT_DIR%\NLS\DATA\LX40002.NLB %DEST_ORA_CLIENT_DIR%\NLS\DATA\
mkdir %DEST_ORA_CLIENT_DIR%\ORACORE\
mkdir %DEST_ORA_CLIENT_DIR%\ORACORE\ZONEINFO\
copy %ORA_CLIENT_DIR%\ORACORE\ZONEINFO\TIMEZLRG.Dat %DEST_ORA_CLIENT_DIR%\ORACORE\ZONEINFO\
mkdir %DEST_ORA_CLIENT_DIR%\RDBMS
mkdir %DEST_ORA_CLIENT_DIR%\RDBMS\mesg
copy %ORA_CLIENT_DIR%\RDBMS\mesg\ocizhs.msb %DEST_ORA_CLIENT_DIR%\RDBMS\mesg\
copy %ORA_CLIENT_DIR%\RDBMS\mesg\ocius.msb %DEST_ORA_CLIENT_DIR%\RDBMS\mesg\
copy %ORA_CLIENT_DIR%\RDBMS\mesg\orazhs.msb %DEST_ORA_CLIENT_DIR%\RDBMS\mesg\
copy %ORA_CLIENT_DIR%\RDBMS\mesg\oraus.msb %DEST_ORA_CLIENT_DIR%\RDBMS\mesg\
@pause 按任意键继续……
--------------------------------------------------------------------
(6)运行批处理,抽取必须的文件,利用这种方法抽取的oracle客户端大约26M左右。同时根据Regmon检测的注册表修改记录,还须修改path变量,打包应用程序。
(7)在一台干净的机器上,安装测试,运行,ok。
总结:
(1)此种方法具有通用性,可以用来抽取oracle其它版本,甚至其他任何你想抽取或瘦身的程序;
(2)此种方法完全是一种外科式黑箱式技术,丝毫没有涉及程序的内部结构,这是其优点,也是其缺点,设想一个程序运行,在我们使用filemon监测的时候,它依赖了一些文件,然后我们抽取了它,倘若在我们停止监测后,在一个其它的运用场景,该程序又调用了一些其它文件,那么这些程序就遗漏了,唯一能够补救的方法就是,在使用filemon监测阶段,一定要能够充分的运行应用程序。
(3)抽取程序的要点:1)弄清楚需要抽取哪些必须的文件;2)弄清楚要修改哪些注册表;3)弄清楚要修改哪些环境变量。
------------------------------------------------------
转自:http://bluffstone.spaces.live.com/blog/cns!378A3196AFD42482!178.entry
filemon使用实例:http://xiong.blog.51cto.com/811/17720
发表评论
-
【转】C#定时执行某个程序
2015-03-16 17:33 725using System; using System. ... -
多行文本框字符数长度验证的解决方案
2012-03-02 16:04 1197在ASP.NET系统中经常会遇到验证文本框长度,比如数据库里是 ... -
【转】asp.net(c#)通过两个点的经纬度计算距离
2012-01-12 14:14 1377原理: 地球赤道上环绕地球一周走一圈共40075.04公里 ... -
【转】GSM手机短信软件的实现(C#)
2011-11-30 13:55 1280http://www.cnblogs.com/Engin/ar ... -
[转]C#开发短信收发软件的原理
2011-11-16 16:44 1645坛子里好像很多人对如何自己用C#开发手机短信有兴趣,正好我也做 ... -
TCPClient 类实现网络互联、通信
2011-10-29 11:16 2935TcpClient 为 TCP 网络服务提供客户端连接。 S ... -
Hubble.Net实现全文检索
2011-07-25 19:30 4023一、 下载安装 到Hubble.net 项目首页 http: ... -
c# 获取当前周第一天、最后一天,当前月第一天、最后一天的实现代码
2011-04-17 18:39 5267获取当前周工作日第一天、最后一天 int dayOfWee ... -
c#通过调用7z.exe实现解压文件
2011-03-05 15:47 47707-Zip 简介 7-Zip 是一款号称有着现今最高压缩比的 ... -
【转】IEnumerable 和 IEnumerator 接口
2011-03-04 17:12 2019类继承关系:public interface IQueryab ... -
【转】C#获取文件的绝对路径
2011-03-04 17:08 2474要在c#中获取路径有好多方法,一般常用的有以下五种: ... -
ListBox之间的数据项的移动操作
2010-09-29 11:04 1548<%@ Page Language="C# ... -
【转】asp.net中URL参数传值中文乱码的三种解决办法
2010-09-21 22:31 3409在做Asp.Net开发的时候,经常会遇到页面乱码的问题,下面是 ... -
【转】ASP.NET文件下载函数
2010-09-21 22:29 1396在你的Page_Load中添加这样的代码: Page.Re ... -
【转】在ASP.NET中实现多文件上传
2010-09-21 22:25 1226在以前的Web应用中,上传文件是个很麻烦的事,现在有了.NET ... -
[转]ASP.NET中常用的文件上传下载方法
2010-09-21 22:23 1809文件的上传下载是我们在实际项目开发过程中经常需要用到的技 ... -
HTML文章中截取摘要的问题[转]
2010-06-09 10:46 1867博客系统通常的做法是,在博客的首页只显示文章的摘要,点击标题进 ... -
获取 asp:Button 控件的的ComandName值的方法
2010-05-22 17:31 1244protected void btn_Save_Click ... -
ASP.NET防止用户多次登录的方法
2010-05-06 12:34 1575常见的处理方法是,在 ... -
使用 Enter 键提交表单
2010-04-27 14:04 1330一、使用 JS 代码 我们在表单里面的 TextBox (as ...
相关推荐
在这个"oracleClient安装包exp和imp文件.zip"压缩包中,我们主要关注的是这两个工具以及它们在Oracle客户端11.2.0.4.0中的应用。 **Oracle客户端安装包**: Oracle客户端是与Oracle服务器进行通信的软件组件,它...
【标题】:“BIPublisherDesktop64.rar”指的是Oracle Business Intelligence Publisher(BIPublisher)...通过与Oracle SaaS HCM的紧密集成,BIPublisher提供了一种高效、安全的方式来分析和呈现复杂的人力资源数据。
JDBC驱动分为四种类型:Type 1、Type 2、Type 3和Type 4,其中Type 4是最常见且推荐使用的,因为它实现了完全的纯Java实现,无需依赖于特定的数据库系统客户端库。 在"drivers"这个压缩包中,我们可以期待找到不同...
**ETL**(Extract, Transform, Load)是一种广泛应用于数据仓库建设中的数据处理流程。它主要包括三个步骤: 1. **Extract(提取)**:从源系统中抽取所需的数据。 2. **Transform(转换)**:对提取的数据进行清洗...
5. **客户端安装**:润乾报表提供Web端和桌面端两种客户端,根据用户需求选择安装。Web客户端通常无需额外安装,通过浏览器访问服务器即可。桌面客户端需要下载并安装,用于离线设计报表。 6. **报表设计**:润乾...
Informatica是一款强大的数据集成工具,它帮助企业进行数据的抽取、转换和加载(ETL)过程,实现数据仓库建设和数据分析。本文将深入探讨 Informatica 8 安装配置的关键步骤和注意事项。 首先,安装前准备是至关...
首先,DI是ETL(Extraction-Transformation-Loading)过程的简称,主要负责从分布的、异构的数据源中抽取数据,经过清洗、转换和集成,最终加载到数据仓库或数据集市中。这一过程对于构建高效的数据分析平台至关重要...
它提供了一种可靠且可扩展的方式,将数据从各种来源(如网络服务器、应用程序等)传输到HDFS或其他目标。Flume的配置灵活,可以通过多个source、sink和channel组合,实现定制化的数据流。 **第九章 Azkaban** ...
它提供了一种统一的方式,让用户可以跨不同的项目共享数据模型和代码。资源库支持版本控制、安全性和协作等功能,从而提高了数据处理项目的可维护性和可复用性。 ##### 1.5 资源库自动登录 为了简化用户的操作流程...
任务提供了一种更高级别的抽象,允许用户将多个转换组合在一起,形成一个复杂的工作流程。 #### 选项 Kettle提供了丰富的选项设置,帮助用户定制自己的工作环境。 ##### 1.7.1 General标签 General标签主要用于...
- **9.6.38 值映射(ValueMapper)**:将值从一种格式映射到另一种格式。 - **9.6.39 被冻结的步骤(Blockingstep)**:暂停数据流,直到满足某些条件。 - **9.6.40 记录关联(笛卡尔输出)(JoinRows-Cartesian...