首页 | 摘要显示 | 上一页 1 2 3 4 5 6 7 8 9 10 11 下一页

Developer Archives

November 8, 2006

我使用的OCI编译环境, 基于Visual C++ 6.0

    以前常用Java来写工具, 后来觉得Java要还一个JRE, 有些不爽的地方, 也存在性能问题. 由于在Java程序上积累了一些经验, 转到C来写一些小工具也不是难事, 他们两者语法基本相同. 况且写工具时编译代码只占用了很小的时间, 大部分时间在想应当具有什么功能?

    我写OCI的环境很小, 基本的编译环境是从VC6中拷出一些最基本的文件, 加上OCI的头文件和库文件构成的, 压缩后不到4M, 你可以下载并解压到C盘, 但不支持C++了.

    接下来需要设置两个环境变量, 指定默认的头文件(.H)的位置和默认的库文件(.LIB)的位置, 如下所示:

INCLUDE=c:\vc6\include
LIB=c:\vc6\lib

    接下来将Bin目录加到PATH变量中, 你就可以用下面的语法来编译OCI程序了. 如下所示:

cl /ML ociuldr.c oci.lib

    这样就编译成了我网站上提供的ociuldr工具了, Microsoft不会来追究我非法传播VC6吧?

November 14, 2006

优秀的DataDirect JDBC驱动

    DataDirect是一家专业的数据库驱动提供商, 在04年时我曾经想尽办法想让我的AnySQL在导出Oracle数据到文本时能快一些, 发现在Java 1.4以前的版本中, 就Oracle来说, 这个公司的驱动要比Oracle自带的class12.zip要快很多, 在Java 1.4以上用ojdbc14.jar后, 两者性能基本相等. 如果你还在用Java 1.3的话, 可以试试这个JDBC驱动!

    驱动器类名:

com.ddtek.jdbc.oracle.OracleDriver
com.ddtek.jdbc.sybase.SybaseDriver
com.ddtek.jdbc.db2.DB2Driver
com.ddtek.jdbc.sqlserver.SQLServerDriver
com.ddtek.jdbc.informix.InformixDriver

    DB URL的简单写法:

jdbc:datadirect:oracle://host:port;SID=Instance
jdbc:datadirect:sybase://host:port;DatabaseName=DBName
jdbc:datadirect:db2://host:port;DatabaseName=DBName
jdbc:datadirect:sqlserver://host:port;DatabaseName=DBName
jdbc:datadirect:infomix://host:port;DatabaseName=DBName

    针对每种不同的数据库有很多各自的属性, 可以用"&property=value"来指定, 详细信息可以到DataDirect的网站上去找找文档.

    我网站提供下载.

November 21, 2006

如何编译Perl的Oracle模块?

    发现我们用的Perl在数据库版本变化后(如8i到9i, 9i到10g)时, DBD-Oracle模块都需要重新编译Perl才能工作. 在多种数据库版本混合使用的环境下, 就需要安装几个Perl(或只使用一个版本的客户端)才能解决问题, 其中的原因是因为编译出来的Oracle.so会去找特定版本的Oracle客户端库文件, 如下所示:

$ldd ./lib/site_perl/5.8.5/sun4-solaris-64/auto/DBD/Oracle/Oracle.so
        libclntsh.so.9.0 =>      /export/home/oracle/products/9201/lib/libclntsh.so.9.0
        libnsl.so.1 =>   /usr/lib/64/libnsl.so.1
        libsocket.so.1 =>        /usr/lib/64/libsocket.so.1
        ......

    其实在每一个Oracle的客户端库目录下都会有一个"libclntsh.so"的链接指向"libclntsh.so.ver", 如果在ldd的输出中只去查找"libclntsh.so"的话, 就可以解决在8i/9i/10g下的重新编译的问题了. 我在编译OCI程序时, 就没有不同版本的客户端的问题.

$ldd ociuldr.bin
        libm.so.1 =>     /usr/lib/libm.so.1
        libclntsh.so =>  /export/home/oracle/products/9201/lib32/libclntsh.so
        ......

    今天就将这个方法用在Perl的DBD-Oracle模块中试试吧, 首先下载DBD-Oracle源程序, 然后就可以开始了. 如果你只想替换Oracle.so文件, 则需要注意下载的源代码的版本要和现在正在用的一致.

    Perl分32位和64位, DBD-Oracle也分为32位和64位. 在解压源程序后, 首先用以下命令生成Makefile:

