|在将 Microsoft SQL Server 数据源添加至 DB2 联合服务器之前,需要在联合服务器上安装并配置 ODBC 驱动程序。有关如何安装 ODBC 驱动程序的特定详细信息,参见随 ODBC 驱动程序提供的文档中的安装过程。
|要设置联合服务器以存取存储在 Microsoft SQL Server 数据源上的数据,需要:
|本章讨论第 3 步和第 4 步。
|本章中的指示信息适用于 Windows NT 和 AIX 平台。特定于平台的区别在出现这些平台时作了注释。
|在安装 ODBC 驱动程序和 DB2 Relational Connect 之后,使用下列步骤将 Microsoft SQL Server 数据源添加至联合服务器:
|下列各节中详细说明了这些步骤。
|通过修改 db2dj.ini 文件并发出 db2set |命令来设置数据源环境变量。db2dj.ini |文件包含用来连接至 Microsoft SQL Server 数据源的配置信息。db2set 命令使用您的设置来更新 DB2 概要文件注册表。
|在分区数据库系统中,可对特定实例中的所有节点使用单个 db2dj.ini 文件,也可以对特定实例中的一个或多个节点使用唯一的 db2dj.ini 文件。对于每个实例,非分区数据库系统只能有一个 db2dj.ini 文件。
|要设置环境变量:
|ODBCINI=$HOME/.odbc.ini |DJX_ODBC_LIBRARY_PATH=<path to the Merant driver>/lib |DB2ENVLIST=LIBPATH ||
|发出 db2set |命令来使用您的更改来更新 DB2 概要文件注册表。db2set 的语法取决于数据库系统结构:
|db2set DB2_DJ_INI=<path to ini file>/db2dj.ini
||db2set -g DB2_DJ_INI=<path to ini file>/db2dj.ini
||db2set -i INSTANCEX 3 DB2_DJ_INI=$HOME/sqllib/cfg/node3.ini
|其中: |
|要设置指向客户机库的路径,发出以下命令:
|db2set DB2LIBPATH=<path to the Merant client library> |db2set DB2ENVLIST=LIBPATH
|djxlink.sh shell 脚本将客户机库链接至包装器库。要运行 shell 脚本:
|djxlink
|如果您发现花了过长的时间来存取 Microsoft SQL Server 数据源,则可以将 DB2_DJ_COMM 环境变量设置为在初始化联合系统时装入包装器,而不是在尝试存取数据源时才装入包装器,以提高性能。将 DB2_DJ_COMM |环境变量设置为包括与您在第 5 步中指定的包装器相对应的包装器库。例如: |
|db2set DB2_DJ_COMM=djxmssql3.dll
|db2set DB2_DJ_COMM=libmssql3.a
||必须确保等号(=)两边都没有空格。
|有关包装器库名的更多信息,参见 DB2 SQL Reference。
|为确保在程序中设置了环境变量,应回收 DB2 实例。回收实例时,刷新 DB2 实例以接受您所作的更改。通过发出下列命令来回收 DB2 实例:
|db2stop |db2start
|“DB2 通用数据库”具有两种不同的协议(称为包装器),可以用来存取 Microsoft SQL Server 数据源。包装器是联合服务器用来与数据源进行通信以及从数据源中检索数据的机制。您使用的包装器取决于运行“DB2 通用数据库”的平台。使用表 3来作为选择适当的包装器的指南。
|
ODBC 驱动程序 | 平台 | 包装器名 |
ODBC 3.0(或更高级别)驱动程序 | Windows NT | DJXMSSQL3 |
MERANT DataDirect Connect ODBC 3.6 驱动程序 | AIX | MSSQLODBC3 |
|使用 CREATE WRAPPER 语句来指定将用来存取 Microsoft SQL Server 数据源的包装器。以下示例显示了 CREATE WRAPPER 语句:
|CREATE WRAPPER DJXMSSQL3
|其中,DJXMSSQL3 是在“DB2 Windows NT 版”服务器(使用 ODBC 3.0 驱动程序)上使用的缺省包装器名称。如果您具有“DB2 AIX 版”服务器,则将指定 MSSQLODBC3 包装器名。
|可以用您选择的名称来替代缺省包装器名。但是,如果这样做的话,则必须在 |CREATE WRAPPER 语句中包括 LIBRARY 参数以及联合服务器平台的包装器库的名称。例如:
|CREATE WRAPPER wrapper_name LIBRARY 'djxmssql3.dll'
|其中,wrapper_name 是您想给予包装器的名称,而 'djxmssql3.dll' 是库名。
|CREATE WRAPPER wrapper_name LIBRARY 'libmssql3.a'
|其中,wrapper_name 是您想给予包装器的名称,而 'libdjxmssql.a' 是库名。 |
|有关包装器库名的更多信息,参见 DB2 SQL Reference |中的 CREATE WRAPPER 语句。
|使用 CREATE SERVER 语句来定义您想连接的每个 Microsoft SQL Server 数据源。例如:
|CREATE SERVER sqlserver TYPE MSSQLSERVER VERSION 7.0 WRAPPER djxmssql3 |OPTIONS (NODE 'sqlnode', DBNAME 'database_name')
|其中: |
|尽管节点名(系统 DNS 名)被指定为 CREATE SERVER 语句中的一个选项,但是它是 Microsoft SQL Server 数据源所必需的。在 Windows 上,从“Windows ODBC 数据管理器”工具的“系统 DSN”选项卡获取 DSN。在 AIX 上,从 DB2 实例所有者主目录中的 |.odbc.ini 文件获取 DSN。
|有关可配合 |CREATE WRAPPER 语句使用的其它选项,参见 DB2 SQL Reference。
|尽管数据库的名称被指定为 |CREATE SERVER 语句中的一个选项,但是它是 Microsoft SQL Server 数据源所必需的。 |
|如果联合服务器上的用户标识和密码与 |Microsoft SQL Server 数据源上的用户标识或密码不同,则使用 CREATE USER MAPPING 语句来将本地用户标识映射为在 Microsoft SQL Server 数据源中定义的用户标识和密码;例如:
|CREATE USER MAPPING FOR db2user SERVER server_name |OPTIONS (REMOTE_AUTHID 'mssqluser', REMOTE_PASSWORD 'day2night')
|其中: |
|有关可配合 CREATE USER MAPPING 语句使用的其它选项,参见 DB2 SQL Reference。
|对位于您想存取的 Microsoft SQL Server 数据源中的每个视图或表指定别名。当您查询 |Microsoft SQL Server 数据源时将使用这些别名。使用 CREATE NICKNAME 语句来指定别名。别名是区分大小写的。以下示例显示了 CREATE NICKNAME |语句:
|CREATE NICKNAME mssqlsales FOR server_name.salesdata.europe
|其中: |
|data_source_server_name.remote_schema_name.remote_table_name
|建议对别名的 remote_schema_name 和 remote_table_name 部分用双引号引起来。 |
|当您创建别名时,DB2 试图存取数据源目录表(在 Microsoft SQL Server 中将它们称为系统表)。这会测试与数据源的连接。如果连接失败,则将接收到错误消息。
|对您想为其创建别名的所有数据库表和视图重复此步骤。
|有关 CREATE NICKNAME 语句的更多信息,参见 DB2 SQL Reference。有关一般别名和验证数据类型映射的更多信息,参见《DB2 管理指南》。
|如果在存取数据源时遇到了问题,则可以获取 ODBC 跟踪信息以分析和解决这些问题。为了确保 ODBC 跟踪正常工作,应使用由“ODBC 数据源管理员”提供的跟踪工具。激活跟踪将影响系统的性能,因此,一旦解决了问题,就应该关闭跟踪。
|Microsoft SQL Server 支持 DB2 UDB 所支持的许多常见“本地语言支持”(NLS)代码页。使用与 DB2 使用的代码集相同的代码集的数据源不需要转换。表 3 中列示了“DB2 通用数据库”和 Microsoft SQL Server 都支持的代码页。
|
|表 4. DB2 UDB 和 Microsoft SQL Server 代码页选项
代码页 | 受支持的语言 |
---|---|
1252 | ISO 字符集 |
850 | 多种语言 |
437 | 美国英语 |
874 | 泰国语 |
932 | 日语 |
936 | 简体中文 |
949 | 韩国语 |
950 | 繁体中文 |
1250 | 中欧语 |
1251 | 斯拉夫语 |
1253 | 希腊语 |
1254 | 土耳其语 |
1255 | 希伯莱语 |
1256 | 阿拉伯语 |
|当 DB2 联合服务器和 Microsoft SQL Server 正在运行不同的“本地语言支持”(NLS)代码页时,必须将 |Microsoft SQL Server 数据源配置为对应于这些等效选项,或者客户机代码必须能够检测不匹配项,并将它标志为错误,或者使用它自己的语义来映射数据。如果找不到从源代码页至目标代码页的转换表,则 DB2 会发出错误消息。有关更多信息,参考 Microsoft SQL Server 文档。