在将 Informix 数据源添加至 DB2 联合服务器之前,需要在联合服务器上安装和配置 Informix Client SDK 软件。有关如何安装 Client SDK 软件的特定详细信息,参见随 Informix 数据库软件提供的文档中的安装过程。确保包括了 Informix Client SDK 库,它是安装的一部分。
要设置联合服务器以存取存储在 Informix 数据源上的数据,您需要:
本章讨论第 3 步。
本章中的指示信息适用于 AIX、“Solaris 操作环境”和 HP-UX 操作系统。特定操作系统的差别在出现时作了注释。
要将 Informix 数据源添加至联合服务器,需要:
本节中详细说明了这些步骤。
通过修改 db2dj.ini 文件并发出 db2set 命令来设置数据源环境变量。db2dj.ini 文件包含关于安装在联合服务器上的 Informix 客户机软件的配置信息。db2set 命令使用您的设置来更新 DB2 概要文件注册表。
在分区数据库系统中,可对特定实例中的所有节点使用单个 db2dj.ini 文件,也可以对特定实例中的一个或多个节点使用唯一的 db2dj.ini 文件。对于每个实例,非分区数据库系统只能有一个 db2dj.ini 文件。
要设置环境变量:
将 INFORMIXDIR 环境变量设置为指向 Informix Client SDK 软件的安装目录的路径;例如:
|INFORMIXDIR=/informix/csdk
此变量标识缺省 Informix 服务器的名称。
|INFORMIXSERVER=inf93 |
注意:尽管 Informix 包装器不使用此变量的值,但 Informix 客户机要求设置此变量。该包装器使用节点服务器选项的值,它指定您想要访问的 Informix 数据库服务器。
如果您在使用 Informix sqlhosts 文件的缺省路径($INFORMIXDIR/etc/sqlhosts),则不需要设置此变量。然而,如果您对 Informix sqlhosts 文件使用不同于缺省路径的路径,则需要将此变量设置为 Informix sqlhosts 文件的全路径名。例如:
|INFORMIXSQLHOSTS=/informix/csdk/etc/my_sqlhosts |
PATH=$INFORMIXDIR/bin:$PATH export PATH INFORMIXDIR=<informix_client_path> export INFORMIXDIR
其中,informix_client_path 是联合服务器上表示 Informix 客户机的安装目录的路径。如果路径中的名称包含空白,则使用双引号(")将该路径引起来。
. .profile
如果在非分区数据库系统中使用 db2dj.ini 文件,或者如果想要 db2dj.ini 文件仅应用于当前节点,则发出:
db2set DB2_DJ_INI=sqllib/cfg/db2dj.ini
如果您正在分区数据库系统中使用 db2dj.ini 文件, 并且您想要 db2dj.ini 文件中的值适用于此实例中的所有节点,则应发出:
db2set -g DB2_DJ_INI = sqllib/cfg/db2dj.ini
如果在分区数据库系统中使用 db2dj.ini 文件,并且想要将 db2dj.ini 文件中的值应用于特定节点,则发出:
db2set -i INSTANCEX 3 DB2_DJ_INI=sqllib/cfg/node3.ini
其中:
要允许存取 Informix 数据源,DB2 联合服务器必须连接编辑至客户机库。连接编辑进程将为联合服务器将与之通信的每个数据源创建包装器库。在运行 djxlinkInformix 脚本时就创建了 Informix 包装器库。要发出 djxlinkInformix 脚本,输入:
djxlinkInformix
|djxlinkInformix |脚本仅创建 Informix 包装器库。还有另一个脚本,即试图为“DB2 通用数据库”支持的每个数据源 |(Oracle 和 Microsoft SQL Server 等等)创建一个包装器库的 djxlink 脚本。如果只安装了其中一些数据源的客户机软件,则在发出 djxlink 脚本时,对于每个缺少的数据源,都将接收到一条错误消息。
|您需要有 |“UNIX 系统管理员”(root 用户)权限才能运行 djxlinkInformix 和 djxlink 脚本。
|djxlinkInformix |和 djxlink 脚本将详细的错误和警告信息写至特定文件,这取决于操作系统。例如,在 AIX 上,djxlinkInformix 脚本会写至 /usr/lpp/db2_07_01/lib/djxlinkInformix.out,而 djxlink 脚本会写至 /usr/lpp/db2_07_01/lib/djxlink.out。
|djxlinkInformix 和 djxlink 脚本会在特定目录中创建包装器库,这取决于操作系统。例如,在 AIX 上,会在 /usr/lpp/db2_07_01/lib 目录中创建 libinformix.a 包装器库。
|在创建 libinformix.a 包装器库后检查它的许可权,以确保 DB2 实例所有者可读取和执行该库。如果 DB2 实例所有者不在“系统”组中,则对 libinformix.a 包装器库的许可权应为 -rwxr-xr-x root system ...libinformix.a。 |
为确保在程序中设置了环境变量,应回收 DB2 实例。回收实例时,刷新 DB2 实例以接受您所作的更改。
发出下列命令来回收 DB2 实例:
db2stop db2start
|此文件指定每个 Informix 数据库服务器的位置以及该数据库服务器的连接类型(协议)。可有几种方式创建此文件。可从让 Informix |Connect 或 Informix Client SDK 连接至 Informix 服务器的另一系统来复制它。还可在 DB2 服务器上配置 |Informix Client SDK 以连接至 Informix 服务器,该服务器创建 sqlhosts 文件。
|复制或创建 sqlhosts 文件之后,DB2 实例所有者应使用 Informix dbaccess |(如果它在 DB2 服务器上)连接和查询 Informix 服务器。这允许在您尝试配置 |DB2 Relational Connect 以使用 Informix Client SDK 之前,Informix Client SDK 能够连接至 |Informix 服务器。
有关设置此文件的更多信息,参考 Informix 手册 Administrators Guide for Informix Dynamic Server。
警告: |
---|
如果未在 sqlhosts 文件中定义 Informix 数据库服务器名,则当您执行的操作需要连接至 Informix 数据库服务器时,将接收到错误。 |
使用 CREATE WRAPPER 语句来指定将用来存取 Informix 数据源的包装器。包装器是联合系统用来与数据源进行通信以及从数据源中检索数据的机制。以下示例显示了 CREATE WRAPPER 语句:
CREATE WRAPPER informix
其中,informix 是包装器名;informix 是与 Informix Client SDK 软件配合使用的缺省包装器名。
可以用您选择的名称来替代缺省包装器名。但是,如果这样做的话,则还必须在 CREATE WRAPPER 语句中包括 LIBRARY 参数以及联合服务器的包装器库的名称。有关包装器库名的更多信息,参见 DB2 SOL Reference 中的 CREATE WRAPPER 语句。
Informix 的包装器库名是:
要在存取 Informix 数据源提高性能,应在联合服务器上设置 DB2_DJ_COMM 环境变量。此变量确定联合服务器初始化时是否装入包装器。将 DB2_DJ_COMM 环境变量设置为包括与您在先前步骤中指定的包装器相对应的包装器库。如果正在使用 Korn 外壳程序或 Bourne 外壳程序命令行界面,则使用下列导出命令:
DB2_DJ_COMM='libinformix.a' export DB2_DJ_COMM
DB2_DJ_COMM='libinformix.so' export DB2_DJ_COMM
DB2_DJ_COMM='libinformix.sl' export DB2_DJ_COMM
必须确保等号(=)两边都没有空格。
如果在使用 C 外壳程序命令行界面,则使用下列命令来设置环境变量:
setenv DB2_DJ_COMM 'libinformix.a'(“DB2 AIX 版”服务器) setenv DB2_DJ_COMM 'libinformix.so'(“DB2 Solaris 操作环境版”服务器) setenv DB2_DJ_COMM 'libinformix.sl'(“DB2 HP--UX 版”服务器)
有关包装器库名和 DB2_DJ_COMM 环境变量的更多信息,参考 DB2 SQL Reference。
使用 CREATE SERVER 语句来定义想要存取其数据源的每个 Informix 服务器。此语句的语法为:
CREATE SERVER server_name TYPE server_type VERSION server_version WRAPPER wrapper_name OPTIONS (NODE 'node_name', DBNAME 'database_name')
其中:
|
下面是 CREATE SERVER 语句的示例:
CREATE SERVER asia TYPE informix VERSION 9 WRAPPER informix OPTIONS (NODE 'abc', DBNAME 'sales')
FOLD_ID 和 FOLD_PW 服务器选项会影响包装器在将用户标识和密码发送至 Informix 之前是将它们转换为大写还是小写。带有 FOLD_ID 和 FOLD_PW 服务器选项的 CREATE SERVER 语句的示例为:
CREATE SERVER asia TYPE informix VERSION 9 WRAPPER informix OPTIONS (NODE 'abc', DBNAME 'sales', FOLD_ID 'U', FOLD_PW 'U')
如果 DB2 联合服务器上的用户标识或密码与 Informix 数据源上的用户标识或密码不同,则使用 CREATE USER MAPPING 语句来将本地用户标识映射为在 Informix 数据源中定义的用户标识和密码;例如:
CREATE USER MAPPING FOR local_userid SERVER server_name OPTIONS (REMOTE_AUTHID 'remode_userid', REMOTE_PASSWORD 'remote_password')
其中:
下面是 CREATE USER MAPPING 语句的示例:
CREATE USER MAPPING FOR robert SERVER asia OPTIONS (REMOTE_AUTHID 'bob', REMOTE_PASSWORD 'day2night')
可以使用 DB2 专用寄存器 USER 来将发出 CREATE USER MAPPING 语句的人员的授权标识映射为在 REMOTE_AUTHID 用户选项中指定的数据源授权标识。下面是包括 USER 专用寄存器的 CREATE USER MAPPING 语句的示例:
CREATE USER MAPPING FOR USER SERVER asia OPTIONS (REMOTE_AUTHID 'bob', REMOTE_PASSWORD 'day2night')
有关其它选项的更多信息,参见 DB2 SQL Reference。
为位于 Informix 数据源中的每个表、视图或 Informix 同义词指定别名。别名可长达 128 个字符。查询 Informix 数据源时将使用这些别名。除非用双引号(")将服务器、模式和表名引起来,否则,DB2 将把它们转换为大写。以下示例显示了 CREATE NICKNAME 语句:
CREATE NICKNAME nickname FOR server_name."remote_schema_name"."remote_table_name"
其中:
下面是 CREATE NICKNAME 语句的示例:
CREATE NICKNAME salesjapan FOR asia."salesdata"."japan"
对想要为其创建别名的每个表或视图重复此步骤。创建别名时,DB2 将使用连接来查询数据源目录。此查询将测试您与数据源的连接。如果连接不工作,则将接收到错误消息。
有关 CREATE NICKNAME 语句的更多信息,参见 DB2 SQL Reference。有关一般别名和验证数据类型映射的更多信息,参见《DB2 管理指南》。