级别: 中级 白玉 媛 (baiyy@cn.ibm.com), 软件工程师,IBM 中国软件开发中心,IBM 肖 振春 (xiaozc@cn.ibm.com), 软件工程师,IBM 中国软件开发中心,IBM
2006 年 3 月 08 日 本文介绍了基于"SQL复制 "的 DB2 与 Oracle 之间的远程复制,并通过两种不同数据库之间的远程复制介绍了 Websphere Information Integrator (WebSphere II) 中关系型包装器的使用。
一、背景
DB2 联合数据库是分布式数据库管理的特殊形式。在联合数据库系统中,可以通过一个 SQL 命令来发出对多个数据源的命令请求。DB2 与非 DB2 数据库之间进行复制之前,首先需要保证非 DB2 数据源可以被 DB2 ESE Version 8 federated database访问。对于DB2 Replication Version 8 所需的联合数据库功能可以在现有发布的 DB2 ESE Version 8 和 DB2 Connect Enterprise Edition Version 8 中提供。
"SQL复制"又称为"DB2复制",是为 DB2 开发的两种数据复制类型中的一种,它是通过 SQL 进行的复制。在这里简单提一下,DB2 复制中的另一种"Q复制"是通过 Websphere MQ 消息队列进行的。在进行 SQL 复制时,Capture 程序读取 DB2 恢复日志以获取对指定源表的更改。该程序将更改保存到传输表格中,也称作变化数据表(changed data table),Apply 程序并行读取更改并应用于目标事务,见图1。
图1:SQL复制的结构
WebSphere II 全球信息集成复制,通过不同数据库之间的复制,有效的利用了数据资源,为提高效率提供了良好的平台。
DB2 与非 DB2 数据库之间的复制需要用到 WebSphere II。本文力争通过复制实例让读者对不同数据库之间的复制有一个整体的概念。
二、动机
商业上出于很多原因使用复制,可以归纳为:
- 分散:把数据分散到各个位置;
- 整合:把其他位置的数据联合起来;
- 交换:与其他位置进行双向的数据交换;
- 灵活应用:对上面提到的方式进行一些改变或者结合。
联合 (Federated) 数据库系统的诞生,利用了现有的数据资源,把不同商业数据库软件的数据整合到一起,很大程度的提高了数据利用率。联合数据库可以用一个SQL语句对分布在不同地点的多种数据源发出请求。联合数据库系统可以把本地表和远程数据源联接起来,就像数据都在本地一样,并且可以通过对数据源进行分布请求来提高数据源处理能力,还可以通过在联合服务器处理部分分布请求来补充数据源的 SQL 限制。
联合数据库具有两个与其他应用服务器不同的特点:
- 联合服务器可以被配置为接收全部或接收部分针对数据源的请求。联合服务器把这些请求分散到数据源。
- 与其他应用服务器一样,一个联合服务器用 DRDA 通信协议(例如 SNA 和 TCP/IP)与 DB2 家族实例通信。然而,与其他应用服务器不同的是,与非 DB2 家族实例通信时用其他协议。
图2描述了联合数据库系统的设置流程:
图2:联合数据库系统的设置流程
WebSphere II 包括两种包装器(Wrapper),一种为关系型包装器,负责DB2 UDB, Informix, Oracle, Microsoft SQL Server, Sybase, ODBC, OLE DB 等数据的复制。另一种为非关系型包装器,负责 Flatfile, Excel, XML 等非关系型数据的复制。
包装器定义了一个负责本地数据库与远程数据库通信的库。包装器执行很多任务,比如:它可以连接到数据源,包装器应用了数据源的标准连接API。它还可以给数据源提交请求。联合数据库系统可以操作远程联合系统的表。远程表在本地联合数据库中虚拟存在,客户应用程序可以操作这些虚拟表,但是它们真正存在于远端数据库中。每个远程虚拟数据库,把联合数据库当作数据库客户端,他们只对数据库客户端的请求有回应。因此联合数据库需要下载各种远程数据库的客户端。
一个联合系统的构造,需要一个作为联合服务器的 DB2 实例,一个作为联合数据库的数据库,一个或多个数据源,和可以存取数据库和数据源的客户(用户和应用)。如果要完成远程不同数据库之间的复制,还需要应用DB2的数据复制功能。
IBM DB2 复制(在一些平台上被称为数据传播)是一个从一个位置到另一个位置复制 DB2 和/或其他数据库厂商数据的强大的,灵活的工具。IBM的复制支持数据转换,数据连接和过滤数据。可以在不同的平台之间搬运数据,也可以把数据分散到不同的地点或从分散的地方把数据聚合到一个地方。可以在不同的系统之间交换数据。
IBM复制由四个主要部分组成:管理 (Administrator),Capture,Apply,警报监视器 (Alert Monitor)。
管理的部分主要通过复制中心的图形界面来实现。通过复制中心可以定义复制源,定义从数据源到目标数据的地图。它也用来管理和监控本地和远程的 Capture 和 Apply 进程。从图3中可以看出复制中心图形界面对其他几个部分的支持关系。
图3:复制中心的应用
在源数据服务器上运行的 Capture 程序可以获取 DB2 源数据表中的变化。DB2 的源数据服务器可以为 DB2 在 z/os, os/390 上的版本 6,7和8,也可以是 iseries 在 os/400 V5R2,或 DB2 在 Windows, Unix 系统中的版本 8。当定义数据源的时候会自动生成相应的触发器 (Triggers),可以用来捕获数据源的变化。要复制的数据可以在 Capture 进程中通过选择列来进行过滤。被捕获的更改信息首先存放到本地的源数据所在的数据库的表中并且当更改应用到目标数据中之后会自动删除。
当对源表进行改动时,DB2 把相关的记录写入日志。这些日志服务于数据库发现和复制。Capture 程序通过数据库自动连接并获取日志记录。每个源表都有相应的 CD (change data) 表来获取数据的变化。当定义一个复制数据源时,复制中心自动生成 CD 表。
对于 Apply 部分,捕获的改变通过 Apply 程序应用到目标表中。Apply 程序可以在任何服务器上运行并且必须对所用到的源服务器和目标服务器都有连通性。数据可以通过列,行进行过滤,可以进行合并(例如通过视图),也可以在 Apply 过程中通过 SQL 表达式进行传送。DB2 与其他相关的数据间进行复制的时候,必须通过联合数据库系统来进行昵称的创建。在本地机器上需要安装关系型包装器和非关系型包装器。对于本例中db2<->ORACLE之间的复制,需要安装关系型包装器。见图4。
图4:进行远程复制关系图
报警监视器用来进行对Capture和Apply部分的错误监控。
三、实现的步骤
首先需要确定本地计算机安装了:DB2 ESE,DB2 RCON(DB2 information integrator for relational data source,关系型包装器,关系型数据库包括 Oracle, UDB, MSSQL, Sybase, Informix, ODBC, OLE DB等), ORACLE数据库客户端。
本文把复制的过程分为三步介绍,分别为设置 Oracle 环境,设置 DB2 与 Oracle 之间的复制参数及复制中心的设定和运行。
3.1设置 Oracle 环境
在进行远程复制之前,首先应配置好相应的 Oracle 环境。假设 DB2 数据库在本地,要进行与远程 Oracle 数据库之间的复制,则需要进行网络配置。
假设:
下面介绍具体配置的步骤:
1) 开始>>所有程序>>Oracle-OraDb10g_home1>>Configuration and Migration Tools>>Net Configuration Assistant;
2) 选择本地 Net 服务名配置>>下一步;
3) 选择添加>>下一步;
4) 键入远程Oracle数据库的名称>>下一步(这里为ORCL,请替换为相应的数据库名);
5) 选择TCP>>下一步;
6) 这一步直接键入远程计算机 IP 地址(例如9.181.135.61);
图5:Net Configuration Assistant 设置
7) 可以对连接进行测试,选择:是,进行测试>>下一步;
8) 会出现下面的画面,选择更改登陆;
图6:更改登录
9) 在弹出的对话框中,输入远程 Oracle 数据库相应的模式和密码例如(scott:p123p);
10) 如果测试成功,会有相应的成功信息出现;
图7:测试连接
11) 为了确认连接,可以从 C:\oracle\product\10.1.0\Db_1\NETWORK\ADMIN\ tnsnames.ora 文件中找到相应的远程数据库信息。
图8:tnsnames.ora 文件
3.2设置从 DB2 到 Oracle 的 SQL 复制
1) 设置SQLLIB\cfg下面的db2dj.ini文件,它的形式应该为:
ORACLE_HOME=X:\oracle\product\10.1.0\Db_1
|
如果在 Linux 环境下,请用相应的语法。下面用到的所有数据库日志记录都要被设为归档日志记录。
与循环日志记录相比,归档日志记录的特点为,当最后一个日志文件写满时,归档日志记录过程会创建一个新的日志文件,这样将来的事务就不会覆盖现有的日志文件。当初始化数据库时,系统会在活动日志目录中分配一定数量、指定大小的主日志文件。这个数量由数据库配置参数控制。当主日志文件都写满时,就会"根据需要"创建辅助日志文件,直到创建了最大数量的辅助日志文件为止。一旦达到了这个数量,如果需要附加的日志空间,就会发出一个错误,指出没有更多的可用日志文件,所有数据库活动停止。
利用归档日志记录,就可能采取联机数据库备份,在执行这一操作期间,会继续记录数据库活动。如果数据库崩溃或发生故障,就会使用全备份映象,然后执行使用归档日志的前滚操作,通过前滚到日志结尾,将数据库恢复到时间点状态或最近的一致状态,从而恢复数据库。
归档日志的设置通过在控制中心面板(CC)>>所有数据库>>右健点击所要设定的数据库>>配置数据库日志记录>>归档日志记录。
2) 设置实例的参数Federated为"是"。具体步骤为:
打开控制面板(CC)>>右击实例名>>配置参数>>Federated 设为"是"。需要注意的是,这一步重新启动数据库参数才能生效。
只有设置了数据实例的参数,才能为数据建立wrapper进行不同数据库之间的复制。
图9:设置实例参数
图10:打开联合数据库系统支持
3) 为 Oracle 创建包装器
打开控制面板>>所有数据库,展开所要建立包装器的数据库,右击联合数据库对象>>创建包装器,输入要创建的包装器名和相应的 Oracle 版本信息。
图11:为 TARGET 数据库创建包装器
图12:创建 Oracle 包装器
4) 创建服务器,用发现选项,远程的 Oracle 数据库就会列在表中,输入数据库名和 Oracle 的版本号,(例如 9i,如果 Oracle 版本为 10g,选择 10,而不是 10g)。
图13:创建服务器定义
5) 创建用户映射,这里用本地计算机的名字,例如本例所使用的计算机名为BAIYUYUAN。
图14:创建用户映射
在设置选项中需要指定远程数据库的模式和密码。
图15:指定用户名和密码
5)创建用户昵称,用添加按钮进行远程表格的设定。
图16:创建昵称
3.3复制中心的设定
1) 打开控制中心>>工具>>复制中心>>SQL复制>>定义,右击 Capture 服务器>>创建 Capture 控制表>>定制。
图17:创建控制表
2) 选择联合数据库为 Capture 控制服务器,键入所有相关信息,点击非 DB2 服务器。在此例中的 Oracle 服务器名是 ORCL,配置的联合服务器是 TARGET(请替换为复制过程中自己所设置的服务器名)。
图18:创建 Capture 控制表
指定远程的模式名(请替换为读者自己所选定的远程模式名)点击下一步。
图19:指定远程模式名
这里需要注意的是,如果是第二次进行远程服务器 Oracle 的设置,则需要把之前设置过的 Oracle 数据库相应的表和生成的表都删掉。(需要从 Oracle 删除三个部分:表,序列,触发)如果是第一次在远程 Oracle 数据库中建立联接,则跳过此步。
图20:Oracle 序列
图21:Oracle 表
3)为源数据建立 Capture 服务器,在这里我用了名为 source 的数据库。
图22:创建Capture 控制服务器
4)创建Apply服务器,在这里使用名为sample的数据库(在实际操作中请替换为你想要复制到的目标数据库)。
图23:创建 Apply 控制表
5)从源数据库注册表。展开SQL复制>>定义>>Capture控制服务器,展开将要复制的表所在的数据库,本例中采用了source数据库的数据表>>右击注册的表,选择注册表,点击检索全部,选择要复制的表。
图24:注册表
图25:选择要注册的表
6)创建预定集
打开复制中心,展开SQL复制,展开Apply 控制服务器,选中所要复制到的目标数据库,展开后右键单击预定集,选择创建。
7)指定所有的有用的信息。此例中,我们可以根据图形界面上的提示填入相应的信息,Apply 控制服务器用sample数据库, Capture控制服务器用source数据库, 目标服务器需要用建立了联合数据库的target数据库。
图26:创建预定集
在进行数据源到目标的映射时,需要特别注意要制定远程目标模式为 Oracle 数据库中的模式。
图27:指定模式
如果出现了下面的错误信息,则需要给源表定义唯一键,复制需要通过查找唯一键来进行从源表到目标表的更改。点击更改键>>目标表索引>>指定一列为唯一键,就可以进行复制了。
图28:更改错误信息
如果想要提高复制更新时间,则需要在时间表中把使用相对计时改为1分钟。
图29:修改复制频率
8) 启动 Apply 预定集和 Capture 控制服务器。两个服务器的启动顺序从 V8 版本开始已经不分先后了。
四、益处
- 信息集成是有效利用资源,提高效率的方法,本文为用户提供了一个学习 WebSphere Information Integrator 的机会;
- 本文描述了如何把新的信息集成技术和现有的 SQL 复制结合起来进行远程数据库之间的复制;
- 本文提供了目前应用最为广泛的数据库 DB2 与 Oracle 之间的远程复制范例。
五、结论
随着网络信息技术的发展,企业规模的扩大,对分布在不同地区的数据集成要求变得越来越迫切。而实际的情况是,根据当地的技术水平以及当时的实际情况,有可能一个企业应用着不同数据库厂商的数据库产品。面对这种情况,可以集成不同数据库产品数据源的全球信息集成复制软件诞生了。WebSphere Information Integrator V8.2 Replication Edition 是一个集高处理性能和实用性为一体的复制服务器。通过不同数据库之间的复制,有效的利用了数据资源,为提高效率提供了良好的平台。
本文简单介绍了怎样进行不同数据库之间的远程复制。DB2 与 Oracle 是目前应用最为广泛的数据库产品之一。通过对这两种数据库之间远程复制的详细介绍,为读者提供了一个初步学习的机会。
参考资料
- A Practical Guide to DB2 UDB Data Replication V8
- SQL Replication Guide and Reference V8.2
- 请在 IBM DB2 UDB, DB2 Connect and DB2 Information Integrator Version 8 产品手册页面 查阅更多的技术文档
作者简介  | 
|  | 白玉媛,IBM中国软件开发中心软件工程师,来自 DB2 WebSphere Information Integrator 项目组。从事 DB2 UDB for Linux、UNIX 和 Windows 软件测试和技术支持。目前着重于 DB2 Federation System 和 DB2 Replication。Mail:baiyy@cn.ibm.com。 |
 | 
|  | 肖振春,IBM 中国软件开发中心软件工程师,来自 DB2 WebSphere Information Integrator 项目组。从事 DB2 UDB for Linux、UNIX 和 Windows 软件测试和技术支持。目前着重于 DB2 Federation System 和 DB2 Replication。目前着重于 DB2 Federation System 和 DB2 Replication,主要关注 SQL、DB2 应用程序开发及客户技术支持。Mail:xiaozc@cn.ibm.com。 |
对本文的评价
|