WEB开发网
开发学院数据库DB2 使用 InfoSphere Replication Server V9.7 高效复... 阅读

使用 InfoSphere Replication Server V9.7 高效复制 Oracle 数据

 2010-03-25 00:00:00 来源:WEB开发网   
核心提示:概述IBM InfoSphere Replication Server 集成了 SQL 复制和 Q 复制两个功能,并在新版本中针对 Q 复制支持的数据源进行了不断的改进,使用 InfoSphere Replication Server V9.7 高效复制 Oracle 数据,数据实时复制的原理主要分为三个步骤:在源数据

概述

IBM InfoSphere Replication Server 集成了 SQL 复制和 Q 复制两个功能,并在新版本中针对 Q 复制支持的数据源进行了不断的改进。

数据实时复制的原理主要分为三个步骤:

在源数据端捕捉数据的变化、传送数据变化、将变化应用于目标数据库中。

SQL 复制技术在源端通过 Capture 程序或 Capture Triggers 获取源端数据的变化,并将已提交的事务性数据记录在 CD 表或 CCD 表中。

目标端 Apply 程序通过读取 CD 表或 CCD 表中的数据,将变化应用于目标端。

而 Q 复制技术则使用 WebSphere MQ 消息队列传送源端和目标端间的事务性数据变化。

SQL Replication 实现 Oracle 到 DB2 复制

从 Oracle 到 DB2 LUW( 以下文中提到的 DB2 均指 DB2 LUW) 的 SQL 复制需要借助 InfoSphere Federation Server。InfoSphere Federation Server 是一个独立的产品,它针对不同的数据源开发了 wrapper 包装器,用户通过这些 wrapper 能够对多种非 DB2 数据源的数据进行访问,进行增加、删除、修改等事务性操作。使用 SQL 复制将数据从 Oracle 源复制到 DB2 目标的具体流程如图 1 所示。

图 1. 使用 SQL Replication 将数据从 Oracle 源复制到 DB2 目标
使用 InfoSphere Replication Server V9.7 高效复制 Oracle 数据

查看原图(大图)

Oracle 源到 DB2 目标的 SQL 复制,源端的数据捕捉工作不是由 Capture 程序承担,而是由一系列的 Capture Triggers 完成。当注册 Oracle 源表时,SQL 复制会在该表中创建三个事件后运行的触发器,包括 INSERT Trigger、DELETE Trigger、UPDATE Trigger 和 PRUNING trigger,同时创建 CCD 表,用于存储对源表的数据变化。通过 Federation Server 创建 Oracle Wrapper 包装器后 , SQL 复制还为 Oracle 源中的控制表、源表、CCD 表创建相应的昵称,使得目标端中的 Apply 程序能够通过这些昵称访问 CCD 表。当源表发生增加、删除、更改操作时,对应的触发器被激活,将更改记录到 CCD 表中。目标端 Apply Program 通过读取 CCD 表的昵称获得变化的数据,并将变化应用到目标表中。Apply 程序成功完成应用后,源端源表中的 PRUNING trigger 被触发,通过读取源端控制表的信息,从 CCD 表删除已成功复制到目标表的记录。

Oracle 源的 Q Replication 简介

信息化发展的日新月异带来许多不同数据源数据通讯和整合的问题。特别是在在大型的商业信息系统中,包含有许多不同的子系统,普遍同时存在着多种数据源,包括 DB2,Oracle,Sybase, MS SQL Server 等。为实现系统间的协同工作,不同数据源数据之间的数据同步也已成为数据复制较多的应用场景。

具体到数据从 Oracle 源到 DB2 目标的需求,通常来自于两大方面,一是企业级复制,二是信息整合。在企业级复制中,需要捕捉商业数据的时刻变化从而获得数据报表的实时更新,同时在企业的不同位置都能使用宝贵的数据。通常是将 OLTP 数据从远端 OLTP 服务器复制到本地数据服务器中。通过对本地服务器的数据分析生成决策计划。快速响应能力是这种应用场景的首要目标,这就要求高吞吐且低延迟的复制能力。而信息整合虽然对数据的实时性要求不是特别高,但通常是将数据大批量地从各数据源复制到核心数据仓库中,需要较高的吞吐量。

