IBM 系统工程师, 马萨诸塞州,沃尔瑟姆(Waltham)
2003 年 8 月
流行作家和推荐者 Marty Lurie 解决了联邦问题 - 也就是数据联邦。Marty 说明了 IBM 联邦数据库技术的工作原理、关键的技术成功因素以及在针对这些因素进行测试时如何证明 IBM 实现有效。
简介
如果您有多种数据库,那么您应该会发现让它们相互通信是一件麻烦事。本文将通过解决数据库之间的互操作性来帮助您更方便地处理这一问题。我们将使用 IBM 战略性联邦数据库技术 - IBM® DB2® 信息集成器(DB2® Information Integrator)的核心。我们将研究该技术的工作原理、关键的技术成功因素以及在针对这些因素进行测试时如何证明 IBM 实现有效。在本文的第 2 部分中我们还将研究插入性能以及如何联邦服务器,以便从存储在多个数据源的数据中生成 XML。
为何我需要数据库联邦,另外什么是数据库联邦?
作为一位 DBA,您或许不愿管理许多不同品牌的数据库 - 我还没碰到过有 DBA 这么说:“是的,不错,我想要各种不同的数据库,我还不够忙。”如果您可以使用所有不同的数据库,包括选择、插入、更新和删除,就象所有的表都位于单个数据库中那样,那么将获得非常高的工作效率。数据库联邦就是要做到这一点:使所有表看起来象是在同一个数据库中。下面的样本 SQL 正是说明了这项技术是多么的强大:
db2 => insert into remote_informix select a.customer, b.balance, c.limit from remote_db2 a, remote_oracle b, remote_sybase c where c.limit > 10000 and a.c_key = b.c_key and a.c_key = c.c_key;
数据库联邦可以使我们不再需要构建数据集市了!一个数据集市替代品的性能最优化示例 如下所示。如果要查询的量不是很大,并且如果汇总表通常就可以满足查询的要求,那么就不需要数据集市、不需要相应地创建新服务器和移动大量的数据等,这样可以大大地提高工作效率。当然,对于需要访问最低级别的详细信息的忙碌繁重的查询而言,数据集市或数据仓库是首选的解决方案。
数据库联邦如何工作?
真是个好东西。哦,不好意思,该讲讲技术方面的内容了吧?
请考虑如下所示的系统图:
图 1. 联邦成员“联邦者(federator)”系统对远程系统“被联邦者(federatee)”中的表进行操作。远程表在“Federator”数据库中作为虚拟表出现。客户机应用程序可以对“Federator”数据库中的虚拟表执行操作,但是真正的持久性存储位于远程数据库中。我们将研究一个样本客户机程序,在本文的下一部分中该程序执行插入。
每个“被联邦者”都将“联邦者”看成是另一个数据库客户机连接。“Federatee”只是处理数据库操作的客户机请求。“联邦者”需要用客户机软件来访问每个远程数据库。要访问每种被联邦者,则需要安装 IBM Informix®、Sybase、Oracle 等等的客户机软件。
数据库联邦的应用程序接口是 SQL。与必须学习新接口相比,这大大地提高了工作效率。使用与对本地表进行选择、插入、更新和删除相同的语法来访问远程表。并不是可以进行所有表操作,但是 DB2 V8 中的信息集成器通过提供插入和更新功能在这方面取得了很大的进步。
安装和配置
这是安装和配置过程的总结和重点。别忘了阅读手册。您将需要安装带有信息集成器选项的 DB2 V8.1。安装时请选择 Custom ,然后在 Server Support 选项下面启用“Informix Data Source Support”。Informix 包装器目前和 8.1 服务器一起提供;其它包装器还处于 beta 测试阶段,不久就可以使用了。有关适用于 V7 和 V8 的 Linux 内核参数的提示和技巧文章,请参阅我以前的文章: Simulating Massively Parallel Database Processing on Linux!有关配置 Informix 远程服务器的最佳实践,请参阅我的文章: Winning Database Configurations: An IBM Informix Database Survey。
心急的话,请查阅 附录 A,其中包含了设置联邦环境的完整 SQL。
设置联邦的步骤如下:
步骤 1:设置联邦者和远程数据库服务器之间的客户机连通性
在试图进行联邦配置之前,需要使远程客户机软件可操作。测试一个简单的客户机程序(例如来自 Informix 的 demo1.ec ,或者是来自 Oracle 或 Sybase 的类似客户机程序)以验证连通性。如果客户机软件不能访问远程服务器,那么您就不能继续下去。
步骤 2:创建包含联邦者所需参数的 db2dj.ini 文件
DB2 V7 和 DB2 V8 都需要 db2dj.ini 文件。该文件为远程数据库提供参数和路径。这里所示的样本引用了两个远程服务器:一个是 IBM Informix Extended Parallel Server™(XPS),一个是 Informix Dynamic Server™(IDS)。下面是来自 Windows® 2000 机器的一个样本:
C:\\Program Files\\IBM\\SQLLIB\\cfg>type db2dj.ini INFORMIXDIR=C:\\PROGRA~1\\Informix\\CLIENT~1 INFORMIXSERVER=fliif INFORMIXSQLHOSTS=C:\\tmp\\sqlhosts INFORMIXSERVER=flxps
该示例说明了如何访问两个远程服务器:一个是 IBM Informix V9,另一个是 IBM Informix XPS。
需要告知数据库如何获取该文件。请确保使用全限定路径名。别使用相对路径名 - 否则会很糟糕。对于 Windows 2000,请使用:
DB2_DJ_INI=c:\\\\progra~1\\ibm\\sqllib\\cfg\\db2dj.ini
对于 UNIX® 或 Linux,请使用:
db2set DB2_DJ_INI=/home/db2inst1/sqllib/cfg/db2dj.ini
步骤 3:为远程数据库创建“包装器”
“包装器”定义了一个库文件,该库文件知道如何与被联邦者数据库进行通信。它使用您在步骤 1 中所设置的客户机连通性软件来访问远程数据库。
定义包装器有两种方法:使用 SQL,或者在 DB2 V8 中使用图形用户界面(GUI)。
使用 SQL 创建包装器的示例如下所示:
CREATE WRAPPER "INFORMIX" LIBRARY 'db2informix.dll';
从控制中心(Control Center)启动 GUI 向导,如 图 2所示。在您想要配置的数据库的树型导航窗格中的 Federated Database Objects 标识上单击鼠标右键。如插图所示。建议您在使用 GUI 时使用按钮 show SQL 。它使您能比较好地理解幕后所发生的事情(请参阅 图 3,以了解一下示例)。将 show SQL 按钮当成您的私人 DBA 老师。
图 2. 使用控制中心创建包装器 图 3. GUI 的幕后步骤 4:定义联邦服务器 - 远程数据库实例
使用 CREATE SERVER 语句(或者控制中心)定义远程实例。请注意,我们使用了前一步中所创建的包装器。有许多选项可用来指定相对的 CPU 和 I/O 速度,以及网络速度和其它一些参数。IBM 建议您接受大多数参数的缺省值。下面所示的参数只用来举例说明该如何指定这些参数。
下面是 SQL 示例:
CREATE SERVER "rcfliif" TYPE INFORMIX VERSION '9.3' WRAPPER "INFORMIX" OPTIONS ( NODE 'fliif', DBNAME 'stores_demo' , ADD CPU_RATIO '1' , ADD IO_RATIO '1' , ADD COMM_RATE '1' , ADD DB2_MAXIMAL_PUSHDOWN 'Y' );
NODE 指定了远程数据库服务器,它不是一个 TCP/IP 主机名。DBNAME 定义了远程数据库。
PUSHDOWN 是缺省值,它表明如果可能的话应当在远程服务器上进行连接(join)。我们将对此进行测试并在下一节中研究某些数据库优化器说明计划。DB2_MAXIMAL_PUSHDOWN 是一个无文档说明的参数(此处有说明),它告诉联邦者发送 SQL 并连接“被联邦者”,即使优化器认为在本地抽取数据和进行连接会比较好。
您可能想使用的其它选项包括 FOLD_ID 和 FOLD_PW,两者均设置成“N”。这使得被联邦者使用在“用户映射&r






