[linux]unixODBC的安装配置说明

什么是unixODBC:

ODBC(Open Database Connect)是由Microsoft 公司于1991 年提出的一个开放的,用于访问数据库的统一接口规范。

unixODBC的是为非Window平台的系统实现ODBC规范接口的中间件。

unixODBC的安装

有GUI的用户可以使用ODBCConfig tool 安装。教程在官网文档有详细介绍,不再赘述。地址:http://www.unixodbc.org/doc/UserManual/

以下介绍没有GUI界面的安装说明,同样也是来自官方文档,地址:http://www.unixodbc.org/odbcinst.html

我通过 apt-get install unixODBC 进行安装,安装完成后对odbcinst.ini和odbc.ini文件进行配置修改。

自己编译或自己解压安装的需要自行摸索,安装完成后对odbcinst.ini和odbc.ini文件的修改是一致的。

为了更清楚了解配置的过程,需要先了解一些背景信息:

什么是ini文件:

ODBC首次出现在Window 3.0中。当时Windows使用.ini文件去包含配置信息。

ini文件的文本格式为:

[section1]

entry1 = value

entry2 = value

[section2]

entry1 = value

entry2 = value

...

虽然后来Windows NT将这些ini文件替换成了注册表的形式,但是ODBC中用于访问这些配置信息的API仍然保持不变。

unixODBC仍然保留了用ini存储配置信息的习惯。

系统 vs 用户

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

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

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

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

举一个含ODBC支持的Apache和PHP的例子。当http server第一次启动时,它通过root调用SQLAllocEnv。然后它再切换到指定用户去调用SQLConnect。此时如果DSN不是一个系统DSN,就会出现fails。

FILEDSN

ODBC 3 还有第三种类型的DSN, file DSN。目前unixODBC还不支持FILEDSN。略。

文件路径

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

文件内容

odbcinst.ini

以下是一个示例:

[PostgreSQL]
Description     = PostgreSQL driver for Linux & Win32
Driver          = /usr/local/lib/libodbcpsql.so
Setup           = /usr/local/lib/libodbcpsqlS.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

odbc.ini的内容要复杂一些,主要是因为不同的driver需要不同的配置项。

最后列出了支持所有driver的配置项,以供参考。这些配置项可以通过odbcinst命令,或文本编辑器来添加。

对应上面例子中的driver的配置项:

[PostgreSQL]
Description         = Test to Postgres
Driver              = PostgreSQL
Trace               = Yes
TraceFile           = sql.log
Database            = nick
Servername          = localhost
UserName            =
Password            =
Port                = 5432
Protocol            = 6.4
ReadOnly            = No
RowVersioning       = No
ShowSystemTables    = No
ShowOidColumn       = No
FakeOidIndex        = No
ConnSettings        =

Driver项用于匹配odbcinst.ini的[section]部分。不过也可以直接指向driver路径,只是可能需要注意路径访问权限的问题。

其他数据库的配置项例子:

Templates

The templates for the included drivers are...

Postgress

[PostgreSQL]
Description         = Test to Postgres
Driver              = PostgreSQL
Trace               = Yes
TraceFile           = sql.log
Database            = nick
Servername          = localhost
UserName            =
Password            =
Port                = 5432
Protocol            = 6.4
ReadOnly            = No
RowVersioning       = No
ShowSystemTables    = No
ShowOidColumn       = No
FakeOidIndex        = No
ConnSettings        =

Mini SQL

[Mini SQL]
Description     = MiniSQL
Driver          = MiniSQL
Trace           = No
TraceFile       =
Host            = localhost
Database        =
ConfigFile      =

MySQL

[MySQL-test]
Description     = MySQL test database
Trace       = Off
TraceFile   = stderr
Driver      = MySQL
SERVER      = 192.168.1.26
USER        = pharvey
PASSWORD    =
PORT        = 3306
DATABASE    = test

NNTP driver

[nntp Data Source]
Description     = nntp Driver
Driver          = nntp Driver
Trace           = No
TraceFile       =
Host            = localhost
Database        =
Port            =

FreeTDS driver

Driver = TDS
Description = Northwind sample database
Trace = No
Server = 192.168.1.25
Database = Northwind
UID = sa

Sybase SQL Anywhere 5.0

Thanks Greg.
[Sybase SQL Anywhere 5.0]
Driver=Sybase SQL Anywhere 5.0
Description=Sybase SQL Anywhere 5.0 ODBC Driver
Userid=dba
Password=sql
DatabaseFile=sademo.db