数据库
首页 > 数据库> > SQLSERVER unixODBC安装使用

SQLSERVER unixODBC安装使用

作者:互联网

(转自:https://blog.csdn.net/zhizhengguan/article/details/89517561)

1、unixODBC
简介
ODBC(Open Database Connect)是由Microsoft 公司于1991 年提出的一个开放的,用于访问数据库的统一接口规范。unixODBC的是为非Window平台的系统实现ODBC规范接口的中间件。

unixODBC 提供了Linux 对ODBC 的支持,但它只是一个 ODBC的管理器, 要连接实际的数据库还得提供这种数据库的 ODBC 驱动.

FreeTDS就是Linux 下 用于连接MS SQL Server 和 Sybase 的免费ODBC 驱动
注意, 必须先装 unixODBC, 再装 freetds

数据源:是ODBC与数据库之间建立连接的依据,包括数据源名称、数据源描述,数据库驱动程序、数据库服务器地址、数据库端口号、数据库名称等。
ODBC驱动程序:ODBC与数据库之间的接口
驱动程序管理器:将应用程序对ODBC API的调用传递给正确的驱动程序,而驱动程序执行完操作之后得到结果返回给应用程序。
ODBC API:应用程序与ODBC之间的接口
ODBC管理器:管理数据源、驱动程序
用户通过ODBC管理器配置数据源,并获得数据源名称,应用程序提供数据源名称给ODBC,ODBC以此建立与相应数据库的连接

安装
1、源码安装
先下载最新的unixODBC源码包(http://www.unixodbc.org )放到适合自己的目录下,比如:/usr/local,然后运行下述命令:

# tar zxvf unixODBC-2.3.7.tar.gz
# cd unixODBC-2.3.7/
# ./configure --prefix=/usr/local/unixODBC-2.3.7 --includedir=/usr/include --libdir=/usr/local/lib -bindir=/usr/bin --sysconfdir=/usr/local/etc
# make && make install​

安装成功后,unixODBC所需的头文件都被安装到了/usr/inlucde下,编译好的库文件安装到了/usr/local/lib 下,与unixODBC相关的可执行文件安装到了/usr/bin下,配置文件放到了/usr/local/etc下。

2、二进制安装
$ yum install unixODBC unixODBC-devel
1
3、rmp安装
https://pkgs.org/download/unixODBC-devel
http://rpmfind.net/linux/rpm2html/search.php?query=unixODBC

uname -r
$ rpm -ivh unixODBC-devel-2.3.1-11.el7.x86_64.rpm

3、查看
查看是否安装成功

]# isql --version
unixODBC 2.3.7

查看安装位置
# which isql
/usr/bin/isql
# isql
**********************************************
* unixODBC - isql *
**********************************************

查看版本和安装信息
# odbcinst -j
unixODBC 2.3.7
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

2、freedsTDS
freeTDS官网地址:http://www.freetds.org/
FreeTDS是Unix 和Linux library的一个集合,通过FreeTDS可以连接到MicrosoftSQL Server 和 Sybase DB

安装
# 当前为root权限
$ cd freetds-1.1.5/
# 查看当前支持的 tdsver 版本,选择对应支持的 MSSQL 版本
$ ./configure --help
--with-tdsver=VERSION TDS protocol version (5.0/7.1/7.2/7.3/7.4/auto)
# 重编译安装,注意 tdsver 版本
$ ./configure --prefix=/usr/local/freetds --with-unixodbc=/usr/local/unixODBC-2.3.7 --enable-msdblib --with-tdsver=7.3 [源码安装]
$ make && make install

--prefix=/usr/local/freetds FreeTDS的默认安装目录 /usr/local/freetds
--enable-msdblib 允许 Microsoft 的函数库
--with-tdsver=7.3 指定TDS的协议版本,不填写则默认5.0版,7.3支持MSSQL2008
1

/usr/local/freetds/bin/tsql -C
1
连接mssql
直接连接
/usr/local/freetds/bin/tsql -H 192.168.133.133 -p1433 -Usa -P123456 -Darguse
1
配置连接
在 FreeTDS 的配置文件中添加指向具体数据库的访问信息
修改/usr/local/etc/freetds.conf文件,添加如下内容:
$ sudo gedit /usr/local/freetds/etc/freetds.conf
[mssqlserver]
host = 192.168.133.133
port = 1433
tds version = 7.3
client charset = UTF-8
1

注意:
client charset,客户端软件可识别的字符集,必需大于或等于服务端数据库使用的字符集.

由于 UTF-8 是所由字符集的超集,因此设置为 UTF-8 总是可行的.此外, FreeTDS的client charset不能设置为 UTF16.

连接:
/usr/local/freetds/bin/tsql -Smssqlserver -U sa -P 123456
1
https://blog.csdn.net/zhizhengguan/article/details/89516455

错误:configure: error: sql.h not found
./configure --prefix=/usr/local/freetds --with-unixodbc=/usr/local/unixODBC-2.3.7 --enable-msdblib --with-tdsver=7.3 时出现问题:configure: error: sql.h not found
1、修改confure
vim ./configure

找到$with_unixodbc中的

test -r "$ODBC_INC/sql.h" || as_fn_error $? "sql.h not found" "$LINENO" 5

这段代码

修改成

test -r "$ODBC_INC/sql.h" || as_fn_error $? "$ODBC_INC/sql.h not found" "$LINENO" 5

2、配置
$ ./configure --prefix=/usr/local/freetds --with-unixodbc=/usr/local/unixODBC-2.3.7 --enable-msdblib --with-tdsver=7.3
报错:configure: error: /usr/local/unixODBC-2.3.7/include/sql.h not found
1
2
3、生成软链接
ln -s /usr/local/unixODBC/include/sql.h /usr/local/unixODBC1/include/sql.h
ln -s /usr/include/sqlext.h /usr/local/unixODBC-2.3.7/include/sqlext.h
ln -s /usr/include/sqltypes.h /usr/local/unixODBC-2.3.7/include/sqltypes.h
ln -s /usr/include/sqlucode.h /usr/local/unixODBC-2.3.7/include/sqlucode.h
1
2
3
4
4、./configure --prefix=/usr/local/freetds --with-unixodbc=/usr/local/unixODBC-2.3.7 --enable-msdblib --with-tdsver=7.3
3、连接mssql
配置
在/etc/odbcinst.ini (或者/usr/local/etc/odbcinst.ini) 中登记 FreeTDS 驱动
$ cat /usr/local/etc/odbcinst.ini
# Driver from FreeTDS package
# setup from FreeTDS package
[FreeTDS] # unixodbc驱动名称
Description=ODBC of FreeTDS for MS SQL 2008 # 简介
Driver=/usr/local/freetds/lib/libtdsodbc.so # 驱动所在位置
1
2
3
4
5
6
在/usr/local/etc/odbc.ini中配置DNS [或者修改/etc/odbc.ini]
[ODBC Data Sources]
TEST2dsn= My second Test DSN
TEST3dsn= testststtsts

[TEST2dsn]
Driver = /usr/local/freetds/lib/libtdsodbc.so
Description = My Second Test DSN
Trace = No
Server = 192.168.133.133
Database = master
Port = 1433
TDS_Version = 7.3


[TEST3dsn]
Driver = /usr/local/freetds/lib/libtdsodbc.so
Description = My Second Test DSN
Trace = No
Server = 192.168.133.133
Database = master
Port = 1433
TDS_Version = 7.3

连接
isql -v TEST2dsn sa 123456
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>

理论
两种ini文件
ODBC会区分两种类型的ini文件。

系统ini文件能被所有用户访问,但是不能修改;用户ini文件则是针对特定用户的,并且能被该特定用户修改。

ODBC的系统文件是odbcinst.ini和odbc.ini。用户文件是~/.odbc.ini(注意开头.号),并包含在各自用户的home目录下。

系统文件odbcinst.ini包含对所有用户可访问的ODBC驱动信息;odbc.ini文件包含所有用户可访问的DSN信息。这些’系统DSN’对于如web服务器这样,不以真实用户身份运行的应用十分有用,因为这些程序不会有自己的home目录来存放.odbc.ini文件。

配置文件路径
odbcinst.ini和odbc.ini文件默认放在/usr/local/etc下面。但由于现在能通过指定配置脚本的prefix来指定文件路径,所以如果在configure的时候指定的了prefix,则文件路径在{prefix}/etc下面

配置文件内容
/etc/odbcinst.ini
备注:unixODBC先天支持PostgreSQL和MYSQL者两个驱动

# cat odbc.ini
[PostgreSQL]
Description=ODBC for PostgreSQL
Driver=/usr/lib/psqlodbcw.so
Setup=/usr/lib/libodbcpsqlS.so
Driver64=/usr/lib64/psqlodbcw.so
Setup64=/usr/lib64/libodbcpsqlS.so
FileUsage=1

[MySQL]
Description=ODBC for MySQL
Driver=/usr/lib/libmyodbc5.so
Setup=/usr/lib/libodbcmyS.so
Driver64=/usr/lib64/libmyodbc5.so
Setup64=/usr/lib64/libodbcmyS.so
FileUsage=1


[PostgreSQL]是driver的名字,这里表明这是一个PostgreSQL driver。
Driver 和Setup路径指出ODBC driver和setup libs 的位置。
当我们使用ODBCConfig工具添加新的DSN时,会调用这个setup lib。但是由于现在我们是非GUI安装,所以其实可以不用管他。
Driver路径最为关键。当DSN调用SQLConnect或SQLDriverConnect时,driver manager会动态载入这些库。若这里指定到了错误的Driver,则DSN无法工作。
FileUsage由odbcinst 命令自己添加,所以如果你使用的是文本编辑器,则需要自己添加。
Threads
由于1.6版本之后添加了多线程支持,所以如果driver manager构建了多线程支持,则可以配置:

[PostgreSQL]
Description = PostgreSQL driver for Linux & Win32
Driver = /usr/local/lib/libodbcpsql.so
Setup = /usr/local/lib/libodbcpsqlS.so
Threading = 2
这项配置改变了默认的线程序列化等级(thread serialization level).

odbc.ini
以上转载自:https://www.cnblogs.com/oDoraemon/p/5364271.html

参考:https://blog.csdn.net/foxgod/article/details/78748657
https://blog.csdn.net/qq_25549309/article/details/51555789
https://www.cnblogs.com/zlja/archive/2012/03/06/2449470.html

参考:https://www.cnblogs.com/zlja/archive/2012/03/06/2449470.html
https://blog.csdn.net/zhizhengguan/article/details/88777732

标签:--,SQLSERVER,unixODBC,ODBC,local,usr,安装,ini
来源: https://www.cnblogs.com/jfqy/p/14365295.html