IBM InfoSphere Replication Server V9.7 Fix Pack 1 在这样的应用需求下,新增了针对 Oracle 数据源的基于日志的捕获功能。本文中称之为 Oracle Capture。Oracle Capture 不同于 SQL Capture 在源端数据库中创建 Capture triggers 来捕捉数据变化,而是采用直接读取 Oracle 恢复日志的方式获取已提交的事务性数据,然后将数据以压缩的方式发送到 MQ 消息队列中,通过 MQ 消息队列将数据变化传送到目标数据库。而 WebSphere MQ 消息队列提供了一种直接、简单的手段实现了应用系统在不同操作系统平台之间稳定、可靠地传递、交换重要的数据和信息,支持消息处理的事务性控制,能够确保消息不丢失、不复传。因此使用 Oracle Capture 实现 Oracle 源的 Q 复制,一方面减少了对源数据库的影响,另一方面不再需要借助 Federation Server,同时也大大提高了吞吐量,改进了延时性,能够在减轻网络负担的同时提高商业应用的价值。

两种方式的不同

这里将 Oracle 源数据复制的两种方式的不同之处作简单的总结。

表 1. Oracle 源数据复制的两种方式的不同

不同点 SQL复制 Q复制
Capture 所在的位置 与源表同在一个服务器上 与源表同一个服务器或远程服务器上
如何获取 Oracle 源已更改的数据 在 Oracle 源数据库表中创建 Capture triggers。数据变化激活触发器,将已提交的事务性数据存储在 CCD 表中。 使用 Capture 服务器上的 Q Capture 程序读取 Oracle 恢复日志,将已提交的事务性数据封装为 MQ 消息。
如何传输已更改的数据 Apply 程序从 CCD 表的昵称获取数据,并使用 DB2 SQL 将数据应用到目标。 QCapture 将数据以 MQ 消息形式放于 MQ 队列中。WebSphereMQ 将消息发送至目标系统。QApply 程序通过使用 DB2 SQL 从队列中获取这些消息将其应用至目标。
Apply 所在的位置 与目标表同一个服务器或远程服务器上 与源表同一个服务器或远程服务器上
如何将数据应用到 DB2 目标 Apply 提供表方式和事务方式两种方式应用数据。 QApply 含有冲突处理方案,可以并发地应用事务。
是否需要其它软件 需要借助 InfoSphere Federation Server 连接 Oracle 源数据库,并创建昵称。 需要安装 WebSphere MQ
工作特点 更好的数据分发能力 更短的等待时间、更大的吞吐量和较少的 CPU 使用时间。

Oracle Capture 的环境配置、实现机制及创建方式

本节将详细介绍使用 Oracle Capture 实现 Q 复制的环境配置、实现机制及创建方式。

环境配置

对于使用 InfoSphere Replication Server V9.7 Fix Pack 1 的 Oracle Capture 的环境,表 2 列出了推荐使用的操作系统、DB2 及 Oracle 版本配置。更详细的环境信息可参考 InfoSphere Replication Server v9.7 信息中心。

表 2. Oracle Capture 环境配置

操作系统 DB2版本 Oracle版本
AIX 5.3 DB2 for Linux, UNIX, and Windows Version 9.7 Fix Pack 1 10.2.0.1 instant client
Linux 390 64 bit DB2 for Linux, UNIX, and Windows Version 9.7 Fix Pack 1 10.2.0.1 instant client
Solaris 64 bit DB2 for Linux, UNIX, and Windows Version 9.7 Fix Pack 1 10.2.0.1 instant client
Linux AMD 64 bit DB2 for Linux, UNIX, and Windows Version 9.7 Fix Pack 1 10.2.0.3 instant client patched with 10.2.0.3.0 g++ 3.4.3 RHEL AS 4.0 64-bit (x86_64) version
Windows 32 bit DB2 for Linux, UNIX, and Windows Version 9.7 Fix Pack 1 10.2.0.3 instant client patched with 10.2.0.3.0 VS2005 OCCI version
HP IPF 64 bit DB2 for Linux, UNIX, and Windows Version 9.7 Fix Pack 1 10.2.0.1 instant client
Windows 64 bit Not supported Not applicable
Linux PPC 64 bit Not supported Not applicable

实现机制

