使用 Perl Sybase 模块连接 Microsoft SQL 2000
对于许多系统管理员(包括我自己)来说,Perl 是首选的脚本语言。Perl 几乎无处不在,可用于当今流行的绝大多数操作系统。由于其源代码的免费可用性,已经开发了数百个模块来扩展其功能。在 Perl 模块中,Tim Bunce 的 DBI(数据库独立接口)非常值得注意。Perl DBI 为与任何数据库(至少是任何具有相应 DBD(是的,数据库依赖接口)模块的数据库)接口提供了 API。
快速扫描 Perl HQ cpan.org 上列出的 Perl 模块,显示了用于 Informix、Oracle、Sybase、IBM DB2 和更多数据库的 DBD 模块。此列表中明显缺少用于连接 Microsoft SQL Server 的 DBD 模块。虽然已经开发了 DBD::ODBC 模块,但使用它需要单独的驱动程序管理器和合适的驱动程序。据我所知,这些驱动程序仅可从第三方供应商处获得用于 Microsoft SQL 2000,这种解决方案当然带来了专业开发和支持的好处。但事实证明,还有另一种方法。
由于与 Sybase 达成协议,Microsoft 的 SQL Server 产品在开发时使用了与 Sybase 相同的网络通信协议,即表格数据流 (TDS)。通过 SQL 7.0 的发布,Microsoft 正式支持 Sybase 客户端软件,但声明此类支持即将结束。因此,Perl DBD::Sybase 模块与 Sybase 免费下载的客户端库一起编译,能够连接到任何 Microsoft SQL Server,直到 SQL 2000 发布。
随着 SQL 2000 中引入 TDS 8.0 和对 TDS 7.0 的旧版支持,使用 TDS 4.2 的 Sybase 客户端的兼容性被打破。但是,DBD::Sybase 模块可以使用来自 freetds.org 的 TDS 库构建,该库支持 TDS 7.0 版本,并用于连接到 SQL 2000。以下是如何操作。
我已经在 Red Hat Linux 7.1 和 7.2 上测试过。由于此项目需要使用源代码,因此您需要一个编译器。GCC,GNU C 编译器,非常方便地随 Red Hat 的 Linux 发行版一起提供。Perl 和 DBI 模块同样以 RPM 形式在 Red Hat CD 上提供。
首先,将 DBD-Sybase-0.94.tar.gz 下载到您机器上的方便位置。这可以在 cpan.org 以及作者的下载页面 www.mbay.net/~mpeppler 上找到。FreeTDS 源代码可在 www.freetds.org 上获得。获取 freetds-0.53.tgz,这是截至撰写本文时的最新修订版。我强烈建议阅读这些网站上提供的所有有用的文档。
接下来,解压缩并解压这些下载的文件,然后 cd 到新创建的 freetds-0.53 目录并运行 ./configure --with-tdsver=7.0,这将写入一个 Makefile,适用于在您的机器上编译 FreeTDS 并将 tds 7.0 指定为默认协议。
现在运行 make
make Making all in include make[1]: Entering directory `/home/atrice/freetds-0.53/include' Making tds_configs.h
等等。
然后运行 make install 以安装您新编译的 FreeTDS。默认情况下,它安装到 /usr/local/freetds,尽管您可以在运行 configure 时使用 -prefix=(PATH) 开关来更改此设置。您必须是 root 用户才能安装
make install Making install in include make[1]: Entering directory `/home/atrice/freetds-0.53/include' make[2]: Entering directory `/home/atrice/freetds-0.53/include'
等等。来自 make install 的最终注释将类似于
if [ -f /usr/local/freetds/etc/freetds.conf ]; \ then :; \ else \ /usr/bin/install -c -m 644 freetds.conf /usr/local/freetds/etc/freetds.conf; \ fi make[2]: Leaving directory `/home/atrice/freetds-0.53' make[1]: Leaving directory `/home/atrice/freetds-0.53'您现在已经编译并安装了 FreeTDS。
接下来,我们执行非常相似的一组命令来配置和构建 DBD:Sybase 模块。但是,首先(非常重要),我们必须设置一个名为 SYBASE 的环境变量。此变量将设置为 FreeTDS 安装的路径。我正在使用 bash shell
export SYBASE=/usr/local/freetds
确认变量的正确设置
echo $SYBASE /usr/local/freetds然后 cd 进入 DBD-Sybase 目录并运行 Makefile.PL
perl Makefile.PL Sybase OpenClient found. The DBD::Sybase module needs access to a Sybase server to run the tests. To clear an entry please enter 'undef' Sybase server to use (default: undef): User ID to log in to Sybase (default: sa): Password (default: undef): Note (probably harmless): No library found for -lcs Note (probably harmless): No library found for -lsybtcl Note (probably harmless): No library found for -lcomn Note (probably harmless): No library found for -lintl Using DBI 1.20 installed in /usr/lib/perl5/site_perl/5.6.0/i386-linux/auto/DBI Writing Makefile for DBD::Sybase请注意,Makefile.PL 脚本会询问您有关 Sybase 服务器的信息。它使用此信息编写一个名为 PWD 的文件,该文件由模块提供的测试实用程序使用。这些实用程序旨在针对 Sybase 服务器而不是 Microsoft 服务器运行,而且我在测试中没有获得太多成功。有关找不到库的消息是由于使用 FreeTDS 库而不是 Sybase 的库编译 DBD::Sybase 造成的。
运行 make,然后运行 make install。来自 make install 的最后几条消息应如下所示
Installing /usr/share/man/man3/DBD::Sybase.3 Writing /usr/lib/perl5/site_perl/5.6.0/i386-linux/ auto/DBD/Sybase/.packlist Appending installation info to /usr/lib/perl5/5.6.0/ i386-linux/perllocal.pod
您已完成 DBD::Sybase 的安装。接下来,我们将配置 FreeTDS 以与您的 SQL 2000 数据库通信。
FreeTDS 有一个配置文件,很合乎逻辑地称为 freetds.conf。它位于 freetds 安装目录下的 /etc 中,因此在我的情况下,完整路径是 /usr/local/freetds/etc/freetds.conf。此文件中已存在一个示例 Microsoft 服务器配置,您只需修改它以反映您的服务器信息。我的看起来像这样
# A typical Microsoft SQL Server 7.0 configuration [file1] host = file1 port = 1433 tds version = 7.0
我的 SQL 服务器名为 file1;它在默认端口 1433 上运行其数据库服务,并且我已指定 tds 版本 7.0。在此文件的开头有一个全局配置部分,您也可以在其中设置 tds 版本。确保您的客户端计算机可以解析数据库服务器的主机名,或者直接使用其 IP 地址。
现在我们准备尝试连接。清单 1 是我的同事 Trevor Price 编写的 Perl 脚本,该脚本查询名为 Northwind 的示例数据库。此数据库包含在典型的 SQL 2000 安装中。它使用名为 sp_help 的存储过程,该过程返回有关该数据库中所有表的信息。将此代码复制到一个名为 testsql.pl 之类的文件中,然后编辑 $user 和 $password 以反映具有服务器访问权限的数据库帐户。
清单 1. Trevor Price 编写的 Perl 脚本,用于查询名为 Northwind 的示例数据库
运行脚本,您应该得到如下所示的输出
perl testsql.pl rows is -1 Alphabetical list of products dbo view Category Sales for 1997 dbo view Current Product List dbo view Customer and Suppliers by City dbo view Invoices dbo view Order Details Extended dbo view
如果您已走到这一步,恭喜您!我希望您发现这与我们一样有帮助。

Andrew Trice 是 Vital Link Business Systems 的系统管理员。他拥有康奈尔大学英国文学学士学位,并且是旧金山独立唱片公司 Iron Robot Records 的首席母带工程师。