Linux通过FreeTDS与unixODBC连接SQL Server配置指南
本文档详细记录了在Red Hat AS 5.5环境下,利用unixODBC框架配合FreeTDS驱动程序,成功连接Windows端SQL Server 2000数据库的配置流程,重点解决了端口防火墙设置、字符集兼容性及ODBC数据源配置等关键问题。
结果或目标
在Linux系统中无需安装SQL Server服务,而是通过ODBC协议远程连接Windows主机上的SQL Server数据库,确保应用程序可通过标准接口访问数据。
准备条件
- Windows端环境(以Windows XP Professional为例):
- 已安装SQL Server 2000及SP3补丁(必须安装chs_sql2ksp3.exe,否则可能不开启1433端口)。
- 已知数据库用户名和密码(例如用户autotest,密码autotest,数据库名atsdb)。
- 确认TCP/IP 1433端口处于监听状态。可通过命令行执行
netstat -a验证。 - 关闭Windows系统自带防火墙,或开放1433端口通信权限。注意:Windows XP默认防火墙会阻止外部连接,且SQL Server有时需通过445/139端口通信,抓包分析有助于排查此类隐蔽拦截。
- Linux端环境:
- 操作系统:Red Hat AS 5.5。
- 所需安装包:
unixODBC-2.2.8.tar.gz和freetds-0.62.4.tar.gz。 - 操作权限:需要使用root用户进行安装和配置。
真实操作顺序
第1步:安装unixODBC框架
目的:提供标准的ODBC管理库,作为Linux应用与数据库驱动的中间层。
动作:解压并编译安装到指定路径。
# tar vxzf unixODBC-2.2.8.tar.gz
# cd unixODBC-2.2.8
# ./configure --prefix=/usr/local/unixODBC --enable-gui=no
# make
# make install
第2步:安装FreeTDS驱动
目的:安装用于连接Microsoft SQL Server和Sybase数据库的TDS协议驱动。
动作:指定unixODBC路径并配置TDS版本后编译安装。
# tar vxzf freetds-0.62.4.tar.gz
# cd freetds-0.62.4
# ./configure --prefix=/usr/local/freetds --with-unixodbc=/usr/local/unixODBC --with-tdsver=8.0
# make
# make install
第3步:配置FreeTDS连接参数
目的:定义目标SQL Server服务器的IP、端口、TDS版本及字符集映射。
入口:编辑配置文件 /usr/local/freetds/etc/freetds.conf。
重要参数说明:
[SQLServer2000]:这是客户端引用服务器时的逻辑名称。host:SQL Server的实际IP地址(如192.168.1.110)。port:通常为1433。client charset:客户端字符集。若连接出现乱码或失败,可尝试ISO-8859-1或UTF-8。某些环境下UTF-8会导致连接报错,建议根据实际反馈调整。
参考配置片段:
[global]
tds version = 8.0
[SQLServer2000]
host = 192.168.1.110
port = 1433
tds version = 8.0
client charset = ISO-8859-1
第4步:验证FreeTDS基础连通性
目的:在不经过ODBC的情况下,直接测试底层驱动是否能连上数据库。
动作:使用 tsql 工具登录。
$ /usr/local/freetds/bin/tsql -S SQLServer2000 -U autotest -P autotest
若显示“Changed language setting...”并能执行SQL语句(如 use atsdb; select * from auth_function;),则说明FreeTDS配置成功。
第5步:配置unixODBC驱动注册表
目的:告诉unixODBC系统存在一个名为“SQLSERVER”的驱动及其动态链接库位置。
入口:编辑文件 /usr/local/unixODBC/etc/odbcinst.ini。
添加以下内容:
[ODBC]
Trace = Yes
TraceFile = /tmp/sql.log
ForceTrace = Yes
Pooling = No
[SQLSERVER]
Description = SQLSERVER Driver
Driver = /usr/local/freetds/lib/libtdsodbc.so
Setup = /usr/local/freetds/lib/libtds.so
CPTimeout = 5
CPReuse = 5
第6步:创建并配置DSN(数据源名称)
目的:将具体的服务器信息、数据库名和账号绑定到一个易用的名字(如ATSDB)。
入口:编辑文件 /usr/local/unixODBC/etc/odbc.ini。
注意:这里的 Driver 字段必须与 odbcinst.ini 中定义的驱动名称一致;Database 为要连接的库名。
[ATSDB]
Driver = SQLSERVER
Description = MS SQL Server Database
Server = 192.168.1.110
Database = atsdb
Port = 1433
UID = autotest
PWD = autotest
若有多个服务器,可添加新的Section(如 [ATSDB2]),但注意Section名称即DSN名称,不可重复。
第7步:最终ODBC连接测试
目的:通过isql工具模拟应用程序调用,确认整个链路通畅。
动作:运行 isql 命令连接刚才创建的DSN。
# /usr/local/unixODBC/bin/isql -v ATSDB autotest autotest
输出示例:
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| echo [string] |
| quit |
| |
+---------------------------------------+
输入 quit 退出。若提示Can't open lib...等错误,请检查LD_LIBRARY_PATH环境变量是否包含FreeTDS的lib目录。
完成判断
当 isql -v DSN名称 用户名 密码 命令成功返回“Connected!”并可执行查询时,表示Linux到SQL Server的ODBC连接配置已完成。
原文有依据的排错
- 无法连接或超时:首先确认Windows端防火墙已关闭1433端口限制。其次使用
telnet ip 1433测试网络端口可达性。若连接不上,可能是未打SQL SP3补丁导致端口未开启。 - 字符集警告或乱码:FreeTDS连接日志中出现“character(s) could not be converted”属于常见警告,不影响核心数据读取,但若需严格匹配,请在
freetds.conf中调整client charset为ISO-8859-1或UTF-8进行切换试验。 - 找不到驱动 (libtdsodbc.so missing):检查
odbcinst.ini中的Driver绝对路径是否正确,并确保该文件存在于Linux系统中。
简要总结
通过上述步骤,在Linux环境下建立了一条稳定的SQL Server ODBC通道。关键在于理解FreeTDS作为底层协议转换器与unixODBC作为上层管理器的分工,以及细心处理Windows端的网络与安全策略设置。
以上就是linux下配置SQLSERVER ODBC的详细流程,更多关于Linux数据库连接的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