图 2. 使用 Oracle Capture 实现 Oracle 源到 DB2 目标的 Q 复制
使用 InfoSphere Replication Server V9.7 高效复制 Oracle 数据

查看原图(大图)

图 2 中展现了使用 Oracle Capture 实现 Oracle 源到 DB2 目标的 Q 复制的整体过程,下面具体从 Q Capture,Q Apply 以及二者间的通信,三个方面进行介绍。

1. Q Capture 程序扩展

Oracle Capture 对原有的 Q Capture 进行了扩展,支持调用 Oracle LogMiner。Oracle LogMiner 是 Oracle 公司从产品 8i 以后提供的一个 Oracle Log 分析工具,由两个 PL/SQL 内建包(DBMS_LOGMNR 和 DBMS_LOGMNR_D)和四个 V$ 动态性能视图组成。使用该工具可以得到 Oracle 重做日志、归档日志的数据信息,包括对 Oracle 数据库操作的 DML 以及 DDL 语句等。因此配置 Oracle Capture 需要在 Oracle 源数据库启动 LogMiner 功能。Oracle Capture 调用 LogMiner 的具体过程如图 3 所示。

图 3. Oracle Capture 扩展 Q Capture
使用 InfoSphere Replication Server V9.7 高效复制 Oracle 数据

LogMiner 连接 Oracle 源数据库,分析重做日志、归档日志,将日志信息转化为 SQL 语句的形式存放到 V$LOGMNR_CONTENTS 中。Q Capture 读取并解析 V$LOGMNR_CONTENTS 中的记录,将其转化为 MQ 队列信息,然后进行后续的复制和发布操作。Q Capture 调用 DBMS_LOGMNR_D 创建在线目录(online dictionary), 调用 DBMS_LOGMNR 对 LogMiner 进行管理,包括启动、停止 LogMiner, 添加、删除日志文件等。需要注意的是,使用 Oracle Capture 的用户需要有 Oracle 源数据库 LogMiner 的操作权限。

2. Q Apply 程序

目前 Q Apply 仍使用原有的 Q Apply 程序。

3. Q Capture/Q Apply 通信(MQ)

Oracle Capture 程序和 Q Apply 之间沿用 WebSphere MQ 通信机制。Oracle Capture 将 Oracle 源数据库的已提交的事务性数据变化以 MQ 消息的形式,放入 MQ 消息队列,通过 MQ 队列传送。

创建方式

目前创建 Oracle 源的 Q 复制可以使用复制中心以及 ASNCLP 命令。

ASNCLP 命令集主要包括环境设置型命令如 SET SERVER CAPTUER/TARGET、任务型命令如 CREATE CONTROL TABLES、CREATE QSUB 等,操作型命令如 START/STOP QSUB 等、监控定义命令等方面。为支持 Oracle Capture, InfoSphere Replication Server V9.7fp1 在 ASNCLP 原有的命令集基础上进行了扩展。这里以 SET SERVER CAPTURE 命令为例。SET SERVER CAPTURE 命令用于设置源数据库的环境信息。Oracle 源的 SET SERVER CAPTURE 命令的格式如下:

清单 1. SET SERVER CAPTURE 命令格式

>>-SET SERVER----CAPTURE----TO-------------------------->> 
 
   .-NULLS-----------------------------------------.  
>--+-| server-options |-------------------------------->>< 
 
server-options 
 
|----+-CONFIG SERVER--servername--+----------------+-->>  
                    '-FILE--filename-' 

Oracle 源的 SET SERVER CAPTURE 命令使用 CONFIG 文件指定 Oracle 数据库信息,默认文件名为“asnservers.ini”。其中 SET SERVER CAPTURE TO CONFIG SERVER 命令中的 servername 应与 CONFIG 文件中的 servername 信息保持一致。CONFIG 文件的格式如下,包括数据源的 Type,Data Source,Host,Port 等信息。

清单 2. CONFIG 文件格式

[SERVER_NAME] 
Type=<type> 
Data source=<data source name> 
Host=<host_name> 
Port=<port_number> 

指定 type 为 Oracle, 在 data source name 指定 Oracle 数据源名称。host_name, port_number 分别为 Oracle 数据源所在的主机名或 IP 及端口号。

启动命令

Oracle Capture 使用命令 asnoqcap 启动 Capture 程序。命令格式如下:

