DB2 for i 和 DB2 for Linux, UNIX and Windows 有一些关键区别,例如,常用术语、数据存储架构和国家语言支持(NLS)映射。在使用 DataStage 建立从 InfoSphere Information Server 到 DB2 for i 的连接时,这些差异往往会导致概念上的混淆。
连接问题通常很容易对付。然而,在涉及 Information Server 连接到 System i 的问题时,连接问题可能颇具挑战性。有些用户的结论是,连接问题是 Information Server 的功能缺陷。但更多的时候,它其实是一个理解偏差。
随着近年来 Information Server 作为一个主要 ETL 工具被广泛采用,使用 Information Server 连接到 DB2 for i 的用户数量也越来越多。本文旨在为 Information Server 管理员、开发人员、技术架构师、系统管理员,以及 Information Server 和 System i 的所有其他用户提供一个关于从 Information Server 连接到 DB2 for i 的简单分步说明,帮助克服理解偏差。
DB2 for i 是一个在 IBM System i(以前称为 iSeries® 和 AS/400®)操作系统中完全集成的关系数据库管理系统。这是 DB2 for i 和 DB2 for Linux, UNIX and Windows 之间的关键区别。DB2 for Linux, UNIX and Windows 是一个由操作系统托管的应用程序。事实上,DB2 for i 被纳入操作系统,使变成可扩展、高性能和可伸缩的。它遵守许多行业标准,同时保持较低的总拥有成本。
为了允许远程访问 DB2 for System i,在 System i 中必须启用分布式关系数据库架构(DRDA)功能,而且还需要使用 ADDRDBDIRE
命令定义本地关系数据库。以下各小节将介绍如何执行这些任务。
IBM InfoSphere Information Server 是一个信息管理产品套件,包括 Business Glossary、Business Glossary Anywhere、FastTrack、Information Analyzer、Metadata Workbench、DataStage、QualityStage、Information Services Director,等等。InfoSphere Information Server 的一个关键优势是其共享的基础架构。这实现了各个模块之间的元数据共享,并使得数据集成变得更容易。InfoSphere Information Server 包括四个层次:
从高层次的角度来看,InfoSphere Information Server 的架构如图 1 所示。
图 1. InfoSphere Information Server 架构
在 Information Server 中,有两个方法可用于访问 DB2 for System i:
回页首
访问 DB2 for System i 需要以下信息:
WRKSRVTBLE
命令,并找到包含关键字 "drda"(表示服务名称)和 "tcp"(表示协议)的行,如图 2 所示。 图 2. WRKSRVTBLE 命令输出
DSPRDBDIRE
命令,然后找到包含关键字 "*LOCAL" 的行。该条目的名称就是位置。在图 3 的示例中,DBONB01 是位置的名称。 图 3. DSPRDBDIRE 命令输出
回页首
从 Information Server DataStage 访问 DB2 for System i,这是最常用的方法,因为它不需要为 DB2 Connect 支付额外的费用,并且相对易于设置。
由于和 Information Server 捆绑在一起的 ODBC 驱动程序是 32 位的,所以您需要使用 32 位的 ODBC Administration Tool 来建立 System Data Source。如果您在一个 64 位的 Windows 环境中,请参见 Microsoft Support 文档 942976(参阅参考资料)。
图 4. 在 Windows 上的 ODBC Data Source Administrator
图 5. DB2 Wire Protocol 驱动程序
图 6. ODBC DB2 Wire Protocol 驱动程序安装
在 UNIX 和 Linux 环境中,ODBC 连接从 dsenv 继承其环境,并寻找 .odbc.ini 文件作为其运行时环境。在 UNIX 或 Linux 上设置的步骤:
确保在 dsenv 中的信息是正确的。
默认情况下,在 dsenv 中,ODBC 连接的环境设置是在安装过程中设置的。如果 dsenv 没有被修改,那么您的 dsenv 文件看起来应该类似于清单 1。
清单 1. 在 dsenv 文件中的示例环境变量的列表
ODBCINI=$DSHOME/.odbc.ini; export ODBCINI … LD_LIBRARY_PATH=`dirname $DSHOME`/branded_odbc/lib …
请注意,不同的 UNIX 平台上的库路径环境变量是不同的:
在 .odbc.ini 文件中创建一个访问条目。
默认情况下,.odbc.ini 文件在 $DSHOME 目录下(或指向 dsenv 中的 $ODBCINI,如步骤 1 中所讨论的)。备份 .odbc.ini 文件,然后用文本编辑器打开它。在这个文件中有一个 DB2 Wire Protocol 的示例。复制并粘贴这个示例,以创建一个新条目,并填写 Location、LogonID、Password 和 TcpPort 的信息。清单 2 显示了一个示例。
清单 2. 为 System i 设置 DataDirect ODBC 的示例
[TORI6B01] Driver=/opt/IBM/InformationServer/Server/branded_odbc/lib/VMdb225.so Description=DataDirect DB2 Wire Protocol Driver AddStringToCreateTable= AlternateID= Collection= Database= DynamicSections=100 GrantAuthid=PUBLIC GrantExecute=1 IpAddress=9.26.103.178 IsolationLevel=CURSOR_STABILITY Location=Location_name LogonID=User_name Password=Password Package=DB2 package name PackageOwner= TcpPort=446 WithHold=1
方括号中的条目名称可以是任意名称。不过,我们建议您仍然使用 Location 名称,以便于识别。
修改 uvodbc.config 文件。
在.odbc.ini 文件中创建条目后,对于需要访问数据源的每个项目,您需要在每个项目目录下的 uvodbc.config 文件中为数据源名称添加一个条目。清单 3 显示了一个示例。
清单 3. 在 uvodbc.config 中的条目示例
DBMSTYPE = UNIVERSE network = TCP/IP service = uvserver host = localhost <TORI6B01> DBMSTYPE = ODBC
请注意,尖括号之间的数据源名称必须与 .odbc.ini 文件中的方括号之间的数据源名称相同。在前面的示例中,使用了 TORI6B01。
在 DB2 for i 上创建一个绑定包。
为了让 DB2 Wire Protocol 能够正常工作,必须在 DB2 for System i 上创建一个 DB2 绑定包。绑定实用程序位于 ../branded_odbc/bin 目录。所用的语法是:
Bindxx data_source_name
备注:xx 是绑定实用程序的版本。导航到 ../branded_odbc/bin/ 目录,您应该能够找到捆绑的 ODBC 驱动程序自带的正确版本的绑定。清单 4 提供了一个示例。
清单 4. 绑定包示例
[root@rhel55iis87 bin]# ./bind25 TORI6B01 User Name:TEST Password:******** SecurityMechanism:'' Creating packages ...Packages created and bound.
您可以使用示例程序来测试数据源的连接。示例程序在 ./branded_odbc/sample 目录下。清单 5 提供了一个示例。
清单 5. 使用 ODBC 驱动程序测试连接的示例
[root@rhel55iis87 example]# pwd /opt/IBM/InformationServer/Server/branded_odbc/samples/example [root@rhel55iis87 example]# ./example ./example DataDirect Technologies, Inc. ODBC Example Application. Enter the data source name :TORI6B01 Enter the user name :TEST Enter the password :PASSWORD Enter SQL statements (Press ENTER to QUIT) SQL>
当您看到显示 “Enter SQL statements (Press ENTER to QUIT)” 消息,并且出现 SQL 界面时,这表示使用 ODBC 连接到数据源已经成功。
图 7. 导入 ODBC 表定义 - 1
单击 OK 。图 8. 导入 ODBC 表定义 - 2
您可以使用导入的表定义来设计 DataStage 作业,在 DB2 for i 上使用 ODBC Connector、ODBC Enterprise或 DRS stage 读取或写入一个表。下列步骤使用了 ODBC Connector stage。
图 9. ODBC Connector
图 10. 表定义
图 11. 选中列
图 12. 列详细信息
图 13. ODBC Connector 详细信息
图 14. 完整的作业运行
前一个示例适用于来自 DB2 for i 中的表的读取操作。检查确认是否已收到正确的输出。将数据写入到 DB2 for i 非常相似。最重要的事情是确保元数据(模式)与来自输入的目标表相同。
回页首
DB2 Connect 或 DB2 Enterprise Server Edition 是在 Information Server Engine 层上访问 DB2 for System i 的必要条件。 DB2 Connect 或 DB2 Enterprise Server 的安装不在本文的讨论范围之内。不过,您可以参考 IBM DB2 Information Center 了解具体的的详细信息(参阅参考资料以获得相关链接)。
检查是否已在 Information Server Engine 层上安装了 DB2 Connect 或 DB2 Enterprise Server
检查是否已安装 DB2 Connect 或 DB2 Enterprise Server:
db2licm -l
命令。图 15 提供了一个示例。 图 15. 在 Windows 平台上检查 DB2 产品:
db2licm
检查 DB2 实例是 DB2 Connect 还是 DB2 Enterprise。清单 6 提供了一个示例。 清单 6. 在 UNIX/Linux 上检查 DB2 产品的示例
# db2licm -l Product name: "DB2 Enterprise Server Edition" License type: "Restricted" Expiry date: "Permanent" Product identifier: "db2ese" Version information: "9.7"
确认作为先决条件的 DB2 Connect 组件安装后,您可以为 System i 编制目录,以便为 System i 创建一个 DB2 节点,建立从 DB2 Connect 到 System i 的连接。清单 7 显示了相关语法。
清单 7. 创建 DB2 节点的语法
db2 catalog tcpip node Node_Name remote IP_Address server Port
命令参数:
例如:
清单 8. 创建 DB2 节点的示例
$db2 catalog tcpip node TORI6B01 remote 9.26.103.178 server 446 DB20000I The CATALOG TCPIP NODE command completed successfully. DB21056W Directory changes may not be effective until the directory cache is refreshed.
下一步是对 DB2 for i 上的数据库进行编目,以便对其进行访问。清单 9 显示了相关语法。
清单 9. 数据库编目的语法
db2 catalog db DB_Name_on_System_i as DB_Alias_on_Local at node Node_Name authentication Authentication_Mode
命令参数:
例如:
清单 10. 对 DB2 for i 数据库进行编目的示例
$db2 catalog db DBONB01 as DBONB01 at node TORI6B01 authentication server DB20000I The CATALOG DATABASE command completed successfully. DB21056W Directory changes may not be effective until the directory cache is refreshed.
对目标数据库编目成功后,您应该能够连接到目标数据库。清单 11 显示了相关语法。
清单 11. 连接数据库的语法
db2 connect to DB_Alias_on_Local user System_i_user_name using Password_for_System_i_user
命令参数:
例如:
清单 12. 连接到 DB2 for i 的示例
$db2 connect to DBONB01 user TEST using PASSWORD Database Connection Information Database server = OS/400 6.1.0 SQL authorization ID = TEST Local database alias = DBONB01
在该场景中,Information Server 使用 DB2 Connect 连接到 System i 上的 DB2 数据库。因此,DB2 环境对于 Information Server 必须是可读的。
在 Windows 环境中,Information Server 从系统环境获得 DB2 环境信息。在安装 DB2 Connect 或 DB2 Enterprise 服务器时,此安装会在 Windows System Environment Variables > System Variables 中创建条目。不过,您可以仔细进行检查,以验证 DB2 库路径的设置是否正确。
图 16. 检查 Windows 系统变量
在 UNIX 或 Linux 环境中,Information Server 继承了来自 dsenv 的环境、项目环境和用户登录环境。我们强烈建议从 dsenv 设置 DB2 Connect 环境,以避免不必要的混淆。
DB2 Connect 的 Library 路径必须在 dsenv 中进行设置。清单 13 提供了一个示例。
清单 13. UNIX/Linux 环境变量示例
… export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/IBM/db2/V9/lib64 …
清单 13 来自 Linux 环境。请注意,在不同的 UNIX 平台上,库路径环境变量是有所不同的:
在修改 dsenv 环境后,必须重新启动 Information Server DataStage 引擎,让修改生效。
现在,您应该能够连接到 DB2 for i 上的数据库。登录到 Information Server Designer 客户端。从 Import > Table Definitions > Plug-in Meta Data Table Definitions… 选择 DSDB2 。
图 17. 导入 Meta Data 表定义 - 1
单击 OK 。在下一个窗口中,从下拉列表中选择 Server Name ,输入 User Name 和 Password,并选中 Tables 和 Fully Qualified Table Names 复选框。
图 18. 导入 Meta Data 表定义 - 2
单击 Next 并选中您想导入的表。
图 19. 导入 Meta Data 表定义 - 3
通过 DB2 API stage,您可以使用导入的表定义,从 DataStage 作业读取或写入在 DB2 for System i 上的表。
图 20. DB2 UDB API stage - Stage General
图 21. DB2 UDB API stage - Output General
图 22. DB2 UDB API stage - Load Columns
图 23. DB2 UDB API stage - Select Columns
图 24. DB2 UDB API stage - Output Columns
备注:当您尝试查看表中的数据时,可能会看到下面的错误。通过从 Output > Columns Tab(如图 24 所示)删除所有派生物,可以解决这个错误。
图 25. 查看数据时遇到的错误
图 26. 删除所有派生物
运行作业。
图 27. 完整的作业运行
先前的示例是从 DB2 API stage 执行读操作。不过,将数据写入到 DB2 for i 与此非常相似。必须牢记的惟一一点是,元数据(模式)与来自输入的目标表相同。
回页首
从 Information Server 连接到 DB2 for i 不应该是一项复杂的任务。正如本文所讨论的,要成功解决连接问题,最重要的事情是安装先决组件,并正确设置环境。