技术顾问, IBM
2004 年 4 月
该系列文章强调了开放源代码软件在 IBM 平台上的可操作性。本文介绍了 AIX5L 上用于 DB2 UDB 8.1 的 unixODBC。一步步地指示了如何设置在 AIX5L 系统上连接 DB2 UDB 8.1 数据源的 unixODBC Driver Manager,从而进一步扩展了开放源代码的功能。
简介
开放源代码软件是一种观念,而这种观念最终已经成为了现实。尽管一些竞争者认为这是一种引起混乱的技术,但该技术的稳步发展已经超过二十年了。IBM 是支持开放源代码团体(Open Source Community)的一个行业领先者。例如,1998 年 6 月中旬,IBM 就选择了开放源代码的 Apache webserver 来支持和绑定其 WebSphere 套件。从此,IBM 就实实在在地履行了对于开放源代码的承诺,从促进 Linux 内核开发,到将 Linux 作为 IBM 所有高端 pSeries eServer 上的主要操作系统之一。
ODBC 是一种开放的规范,最初是由 Microsoft 在 20 世纪 90 年代初期开发,用于提供从可预测的 API 到通用数据源的访问。多年以来,该规范已经逐步发展成为应用程序开发人员用以访问数据源的实际行业标准。它支持应用程序和关系数据库管理系统(Relational Database Management Systems,RDBMS)之间的无缝连接和通信。在一个典型的 ODBC 环境中,Driver Manager 提供应用程序用以运行结构化查询语言(Structured Query Language,SQL)的接口,并动态加载 RDBMS 应用程序需要连接的驱动程序。在 DB2 中,提供了一个服从 ODBC 的驱动程序。该驱动程序十分灵活,既支持 Driver Manager 已有的环境(例如 unixODBC),又可由无 Driver Manager 的应用程序层动态加载它。
unixODBC 和 DB2
在支持开放源代码的过程中,IBM/DB2 明白,强制开发人员将应用程序修改为直接加载预先打包的服从 ODBC 的驱动程序(即 DB2 CLI)是不公平的。大多数开发环境使用 ODBC Driver Manager 来加载合适的驱动程序。该管理器给他们提供了通过连接源的 ODBC 驱动程序来连接任何数据源的灵活性。在开放源代码社区中,ODBC Driver Manager 的选择就是 unixODBC。在 DB2 环境中,必须使用 DB2 CLI。DB2 CLI 十分灵活,既可以充当 ODBC Driver,也可以充当 ODBC Driver Manager,前者允许它被附加在 unixODBC Driver Manager 中。下图展示了 DB2 的特定环境和带有 unixODBC 的环境的不同。
对于完全在 DB2 特定环境中操作并需要利用数据源的所有功能的应用程序,DB2 CLI 环境是十分理想的。应用程序利用 DB2 CLI 这个服从 ODBC 的驱动程序来访问数据源。但是,扩展该模型以用于其他数据源则可能需要重新编译应用程序。在 ODBC Driver 环境中,实际上不存在重新编译。开发人员可以在 unixODBC Driver Manager 中融入必要的 DB2 驱动程序,且不必打乱应用程序层。该环境极其灵活,并且允许容易地将 DB2 插入任何现有的 RDBMS 环境中。
系统需求
- AIX5.1 或更高版本。
- DB2 UDB Version 7.1 或更高版本。
- unixODBC Version 2.50.3 或更高版本。
如果不使用 GNU C/C++:
- Visual Age C/C++(VACPP)Version 5.0 或更高版本。
如何为 AIX5L 设置 unixODBC Driver Manager
unixODBC 在 32 位和 64 位 AIX 环境中都经过了测试。可从 http://www.unixodbc.org下载其源代码。目前,可获得 gzip、tar 两种格式。这意味着您必须:
- 在您可以创建文件和目录的地方下载 unixODBC*.tar.gz 文件。
- gunzip unixODBC*.tar.gz。这将创建一个 unixODBC*.tar。
- tar -xvf unixODBC*.tar。创建源代码。
unixODBC 利用 GNU autoconf 进程来进行安装。要进行安装,您仅仅需要运行下列命令:
./configure(构建环境配置工具)makemake install
配置工具
默认情况下,配置工具搜索 GNU 编译器来构建 unixODBC,并且配置该构建来将其安装在 /usr/local 中。可从 http://www.ibm.com/developerworks/views/linux/downloads.jsp下载 GNU 编译器。但是,可以修改 unixODBC 的安装位置。要修改安装位置,请用 prefix 选项运行 configure :
./configure --prefix=<preferred location>
通过运行下列命令,您可以看到所有的配置选项:
./configure --help
VisualAge C++ 需求
在 AIX 下,您可以用 VisualAge C++ Compiler(VACPP),Version 5.0 或更高版本来构建 unixODBC。当用 VACPP 进行构建时,您必须调用支持线程的编译器,并且通过发出下列命令显式地禁用 GUI 和 DRIVER 支持:
./configure --disable-gui --disable-drivers CC=xlc_r CXX=xlC_r
AIX 安装后需求
一旦建立了 unixODBC 库,就要在 prefix 选项所指定的位置中创建四个目录,prefix 变量的默认值为 /usr/local.:
- <preferred location>/lib:包含 unixODBC 库。
- <preferred location>/etc:包含 ODBC 配置 INI 文件。
- <preferred location>/include:包含必要的 unixODBC 头文件。
- <preferred location>>/bin:包含用以测试 unixODBC 到数据库连通性的有用工具。
在 AIX 上创建新实例的过程中,DB2 将 CLI/ODBC 驱动程序的副本放置到数据库实例目录中。
- DB2INSTANCE_HOME>/sqllib/lib/libdb2.a(静态归档文件)
然而,unixODBC Driver Manager 将动态地加载 DB2 驱动程序,这意味着必须从该驱动程序 1提取共享对象。为此,要发出下列命令:
cd <DB2instance_home>/sqllib/lib ar -x libdb2.a
这将产生 shr.o。为了维护一致性,将该文件重新命名为 libdb2.so。
1注意,在 DB2 安装目录(Version 7.1:usr/lpp/db2_07_01/lib)中找到的 db2.o 是与 DB2 版本 8 之前的一些版本一起发布的。db2.o 是一个可以使用的可链接共享对象,因而不必从 libdb2.a 中提取共享对象。
用 DB2 驱动程序注册