清单 3. asnoqcap 命令格式

>>-asnoqcap--capture_server=db_name----------------------> 
 
>--+-----------------------+--+-------------------+------> 
  '-capture_schema=schema-' '-capture_path=path-'  
 
>--+-----------------+--+-------------------+------------> 
  |      .-n-. | '-commit_interval=n-'  
  '-autostop=-+-y-+-'              
 
>--+-------------------------------+---------------------> 
  '-ignore_transid=transaction_ID-'  
 
>--+------------------------+--+-----------------+-------> 
  |           .-I-. | |       .-n-. |  
  '-lob_send_option=-+-S-+-' '-logreuse=-+-y-+-'  
 
>--+------------------+--+-------+--+-------------+------> 
  |       .-n-. |  '-lsn=n-' '-maxcmtseq=n-'  
  '-logstdout=-+-y-+-'                
 
>--+----------------+--+--------------------+------------> 
  '-memory_limit=n-' '-monitor_interval=n-'  
 
>--+-----------------+--+------------------------+-------> 
  '-monitor_limit=n-' |      .-asnpwd.aut-. |  
              '-pwdfile=-+-filename---+-'  
 
>--+------------------+--+---------------------+---------> 
  '-prune_interval=n-' '-qfull_num_retries=n-'  
 
>--+---------------------+--+----------------+-----------> 
  '-qfull_retry_delay=n-' '-signal_limit=n-'  
 
>--+------------------+--+-----------------------+-------> 
  '-sleep_interval=n-' |        .-warmsi-. |  
               '-startmode=-+-warmns-+-'  
                       '-cold---'   
>--+-------------+--+---------------+------------------->< 
  |     .-y-. | '-trace_limit=n-'  
  '-term=-+-n-+-'           

使用 Oracle Capture 实现 Oracle 源到 DB2 目标的 Q 复制示例

本节以一个简单的 Oracle 源单向 Q 复制为例,具体介绍配置、创建使用 Oracle Capture 实现 Oracle 源到 DB2 目标的 Q 复制过程。

环境准备

准备若干服务器作为 Oracle 源服务器,DB2 目标服务器,复制服务器、联合服务器以及消息服务器。在 Oracle 源服务器上安装 Oracle 10g 作为数据源,在 DB2 目标服务器上安装 DB2 LUW v9.7fp1 作为目标数据源,在复制服务器上安装 InfoSphere Replication Server v9.7fp1,在联合服务器上安装 InfoSphere Federation Server V9.7fp1,在消息服务器上安装 WebSphere MQ V6。

本例中在 Solaris 10 上安装 Oracle 10.2.0.1 作为源,在 AIX 6.1 上安装 DB2 LUW v9.7fp1 作为目标,为简化配置,这里将 Replication Server,Federation Server,MQ 都安装在目标数据库所在服务器上。

结构图

图 4. 将 ORADB 中 T_1 表的数据实时复制到 DB2DB 中的 T_TGT_1 表
使用 InfoSphere Replication Server V9.7 高效复制 Oracle 数据

本示例将展现实现数据从数据源 ORADB 中的源表 T_1(Capture Schema 为 REPLQA1)复制到目标数据库 DB2DB 中的目标表 T_TGT_1(Apply Schema 为 ASN)的过程。具体的结构图如图 4 所示。

实现步骤

图 5. 实现步骤
使用 InfoSphere Replication Server V9.7 高效复制 Oracle 数据

查看原图(大图)

1. 创建源和目标数据库

在 Oracle 源端数据库创建数据库 ORADB,DB2 LUW 目标端创建数据库 DB2DB, 具体命令不再赘述。

2. 配置 Oracle 源数据库

对 Oracle 源的配置包括启动追加日志,激活 Oracle 数据库存档日志模式,安装配置 LogMiner,用户授权等。以 sysdba 身份登陆 Oracle 数据库后执行下列操作。

首先,启动追加日志。

清单 4. 启动 Oracle 追加日志

-- Turn on supplemental logging -- 
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; 
 

然后,激活存档日志模式。

清单 5. 激活 Oracle 存档日志模式

-- Enable archive mode -- 
shutdown immediate;(or shutdown normal) 
startup mount; 
archive log list; 
alter database archivelog; 
archive log start; 
 
