||在将 Sybase 数据源添加至联合服务器之前,需要在 DB2 联合服务器上安装和配置 Sybase Open Client 软件。有关如何安装 Open Client |软件的特定详细信息,参见随 Sybase 数据库软件提供的文档中的安装过程。作为安装的一部分,应确保在 |Sybase 服务器上安装了 Sybase 目录存储过程,并且在 DB2 联合服务器上安装了 Sybase Open Client 库。
|配置客户机软件与 Sybase 服务器的连接后,使用其中一个 |Sybase 工具来测试连接。对 UNIX 使用 isql 工具,对 Windows 使用 SQL Advantage 工具。
|要设置联合服务器以存取存储在 Sybase 数据源上的数据,您需要:
|本章讨论第 2 步和第 3 步。
|本章中的指示信息适用于 Windows NT、AIX 和“Solaris 操作环境”。特定于平台的区别在出现这些平台时作了注释。
|要将 Sybase 数据源添加至联合服务器,需要:
|本节中详细说明了这些步骤。
|通过修改 db2dj.ini 文件并发出 db2set |命令来设置数据源环境变量。db2dj.ini |文件包含关于安装在联合服务器上的 Sybase 客户机软件的配置信息。db2set 命令使用您的设置来更新 DB2 概要文件注册表。
|在分区数据库系统中,可对特定实例中的所有节点使用单个 db2dj.ini 文件,也可以对特定实例中的一个或多个节点使用唯一的 db2dj.ini 文件。对于每个实例,非分区数据库系统只能有一个 db2dj.ini 文件。
|要设置环境变量:
| SYBASE="<sybase home directory>" |
|其中 <sybase home directory> |是安装 Sybase 客户机的目录。
|如果在非分区数据库系统中使用 |db2dj.ini 文件,或者如果想要 db2dj.ini |文件仅应用于当前节点,则发出:
|db2set DB2_DJ_INI=$HOME/sqllib/cfg/db2dj.ini
|如果在分区数据库系统中使用 db2dj.ini 文件,并且想要将 db2dj.ini 文件中的值应用于此实例内的所有节点,则发出:
|db2set -g DB2_DJ_INI=$HOME/sqllib/cfg/db2dj.ini
|如果在分区数据库系统中使用 db2dj.ini 文件,并且想要将 db2dj.ini 文件中的值应用于特定节点,则发出:
|db2set -i INSTANCEX 3 DB2_DJ_INI=$HOME/sqllib/cfg/node3.ini
|其中: |
|要允许存取 Sybase 数据源,DB2 联合服务器必须编辑为链接至客户机库。链接-编辑过程将为每个数据源创建一个包装器,联合服务器将与包装器进行通信。当运行 |djxlink 脚本时,就创建了包装器库。要发出 djxlink 脚本,输入:
|djxlink
|为确保在程序中设置了环境变量,应回收 DB2 实例。回收实例时,刷新 DB2 实例以接受您所作的更改。
|发出下列命令来回收 DB2 实例:
|NET STOP instance_name |NET START instance_name
|db2stop |db2start|
|要创建并设置接口文件,必须创建该文件并使其可供存取。 |
|Windows NT 通常将此文件称为 |sql.ini。将您刚创建的文件从 |sql.ini 重命名为 interfaces |以便为该文件在所有平台上命名。如果您选择不将 sql.ini |重命名为 interfaces,则必须使用 IFILE 参数或第 8 步中说明的 |CONNECTSTRING 选项。
|在 AIX 和 Solaris 系统上,此文件被命名为 <instance home>/sqllib/interfaces。
|ln -s -f /home/sybase/interfaces /home/db2djinst1/sqllib
||使用 CREATE WRAPPER 语句来指定将用来存取 Sybase 数据源的包装器。包装器是联合系统用来与数据源进行通信以及从数据源中检索数据的机制。DB2 中包括用于 |Sybase、CTLIB 和 DBLIB 的两个包装器。以下示例显示了 CREATE WRAPPER 语句:
|CREATE WRAPPER CTLIB
|其中,CTLIB 是与 |Sybase Open Client 软件配合使用的缺省包装器名。CTLIB 包装器可以在 Windows NT、AIX 和 Solaris 服务器上使用。
|可以用您选择的名称来替代缺省包装器名。但是,如果这样做的话,则还必须在 CREATE WRAPPER 语句中包括 LIBRARY 参数以及联合服务器的包装器库的名称。有关包装器库名的更多信息,参见 DB2 SQL Reference |中的 CREATE WRAPPER 语句。
|当存取 Sybase 数据源时,要提高性能,应设置 DB2_DJ_COMM 环境变量。此变量确定初始化联合服务器时是否装入包装器。将 DB2_DJ_COMM |环境变量设置为包括与您在先前步骤中指定的包装器相对应的包装器库;例如: |
|db2set DB2_DJ_COMM='libctlib.a'
|db2set DB2_DJ_COMM='libctlib.so'
||必须确保等号(=)两边都没有空格。
|有关包装器库名的更多信息,参考 DB2 SQL |Reference。有关 |DB2_DJ_COMM 环境变量的信息,参考《管理指南》。
|使用 CREATE SERVER 语句来定义您想存取其数据源的每个 Sybase 服务器;例如:
|CREATE SERVER SYBSERVER TYPE SYBASE VERSION 12.0 WRAPPER CTLIB |OPTIONS (NODE 'sybnode', DBNAME'sybdb')
|其中: |
|尽管节点名被指定为一个选项,但是它是 Sybase 数据源必需的。有关其它选项的信息,参见 DB2 SQL Reference。
|可以将 IGNORE_UDT 服务器选项与 CTLIB 和 DBLIB 协议配合使用来指定联合服务器是否应该确定以没有强类型的 |UDT 为基础的内置类型。此服务器选项只适用于通过 CTLIB 和 DBLIB 协议存取的数据源。有效值为:
|当 DB2 创建别名时,它查找有关别名指向的对象(表、视图和存储过程)的信息,并对这些信息进行编目。当它查找信息时,它可能会发现某些对象具有它不识别的数据类型(即,不映射至联合数据库中的对应数据类型的数据类型)。这些不识别的类型可以包括:
|当联合服务器发现它不识别的数据类型时,它将返回错误消息 |SQL3324N。然而,它可以将此实践作为例外。对于可以通过 |CTLIB 或 DBLIB 协议来存取的数据源,可以设置 IGNORE_UDT 服务器选项, |以便当联合数据库遇到不识别的没有强类型的 UDT 时,联合数据库可确定 |UDT 的基本内置类型。然而,如果联合数据库识别此内置类型,联合数据库就会将有关该内置类型的信息返回到目录中。要让联合数据库确定没有强类型的 |UDT 的基本内置类型,应将 IGNORE_UDT 设置为“Y”。
|指定超时阈值、接口文件的路径和名称以及接口文件的信息包大小。Sybase Open Client |使用超时阈值来中断运行了太长时间的查询和响应。可以通过使用 CREATE SERVER OPTION DDL 语句的 CONNECTSTRING |选项来在 DB2 中设置这些阈值。使用 CONNECTSTRING 选项来指定:
| .-;--------------------------------. | V | |>>---+------------------------------+-+------------------------>< | +-TIMEOUT-- = -- seconds-------+ | +-LOGIN_TIMEOUT-- = -- seconds-+ | +-IFILE-- = --"string"---------+ | +-PACKET_SIZE-- = --bytes------+ | '-;----------------------------' | ||
|示例:
|在 Windows NT 服务器上,要将超时值设置为 60 秒,并将接口文件设置为 C:\etc\interfaces,使用:
|CREATE SERVER OPTION connectstring FOR SERVER sybase1 |SETTING 'TIMEOUT=60;LOGIN_TIMEOUT=5;IFILE="C:\etc\interfaces"' |
|在 AIX 和 Solaris 服务器上,要将超时值设置为 60 秒,并将接口文件设置为 /etc/interfaces,使用:
|CREATE SERVER OPTION connectstring FOR SERVER sybase1 |SETTING 'TIMEOUT=60;PACKET_SIZE=4096;IFILE="/etc/interfaces"' |
|如果联合服务器上的用户标识和密码与 |Sybase 数据源上的用户标识或密码不同,则使用 CREATE USER MAPPING 语句来将本地用户标识映射为在 Sybase 数据源中定义的用户标识和密码;例如:
|CREATE USER MAPPING FOR DB2USER SERVER SYBSERVER |OPTIONS ( REMOTE_AUTHID 'sybuser', REMOTE_PASSWORD 'day2night')
|其中: |
|有关其它选项的更多信息,参见 DB2 SQL |Reference。
|对位于 Sybase 数据源中的每个视图或表指定别名。当您查询 |Sybase 数据源时将使用这些别名。Sybase 别名是区分大小写的。将模式名和表名都用双引号(")括起来。以下示例显示了 CREATE NICKNAME |语句:
|CREATE NICKNAME SYBSALES FOR SYBSERVER."salesdata"."europe"
|其中: |
|data_source_name."remote_schema_name"."remote_table_name" |
|对您想为其创建别名的每个表或视图重复此步骤。创建别名时,DB2 将使用连接来查询数据源目录。此查询将测试您与数据源的连接。如果连接不工作,则将接收到错误消息。
|有关 CREATE NICKNAME 语句的更多信息,参见 DB2 SQL Reference。有关一般别名和验证数据类型映射的更多信息,参见《DB2 管理指南》。
|仅当 DB2 联合服务器和 Sybase 服务器正在运行不同的代码页时,才需要执行此步骤。使用与 DB2 使用的代码集相同的代码集的数据源不需要转换。下表提供了常见的“本地语言支持”(NLS)代码页的等效 Sybase 选项。必须将
|Sybase 数据源配置为对应于这些等效选项,或者客户机代码必须能够检测不匹配的项,并将它标志为错误,或者使用它自己的语义来映射数据。如果找不到从源代码页至目标代码页的转换表,则 DB2 会发出错误消息。有关更多信息,参考 Sybase 文档。
|
代码页 | 等效 Sybase 选项 |
---|---|
850 | cp850 |
897 | sjis |
819 | iso_1 |
912 | iso_2 |
1089 | iso_6 |
813 | iso_7 |
916 | iso_8 |
920 | iso_9 |