proxy代理   soft软件   IT 业界特快   norton 诺顿病毒库   代理列表   search FTP搜索   whois IP地理位置   blog 追求完美  
money理财   life生活   RSS聚合门户   firefox WEB浏览器   免费域名   typeset 假古文   AntiVirus 反病毒   ipcn 站点导航  

« 吐血分析 apnic 的地址段数据 | Main | HP ProLiant DL180 安装 RHEL AS 时的 cciss 驱动问题 »

November 21, 2007

linux perl 通过 FreeTDS 连接 windows Microsoft Sql Server 数据库

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
https://windtear.net/archives/2007/11/21/001290.html

背景:
中国移动的企信通平台 华为的信息机
这一段要求升级
可是升级之后的华为信息机原来的EIE消息接口协议没了
就是默认tcp/7777那个socket接口
新的api接口有COM DLL JAVA 和现有环境不太符合
于是找替代解决办法
开始华为提供的一个办法是 建一个数据库表 让信息机去抓
先不考虑时效和性能问题 对mysql不支持...
后来就只好直接写数据库了

方案及过程:
需求很简单 准备用 perl 做
于是考察了连接 mssqlserver的可选方法
最后选择了 DBD::Sybase FreeTDS (也可以用DBD::ODBC unixODBC等)
安装 FreeTDS 提供 libct libtds (这样就不需要Sybase OpenClient 的库了)
安装 DBD-Sybase
这一步有一些细节要说:
1 是指定 SYBASE 环境
export SYBASE="/usr/local"
2 是rhel as3 的DBI DBIXS.h 有bug
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/auto/DBI/DBIXS.h
(出错附后 rhel as4 的.h头文件正常)
3 安装后记得把 ld.so.conf 的lib路径更新进去

具体perl代码就很简单了
use DBI;
my ($dbh, $sql);
$dbh = DBI->connect("dbi:Sybase:server=10.1.1.8:1433", 'sa', 'windtear') or die "cant $DBI::errstr";
$dbh->do("use db_customsms");


附出错信息:
[Tue Nov 21 17:49:23 ~/sql/DBD-Sybase-1.08]
root@windteartest# make
cp dbd-sybase.pod blib/lib/DBD/dbd-sybase.pod
cp Sybase.pm blib/lib/DBD/Sybase.pm
/usr/bin/perl -p -e "s/~DRIVER~/Sybase/g" < /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/auto/DBI/Driver.xst > Sybase.xsi
/usr/bin/perl /usr/lib/perl5/5.8.0/ExtUtils/xsubpp -typemap /usr/lib/perl5/5.8.0/ExtUtils/typemap Sybase.xs > Sybase.xsc && mv Sybase.xsc Sybase.c
gcc -c -I/usr/local/include -DNO_BLK=1 -I/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/auto/DBI -D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBUGGING -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -g -pipe -march=i386 -mcpu=i686 -DVERSION=\"1.08\" -DXS_VERSION=\"1.08\" -fPIC "-I/usr/lib/perl5/5.8.0/i386-linux-thread-multi/CORE" Sybase.c
In file included from Sybase.h:16,
from Sybase.xs:14:
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/auto/DBI/DBIXS.h: In function `get_dbistate':
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/auto/DBI/DBIXS.h:413: `my_perl' undeclared (first use in this function)
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/auto/DBI/DBIXS.h:413: (Each undeclared identifier is reported only once
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/auto/DBI/DBIXS.h:413: for each function it appears in.)
In file included from Sybase.c:352:
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/auto/DBI/Driver_xst.h: In function `dbixst_bounce_method':
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/auto/DBI/Driver_xst.h:14: `my_perl' undeclared (first use in this function)
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/auto/DBI/Driver_xst.h: In function `dbdxst_bind_params':
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/auto/DBI/Driver_xst.h:54: `my_perl' undeclared (first use in this function)
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/auto/DBI/Driver_xst.h: In function `dbdxst_fetchall_arrayref':
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/auto/DBI/Driver_xst.h:80: `my_perl' undeclared (first use in this function)
make: *** [Sybase.o] Error 1

本blog WWW

Posted by windtear at November 21, 2007 7:59 PM

本站使用中的任何问题,请与 windtear @ windtear.net 联系
Copyright© 1999-2024 Windtear. All rights reserved.