-- Set recovery file dest size -- 
alter database flashback off 
alter system set DB_RECOVERY_FILE_DEST_SIZE=10g 

之后安装配置 LogMiner 并为 LogMiner 创建单独的表空间。

清单 6. 安装 Oracle LogMiner

-- Install logminer packages -- 
@$ORACLE_HOME/rdbms/admin/dbmslm.sql; 
@$ORACLE_HOME/rdbms/admin/dbmslmd.sql; 
@$ORACLE_HOME/rdbms/admin/dbmslms.sql; 
 
-- Create tablespace for logminer -- 
CREATE TABLESPACE logmnrts$ 
 DATAFILE '/opt/oracle/product/10.2.0/db/oradata/ORADB/logmnr01.dbf' 
 SIZE 100M AUTOEXTEND ON 
 LOGGING EXTENT MANAGEMENT LOCAL; 
 
-- Assign new tablespace to logminer -- 
EXECUTE SYS.DBMS_LOGMNR_D.SET_TABLESPACE('logmnrts$'); 

创建用户 replqa1 并授权。

清单 7. 用户授权

-- Create user replqa1 -- 
create user replqa1 identified by replqa1 
  default tablespace users 
  temporary tablespace temp 
profile default account unlock; 
 
-- Grant authorities to replqa1 -- 
grant dba to replqa1; 
grant connect, resource to replqa1; 
grant create session to replqa1; 
alter user replqa1 quota unlimited on logmnrts$; 
grant select any transaction to replqa1; 
grant select any table to replqa1; 
grant execute_catalog_role to replqa1; 
grant select any table to replqa1; 
grant select on sys.v_$database to replqa1; 
grant select on sys.v_$logmnr_contents  to replqa1; 
grant select on sys.v_$logmnr_dictionary to replqa1; 
grant select on sys.v_$logmnr_logfile   to replqa1; 
grant select on sys.v_$logmnr_logs    to replqa1; 
grant select on sys.v_$logmnr_parameters to replqa1; 
grant select on sys.v_$logmnr_session   to replqa1; 
grant select on sys.v_$logmnr_transaction to replqa1; 
grant select on sys.v_$log to replqa1; 
grant select on sys.v_$logfile to replqa1; 
grant select on sys.v_$archived_log to replqa1; 

3. 生成密码文件

本例中 Oracle 数据源处在远端服务器中,需要为其生成密码文件。

 -- Generate the password file asnpwd.aut -- 
 asnpwd init 
 asnpwd add alias ORADB id replqa1 password passw0rd 

4. 创建 MQ 对象

在消息服务器上创建 MQ 对象。可以使用 MQ 界面或命令行两种形式创建队列管理器,通道,队列等。本例中使用 MQ 命令行创建队列管理器 QORADB2.QM, 以及相应的重起队列,管理队列,数据队列及模型队列。由于消息服务与 QCapture 程序、QApply 程序在同一个服务器上,这里只需要创建一个队列管理器,并且发送队列和接收队列可共用一个数据队列。

清单 8. 创建 MQ 对象

-- Create q manager -- 
endmqm -i QORADB2.QM 
dltmqm QORADB2.QM 
crtmqm -lp 50 -ls 13 -lc QORADB2.QM 
strmqm QORADB2.QM 
 
-- Create queues -- 
runmqsc QORADB2.QM 
alter qmgr maxmsgl(21000000) 
define qlocal (QORADB2.ADMINQ) DEFPSIST(yes) 
define qlocal (QORADB2.RESTARTQ) DEFPSIST(yes) 
define qlocal (QORADB2.TESTRSQ) DEFPSIST(yes) 
define qmodel (IBMQREP.SPILL.MODELQ) DEFSOPT(shared) + 
  MAXDEPTH(500000) MSGDLVSQ(fifo) DEFTYPE(permdyn) 
 

这段脚本创建并启动了队列管理器 QORADB2.QM, 并定义了管理队列 ADMINQ, 重起队列 RESTARTQ, 以及数据队列 TESTRSQ 和队列模型 MODELQ。Capture 程序将捕获到的消息放入 TESTRSQ,Apply 程序从 TESTRSQ 取得消息并应用到目标数据库。

5. 在 Oracle 源数据库 ORADB 创建源表 T_1

