用 InfoSphere Replication Server 实现多种数据源之间的数据复制.docx
- 文档编号:30739097
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:13
- 大小:105.46KB
用 InfoSphere Replication Server 实现多种数据源之间的数据复制.docx
《用 InfoSphere Replication Server 实现多种数据源之间的数据复制.docx》由会员分享,可在线阅读,更多相关《用 InfoSphere Replication Server 实现多种数据源之间的数据复制.docx(13页珍藏版)》请在冰豆网上搜索。
用InfoSphereReplicationServer实现多种数据源之间的数据复制
用InfoSphereReplicationServer实现多种数据源之间的数据复制
发布者:
豆豆网 日期:
2010-03-2500:
00:
00 浏览次数:
216 (共有0条评论)查看评论|我要评论
本文介绍了基于“SQL/Q复制”的Oracle到Oracle的数据复制以及如何使用ASNCLP实现该复制,并通过DB2与非DB2数据源之间的复制,介绍联合数据库在SQL和Q复制中的应用。
复制简介
SQL/Q复制
DB2ESEV95集成了复制(ReplicationServer)和联合(FederationServer)两大功能。
DB2联合数据库系统是一种特殊形式的分布式数据库管理系统。
在联合数据库系统中,用户可以实现对多种数据源的访问。
实现DB2与非DB2数据源之间的复制的一个前提是要保证该数据源被联合系统支持。
DB2支持两种类型复制:
SQL复制和Q复制。
SQL复制捕获源表的更改并使用CD表来存储已经提交的事务性数据,然后从CD表中读取这些更改并将它们复制到相应的目标表。
SQL复制可以应用在各种需要的环境,包括容量补偿,给数据仓库输送数据以及审计更改历史记录。
用户可以选择相隔一段时间或仅在一段时间内复制。
通过连续时间内的复制,应用程序可以捕捉到实时的数据。
Q复制可以在很短的时间内复制大量的数据。
Q复制将捕获源表的更改并将已提交的事务转化为消息。
Q复制不使用CD表,当Q复制读取到数据后,将消息通过MQ消息队列发送到目标。
目标系统将会从队列中读取消息并将消息转化为相应的事务提交到目标表。
目前SQL复制支持非DB2数据源到DB2以及DB2到非DB2数据源的复制,而Q复制只支持DB2到非DB2数据源的复制。
表1所示的是SQL复制和Q复制的关键属性的对比。
表1.SQL和Q复制对比
复制属性
SQL复制
Q复制
是否支持DB2到DB2的复制
是
是
是否支持其他数据源到DB2的复制
是
否
是否支持DB2到其他数据源的复制
是
是
工作性能
一般
很好
工作方式
基于log/触发
基于log
是否需要MQ
不需要
需要
针对DB2数据源,Q和SQL复制都是采用基于LOG的方式。
基于LOG的读取源数据的方式不会对客户的生产环境造成太大影响。
针对非DB2数据源只能以触发的方式实现SQL复制。
Q复制的优点很明显,工作效率高。
但其缺点也很明显:
不能从异种数据源读取数据,而SQL复制采用触发的方式则可以对异种数据源的读取。
因此我们在本文的复制系统中采用SQL复制从非DB2数据源读取数据,用Q复制的方式分发数据。
Capture和Apply程序
ReplicationServer是一组程序的集合,主要包括Capture和Apply程序。
Capture程序负责捕捉数据源的变化并将更改发送到目标数据库,Apply程序负责将捕捉到的数据应用到目标数据库。
对于Capture程序捕捉到的数据源变化也可以通过ReplicationServer的另外一个应用-EventPublisher发布出来,这些更改被转化成特殊格式的消息,例如XML消息格式,为商业智能提供一个推送数据继承模型。
Capture和Apply程序都必须依赖DB2才能运行。
ASNCLP
Q和SQL复制过程可以完全通过SQL语句来创建,但对于普通用户来讲难度较大,因此ReplicationServer提供了另外两种配置Q和SQL复制的工具:
ASNCLP(API)和ReplicationCenter(GUI)。
首先介绍API的方式,ReplicationServer提供了一组命令接口配置复制,这组命令称为ASNCLP。
ASNCLP可以产生并执行创建复制环境所需的SQL脚本,如图1所示。
图1.ASNCLPSample
执行ASNCLP命令有两种方式,一种是在DB2命令行环境中执行asnclp命令,用户可以在提示符”Repl>”下单步执行ASNCLP命令。
要注意这种单步执行的方式,行命令末尾以空格结尾,不是以分号结尾。
而批量执行的脚本中ASNCLP的每行则是以分号结尾,如图1所示。
=>asnclp
Repl > ASNCLP SESSION SET TO Q REPLICATION
====
CMD:
ASNCLP SESSION SET TO Q REPLICATION;
====
Repl > QUIT
====
CMD:
QUIT;
====
ASN1953I ASNCLP :
Command completed.
另外一种方式是脚本的形式批量执行ASNCLP命令,假设我们将图1所示的脚本保存在文件asnclp.in中,用户可以在命令行中通过以下方式执行。
=>asnclp -f asnclp.in
GUI的方式部署复制主要是用到ReplicationCenter(简称RC),属于DB2ControlCenter的一部分,如图2所示。
图2.ReplicationCenter
虽然GUI的方式更容易让普通用户接受,但对于大规模的部署复制,GUI的方式就会比较烦琐。
ASNCLP脚本的重用率很高,部署复制的效率会很高。
项目背景
在一个比较复杂的生产环境中,数据源往往是多种多样的。
我们经常碰到的数据源包括Oracle,DB2,SQLServer,Sybase等等。
DB2联合数据库系统-FederationServer开发了针对不同数据源的wrapper包装各种数据源,用户通过这些wrapper能访问到Oracle,SQLServer,Sybase等多种数据源,并能对数据源进行增加,删除,修改等事务操作,但联合数据库系统不能将数据源的数据实时高效的复制到其他数据源中去。
ReplicationServer可以帮我们实现各种数据源之间的数据实时复制。
ReplicationServer将数据源中的源数据实时的复制到目标数据库中去,可以用作系统容灾,系统迁移,系统集成,数据仓库的数据抽取等用途。
ReplicationServer可以对DB2直接复制,对非DB2数据源的访问要通过FederationServer来实现。
可以将ReplicationServer作为中间件,收集到各个数据源的数据变化,并分发给各个目标数据源。
图3中所示的系统是一个应用ReplicationServer实现多种数据源之间复制的系统。
本系统中采用SQL复制捕捉数据源的变化并复制到作为中间件的DB2数据库中,然后由Q复制分发到各个目标数据库。
采用Q复制进行数据分发,主要是考虑到Q复制处理大批量数据时的高效性。
图3.复制系统
查看原图(大图)
生产环境准备
我们以典型的Oracle到Oracle的复制为例实现这个复制系统。
生产环境包括Oracle数据源,DB2中间数据库,ReplicationServer和FederationServer,MQ。
下面我们介绍部署生产环境需要注意的事项,以及如何创建DB2数据库并使之具备复制功能。
软件准备
表2列出了我们需要安装的软件,以及软件的用途。
Q复制依赖MQ传送消息来实现数据复制,推荐使用MQ6.0或者6.0以上版本。
表2.需要安装的软件及软件用途
软件
用途
RedHatEnterprise4Update6
运行ReplicationServer的操作系统
Oracle10g
数据源和目标数据库
DB2V95ESE
中间数据库
ReplicationServerV95
复制服务器
FederationServerV95
联合数据库
WebSphereMQV6.0
消息服务器
安装DB2,ReplicationServer,FederationServer
安装软件的过程不再累赘,可以查阅“IBMDB2forLinux,UNIX和Windows版信息中心”。
安装完DB2后,需要安装DB2V95ESE,ReplicationServerforQ,FederationServer的license。
目前ReplicationServer中的SQL复制产品是随着DB2一起发售的,只要你拥有了DB2的license就可以使用SQL复制,而Q复制则需要单独购买license。
FederationServer中的Informixwrapper是随着DB2一起发售的,安装了DB2后可以使用Informixwrapper连接Informix数据源。
对于其他数据源的wrapper需要单独购买安装。
本例中我们只需安装Oraclewrapper。
安装完Oraclewrapper后,可以在相应的实例下运行djxlinkOracle验证是否安装成功。
创建DB并使DB具备复制功能
针对DB2数据源,Q和SQL复制都是基于LOG的,复制程序会连续读取数据库的恢复日志。
因此我们必须开启DB2的归档模式。
这样复制程序才能够捕捉DB2数据源的变化。
db2 create db test;
db2 update db cfg for test using logretain recovery;
DB2启用归档模式后会处于pending状态,必须执行备份操作以后,才能对数据库进行访问。
db2 backup db test;
部署复制环境
在这里我们介绍如何使用ASNCLP部署复制环境。
因为对于非DB2数据源的支持,ReplicationServer需要用到FederationServer。
这里我们使用DB2_DB作为中间数据库有三个用途,一是作为SQL复制中的目标数据库,二是作为Q复制中的源数据库,三是作为访问Oracle的FederationServer。
下文中提到的FED_DB和DB2_DB指的是同一个DB。
以下的例子将会实现Oracle源数据库中的对象TEST1到Oracle目标数据库中的目标对象TRG_TEST1的复制。
复制过程会借助DB2_DB上的中间表MID_TEST1实现。
设置FederaionServer
为了使ReplicationServer能够访问到非DB2数据源,首先要设置好FederationServer。
以下步骤描述的是如何通过联合数据库访问Oracle数据库。
1.使DB具备Federation功能
db2 update db cfg for FED_DB using federated yes;
2.设置Oracle客户端环境变量
打开位于实例目录中的sqllib/cfg/db2dj.in文件,写入Oracle客户端相关的环境变量:
ORACLE_HOME=/opt/oracle/product/10.2.0.1.0
TNS_ADMIN=/home/db2inst1/bin
设置好环境变量后要重启db2实例,使新配置生效:
db2stop;
db2start;
3.生成访问Oracle所需的库文件
djxlinkOracle
执行这个命令后会在FederationServer安装目录中的lib32或者lib64中生成libdb2net8.so和djxlinkOracle.out。
libdb2net8.so就是FederationServer访问Oracle所需的库文件。
如果出错,请检查djxlinkOracle.out,查看更为详细的错误信息。
4.创建Oraclewrapper/FederationServer/Usermapping
db2 connect to FED_DB;
db2 create wrapper NET8 options(db2_fenced ‘ n ’ );
db2 create server FED_SERVER type oracle version 9 wrapper NET8 options(node 'UTF8ORA1');
db2 create user mapping for user server FED_SERVER
options (remote_authid 'ORAUSER', remote_password 'ORAUSER);
UTF8ORA1是已知的Oracle实例的服务名。
NET8是Oraclewrapper的固有名称,其它数据源也有相应的包装器名称例如:
Informix数据源的wrapper是INFORMIX,Sybase数据源是CTLIB,等等。
这段脚本创建了Oracle数据库到DB2数据库的映射。
完成以上操作后,用户可以通过FED_SERVER访问Oracle数据源中的数据。
ReplicationServer也可以通过其复制数据。
假设已知在Oracle数据源端有源表TEST1,在FED_DB中创建到该表的映射:
db2 create nickname TEST1 for FED_SERVER. ” ORAUSER ” . ” TEST1 ”;
查看该表中的数据:
db2 “ select * from TEST1 ”;
这样我们通过FED_SERVER获得了访问Oracle的能力。
部署SQL复制
部署SQL复制是为了将Oracle数据源中的复制对象变化捕获并复制到中间数据库DB2_DB,作为Q复制的对象。
部署过程包括创建Capture/Apply控制表,注册数据源,创建订阅和订阅成员,启动复制程序等步骤。
创建的复制对象前后有一定的依赖关系,创建的顺序如图4所示。
下面我们分步讲解各个步骤的作用和实现方法。
图4.SQL复制流程
查看原图(大图)
1.创建Capture控制表
这一步是在Oracle数据源中创建Capture程序的控制表。
set server capture to db FED_DB nonibm server FED_SERVER
id USER_ID password “ USER_PASSWORD ” ;
create control tables for capture server in nonibm schema “ USER_SCHEMA ” ;
第一句脚本指定了Capture服务器是FED_DB,使用FED_SERVER连接Oracle数据源。
第二句是通过FED_SERVER连接Oracle数据源并在Oracle服务器端创建Capture控制表。
2.注册数据源
在创建Capture控制表成功后,需要注册数据源中的对象作为复制对象。
create registration(TEST1) differential refresh cols all image both prefix “ x ” ;
这一句在控制表中注册Oracle数据源中的表TEST1为复制对象。
3.创建Apply控制表
这一步是在复制环境中创建Apply控制表。
在本文中先要将数据复制到作为中间数据库的DB2_DB中去。
set server control to db DB2_DB;
create control tables for apply control server;
第一句脚本指定了Apply服务器是DB2_DB。
第二句是在DB2_DB中创建Apply控制表。
4.创建订阅集和订阅集成员
在注册好数据源对象之后,需要创建订阅集和订阅集成员来确定数据源和目标之间的关系,数据源对象和目标之间可能是1对1关系,也可能是1对多的关系。
这里我们为源表TEST1创建唯一的目标表MID_TEST1。
create subscription set setname SET1 applyqual AQ activate yes timing interval 1;
create member in setname SET1 appluqual AQ activate yes source TEST1 target
name MID_TEST1 definition type usercopy cols all registered;
第一句脚本是创建一个订阅集为SET1,并设定复制为间隔为1秒的连续复制。
第二句脚本是指定订阅集中的一个订阅成员,指定Capture要将源表TEST1的变化复制到目标数据库中的MID_TEST1。
5.启动Capture/Apply程序
捕捉Oracle数据源是不需要Capture程序的,数据的捕捉通过触发的方式实现的,源表上有数据变化会立刻触发复制将数据变化发送到目标表上。
所以我们只需要在DB2目标数据库上启动Apply程序。
asnapply apply_qual=AQ control_server=FED_DB;
6.开始复制
在Oracle端的TEST1表中插入一些数据,检验目标数据库DB2_DB中MID_TEST1的数据是否一致。
一致则复制成功。
部署Q复制
部署Q复制是为了捕获DB2_DB中的MID_TEST1的数据变化,将数据复制到Oracle目标服务器。
部署过程包括创建QCapture,QApply控制表,创建Q复制映射,创建Q订阅等步骤。
Q复制中的复制消息是通过MQ来传输的,我们首先配置一个Q复制所需的队列管理器。
图5.Q复制流程
查看原图(大图)
1.创建MQ对象
创建队列管理器:
crtmqmQDB2OEM
启动队列管理器:
strmqmQDB2OEM
创建Q复制所需的队列:
define qlocal (QDB2OEM.ADMINQ)
define qlocal (QDB2OEM.RESTARTQ)
define qlocal (QDB2OEM.TESTRSQ)
define qmodel (IBMQREP.SPILL.MODELQ) defsopt(shared)
maxdepth(500000) msgdlvs1(fifo) deftype(permdyn)
这段脚本创建并启动了队列管理器QDB2OEM,并定义了传输复制消息的队列QDB2OEM。
Capture程序会将捕获到的消息放到TESTRSQ,Apply程序从TESTRSQ取得消息并应用到目标数据库。
2.在DB2_DB上创建QCapture控制表
asnclp session set to q replication;
set server capture to db DB2_DB;
set qmanager "QDB2OEM" for capture schema;
create control tables for capture server using
restartq "QDB2OEM.RESTARTQ"
adminq "QDB2OEM.ADMINQ";
这段脚本指定了QCapture使用的队列,并在Capture服务器DB2_DB上创建QCapture控制表。
“asnclpsessionsettoqreplication”这句是必须的,ASNCLP解释器用这句来区分SQL和Q复制的ASNCLP脚本。
3.在Oracle上创建QApply控制表
asnclp session set to q replication;
set server capture to db DB2_DB;
set server target to db FED_DB nonibm server "FED_SERVER";
set run script now stop on sql error off;
set qmanager "QDB2OEM" for apply schema;
create control tables for apply server;
这段脚本在Oracle目标数据库上创建QApply控制表,这里所用到的FED_SERVER是为Oracle目标数据库创建的,不是SQL复制中为Oracle数据源创建的那个。
但它们都使用FED_DB作为FederationServer。
注意实际使用中要创建不同的Federation。
4.使DB2具备复制功能
db2 update db cfg for testdb using logretain recovery;
db2 backup db testdb;
5.创建DB2到Oracle目标数据库的Q复制映射
asnclp session set to q replicaion;
set server capture to db DB2_DB;
set server target to db FED_DB nonibm server "FED_SERVER";
set qmanager "QDB2OEM" for capture schema;
set qmanager "QDB2OEM" for apply schema;
set apply schema oem_user;
create replqmap QDB2OEM_QMAP using
adminq "QDB2OEM.ADMINQ" recvq "QDB2OEM.TESTRSQ"
sendq "QDB2OEM.TESTRSQ" num apply agents 4 max message size 300;
这段脚本创建了从DB2_DB到目
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- InfoSphere Replication Server 实现多种数据源之间的数据复制 实现 多种 数据源 之间 数据 复制
链接地址:https://www.bdocx.com/doc/30739097.html