32Bit: perl Makefile.PL -r=build32
64Bit: perl64 Makefile.pl -r=build64

    接下来执行make命令就可以编译了, 可以用以下命令查找Oracle.so的所在位置:

$find ./ -name Oracle.so
./blib/arch/auto/DBD/Oracle/Oracle.so

    用这个刚生成的文件去换掉现在正在使用的文件, 然后在8i/9i/10g的客户端下试试? Oracle的客户端库的位置如下:

32Bit
8i:${ORACLE_HOME}/lib
9i:${ORACLE_HOME}/lib32
10g${ORACLE_HOME}/lib32

64Bit
8i:${ORACLE_HOME}/lib64
9i:${ORACLE_HOME}/lib
10g${ORACLE_HOME}/lib

    只要根据你编译的版本, 设置合适的LD_LIBRARY_PATH变量(AIX5L下是LIBPATH变量).

November 23, 2006

偶学Perl过程中写的第二个程序

    对于管理Unix/Linux上面数据库的DBA来说, 学点Perl是很有用的技术. 来到这个公司后, 所有的数据库都在Unix上, 因此也就有了学习Perl的压力, 可到现在也没有学好, 没有为公司写过一个用Perl语言的小工具. 下面是我学习过程中的第二个程序, 其中用到了DBI来查询数据库的记录. 程序如下:

#!/usr/bin/perl -w
#
use DBI;

# Get a database connection Handle.
my $dbconn = DBI->connect("dbi:Oracle:tnsname","username","password");

my $row;

# Fetch record row by row into an array
$row=$dbconn->selectall_arrayref("SELECT TNAME,TABTYPE FROM TAB");

foreach my $rec (@$row)
{
   print ($rec->[0].",". $rec->[1]. "\n");
}

# Disconnect the database at last
$dbconn->disconnect();

    第一个程序是"SELECT SYSDATE FROM DUAL"的, 在这儿就不写了. 自从我写了一些Java和C程序后, 学习Perl就来得很慢了, 可能是因为年龄大了的原因吧.

    领导一直想让我学会Perl的, 后来我只能说, 你这就强迫我学SQL Server一样, 就是不容易学得会!

December 11, 2006

为Windows上的ActivePerl编译和安装DBD-Oracle模块

    Perl角本的确管用, 应当推荐使用, Windows平台可以用ActivePerl, 它可以免费下载. 为了和Unix一保持一致(/usr/bin/perl), 我是安装到"c:\usr"目录的, 接下来我们就来安装DBD-Oracle模块吧!

    首先要安装DBI, ActivePerl默认安装是没有DBI的, 先让机器能连上互联网, 然后运行PERL_HOME的bin子目录下的Perl Package Manager(ppm.bat)程序, 会出现一个命令行, 输入"install DBI"就可以了, 这一步不会很久的. 如下所示:

ppm> install DBI
====================
Install 'DBI' version 1.53 in ActivePerl 5.8.0.806.
====================
Downloaded 597997 bytes.
Extracting 82/82: blib/arch/auto/DBI/Driver_xst.h
......
Installing C:\usr\bin\dbiproxy.bat
Successfully installed DBI version 1.53 in ActivePerl 5.8.0.806.

    你也可以打"install DBD::Oracle"来安装DBD-Oracle模块, 今天我在试时发现它要下载一整个Oracle 10g Instant Client, 就取消了, 利用我前几天下载的DBD-Oracle模块源程序编译一下吧. 由于我机器上没有装全套的MSDN开发工具, 编译时遇到了cl, link等工具找不到的问题, 通过更改Makefile, 指定这些工具的绝对路径得到解决, 终算编译出来了. 在Make install时发现不能正常安装, 于是就将文件手工拷贝到相关目录, 最后终于安装成功了, 运行我的demo程序没有错误.

    并将所有有关DBD-Oracle的文件打包了, 你们要安装的话, 只要安装DBI, 然后下载并解压到PERL_HOME就可以了, 并用demo程序进行测试, 如果不行请告诉我.

上一页 1 2 3 4 5 6 7 8 9 10 11 下一页

当前分类: Developer

Creative Commons License
本站版权: 共用创作 CC
署名-非商业性-相同方式分享
本站基于MT-3.36免费版
(©)版权所有, 2004 - 2008, www.AnySQL.net, 保留所有权利.
MSN: loufangxin(a)msn.com, Mail: anysql(at)126.com/support(at)iamdba.com, Skype ID:anysql