清单 9. 创建源表 T_1

DROP  TABLE T_1; 
CREATE TABLE T_1 ( 
  MYKEY CHAR(10) NOT NULL PRIMARY KEY, 
  CINT number(5) default 0 not null, 
  NCINT number(25), 
  CCLOB CLOB, 
  BLOB BLOB, 
  CCHAR char(10), 
  TIMES TIMESTAMP, 
  DDATE  DATE 
); 

6. 通过 ASNCLP 创建 Q 复制对象

在复制服务器上使用 ASNCLP 命令集创建 Q 复制对象。Q 复制的创建主要包括在源端和目标端分别创建控制表,创建复制队列映射,创建源表,创建 Q 预定等步骤。本例中当前用户为 db2inst1。

首先,准备 Oracle 数据源的配置文件。根据上节中介绍的 CONFIG 文件的格式,配置 Oracle 数据源的信息。本例中配置文件为 asnservers.ini。

 [ORACLE1] 
 Type=ORACLE 
 Data source=ORADB 
 Host=192.168.0.3 
 Port=1521 

然后为 Capture 和 Apply 创建控制表。

清单 10. 创建控制表

ASNCLP SESSION SET TO Q REPLICATION; 
SET LOG "qcntl.log"; 
SET OUTPUT CAPTURE SCRIPT "cncap.sql" TARGET SCRIPT "cnapp.sql"; 
SET RUN SCRIPT NOW STOP ON SQL ERROR ON; 
SET SERVER CAPTURE TO CONFIG SERVER ORANODE FILE "asnservers.ini" 
    ID REPLQA1 PASSWORD "REPLQA1"; 
 
SET SERVER TARGET TO DB DB2DB; 
 
SET QMANAGER "QORADB2.QM" FOR CAPTURE SCHEMA; 
SET QMANAGER "QORADB2.QM" FOR APPLY SCHEMA; 
 
SET CAPTURE SCHEMA SOURCE REPLQA1; 
SET APPLY SCHEMA ASN; 
 
CREATE CONTROL TABLES FOR CAPTURE SERVER USING 
  RESTARTQ "QORADB2.RESTARTQ" 
ADMINQ "QORADB2.ADMINQ"; 
 
CREATE CONTROL TABLES FOR APPLY SERVER; 

将脚本保存在文件 crtcntl.in 中 , 执行以下命令运行脚本

asnclp –f crtcntl.in 

接着创建复制队列映射 REPLQMAP1。

清单 11. 创建队列映射 REPLQMAP1

ASNCLP SESSION SET TO Q REPLICATION; 
SET LOG "qmap.log"; 
SET OUTPUT CAPTURE SCRIPT "qmapsrc.sql" TARGET SCRIPT "qmaptgt.sql"; 
SET RUN SCRIPT NOW STOP ON SQL ERROR ON; 
SET SERVER CAPTURE TO CONFIG SERVER ORANODE FILE "asnservers.ini" 
    ID REPLQA1 PASSWORD "REPLQA1"; 
 
SET CAPTURE SCHEMA SOURCE REPLQA1; 
SET SERVER TARGET TO DB DB2DB; 
SET APPLY SCHEMA ASN; 
SET QMANAGER "QORADB2.QM" FOR CAPTURE SCHEMA; 
 
CREATE REPLQMAP REPLQMAP1 USING 
 ADMINQ "QORADB2.ADMINQ" RECVQ "QORADB2.TESTRSQ" 
 SENDQ "QORADB2.TESTRSQ" 
 NUM APPLY AGENTS 4; 

最后创建 Q 预订 QSUB_1。

清单 12. 创建 Q 预订 QSUB_1

ASNCLP SESSION SET TO Q REPLICATION; 
SET LOG "qsub.log"; 
SET OUTPUT CAPTURE SCRIPT "qsubsrc.sql" TARGET SCRIPT "qsubtgt.sql"; 
SET RUN SCRIPT NOW STOP ON SQL ERROR ON; 
SET SERVER CAPTURE TO CONFIG SERVER ORANODE FILE "asnservers.ini" 
  ID REPLQA1 PASSWORD "REPLQA1"; 
   
SET SERVER TARGET TO DB DB2DB ; 
SET QMANAGER "QORADB2.QM" FOR CAPTURE SCHEMA; 
SET QMANAGER "QORADB2.QM" FOR APPLY SCHEMA; 
SET CAPTURE SCHEMA SOURCE REPLQA1; 
SET APPLY SCHEMA ASN; 
CREATE QSUB USING REPLQMAP REPLQMAP1 
(SUBNAME QSUB_1 REPLQA1.T_1 OPTIONS HAS LOAD PHASE N TARGET NAME db2inst1.T_TGT_1); 

7. 启动 Q Capture/Q Apply

启动 Oracle Capture 之前需要先创建密码文件 asnpwd.aut

asnpwd init 
asnpwd add alias ORADB id replqa1 password replqa1 
 

启动 Oracle Capture

asnoqcap capture_server=ORADB capture_schema=replqa1 pwdfile=asnpwd.aut 
 

启动 Q Apply。

asnqapp apply_server=DB2DB apply_schema=ASN 
 

8. 开始数据复制

本例中对源表 T_1 进行了增删改操作。

清单 13. 对源表 T_1 进行增删改操作

INSERT INTO T_1 VALUES 
('INSER1', 1,123456789012345678, 'clobCLOBCLOB', 'B3876', 
 null, '1-JAN-00 04.00.00.000000 PM', '01-JAN-00'); 
 
INSERT INTO T_1 VALUES 
('INSER2', 1,123456789012345678, 'clobCLOBCLOB', 'B3876', 
 null, '1-JAN-00 04.00.00.000000 PM', '01-JAN-00'); 
 
update T_1 set MYKEY='update' where MYKEY='INSER1'; 
 
delete from T_1 where MYKEY = 'INSER2'; 

9.观察复制过程及结果

打开 Capture 和 Apply 程序运行时的 log 文件,本例中为 ORADB.REPLQA1.QCAP.log 与 db2inst1.DB2DB.ASN.QAPP.log, 检查 Capture 和 Apply 程序的运行状态。分别查询源数据库 ORADB 中的源表 T_1 及目标数据库 DB2DB 中的目标表 T_TGT_1 的数据,检查是否一致。

至此,一个单向的 Oracle 到 DB2 的 Q 复制就完成了。

局限

Oracle Capture 作为 InfoSphere Replication Server V9.7fp1 中的新功能,目前在有些方面存在的一定的局限性,在以后的版本中将会不断得到改进。

支持的 Oracle 数据类型

大部分的数据类型都在当前的版本中得到了支持,除了 LONG 或 LONG RAW 数据类型。另外,由于 Oracle 数据库和 DB2 数据库对 NUMBER 数据类型的定义的不同,一些 NUMBER 数值复制后会有一定的精度变化。

Oracle 与 DB2 间的双向 Q 复制

Oracle 与 DB2 间的双向 Q 复制需要完备的冲突检测机制,研发部门正在对这方面机制进行研究。目前用户可以通过定义两个单向 Q 复制:Oracle 到 DB2 的单向 Q 复制,DB2 到 Oracle 的单向 Q 复制,以及相应的冲突解决方案来实现双向 Q 复制。

用于复制的实用程序

随 InfoSphere Replication Server 一起提供的几个实用程序,如 Q 复制仪表板 (Q Replication Dashboard), 复制报警监视器 (asnmon), 协调程序 (asntdiff,asntrepair,asnqanalyze) 等,开发人员正在针对 Oracle 数据源作一定的扩展。目前用户只能通过借助 InfoSphere Federation Server 创建源表的昵称的方法使用原有的 asntdiff 程序。

总结

InfoSphere Replication Server 以其稳定性和高效性在同类产品中具备很大的竞争优势,在很多行业都得到了较广泛的应用。随着当前不同数据源间的数据复制和整合的应用场景越来越普遍,InfoSphere Replication Server 致力于客户需求,在 V9.7fp1 中引入了新功能,实现了 Oracle 数据源的 Q 复制。本文在总结采用 SQL 复制技术实现 Oracle 到 DB2 的数据复制的方案基础上,具体介绍了 Oracle Capture 的环境配置、实现机制及创建方式等,并通过一个具体的示例为读者提供了一个初步学习使用 InfoSphere Replication Server V9.7fp1 中 Oracle Capture 新功能的机会。

Tags:使用 InfoSphere Replication

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接