一.数据复制技术介绍
要将源数据库上的业务数据准确、实时的复制到目标数据库上。通过对源数据库的数据更新情况,定制适合的计划任务,将分属不同地市的数据,返还给相应的地市。数据更新情况捕获的方案有很多,但大多的方案都是需要在源端数据库端创建大量的触发器来实现的,触发器的出现必定会影响源端数据库的运行效率。
经常使用的是使用数据库日志(Change Data Capture CDC)捕获方式。这种方式可以避免在源端数据库中创建触发器,从而最大情况下减少对源端数据库的压力。
CDC则是通过分析已经commit的日志记录来得到增量数据信息,然后将增量数据信息更新至目标端。

CDC体系结构基于发布者/订阅者模型。发布者捕捉变化数据并提供给订阅者。订阅者使用从发布者那里获得的变化数据。通常,CDC系统拥有一个发布者和多个订阅者。发布者首先需要识别捕获变化数据所需的源表。然后,它捕捉变化的数据并将其保存在特别创建的变化表中。它还使订阅者能够控制对变化数据的访问。订阅者需要清楚自己感兴趣的是哪些变化数据。一个订阅者可能不会对发布者发布的所有数据都感兴趣。订阅者需要创建一个订阅者视图来访问经发布者授权可以访问的变化数据。CDC分为同步模式和异步模式,同步模式实时的捕获变化数据并存储到变化表中,发布者与订阅都位于同一数据库中。
二.CDC简介
CDC是一个复制解决方案,用于捕获正在发生的数据库更改,并根据 IBM Data Replication Management Console GUI 应用程序中配置的表映射将这些更改传递到目标数据库、消息队列或 ETL 解决方案(例如 IBM DataStage®)。
对于动态数据仓储、主控方数据管理、应用程序合并或迁移、运营 BI 以及启用 SOA 项目之类的关键信息管理活动,CDC Replication 能够以影响性较低的方式捕获数据更改并高速传递这些更改。另外,通过仅发送更改的数据,CDC Replication 还可以帮助降低处理开销和网络流量。复制可连续执行,也可定期执行。数据从源服务器传输出来后,可以在目标环境中重新映射或变换。
2.1.组件概述
下面描述了 InfoSphere CDC 体系结构的关键组件:
(1)Access Server 控制所有以非命令行方式对复制环境进行的访问。当您登录到 Man-agement Console 时,您就是在连接到 Access Server。可以在客户机工作站上关闭Access Server,而不会影响源服务器与目标服务器之间活动的数据复制活动。简称AS,用于连接及管理CDC引擎,配置完成后CDC引擎间会自行进行通讯,即使AS宕机也不影响CDC的正常复制;
(2)管理 API—作为基于 Java 的可选编程接口运行,您可以使用此 API 对操作配置或交互进行脚本编制。
(3)应用代理程序 —目标上的代理程序,用于处理源所发送的更改.
(4)命令行界面—允许您独立于 Management Console 来管理数据存储器和用户帐户,以及执行管理脚本编制。
(5)通信层(TCP/IP) - 作为源与目标之间的专用网络连接
(6)源和目标数据存储器—表示数据复制所需的数据文件和 InoSphere CDC 实例。每个数据存储器都表示您要连接至的数据库,并且充当表的容器。使其可供复制的表包含在数据存储器中。
(7)Management Console —允许您配置、监视和管理各种服务器上的复制,指定复制参数以及从客户机工作站启动刷新和镜像操作。 另外,Management Console 还允许您监视复制操作、等待时间、事件消息以及源或目标数据存储器所支持的其他统计信息。Management Console 中的监控器旨在用于需要持续分析数据移动的时间紧急的工作环境。在设置复制之后,您可以在客户机工作站上关闭 Management Console,而不会影响源服务器与目标服务器之间活动的数据复制活动。简称MC,用于操作AS的UI工具,可以代替AS中的命令行操作。
(8)元数据—表示关于相关表、映射、预订、通知、事件和您设置的数据复制实例的其他细目的信息。
(9)镜像—将更改复制到目标表或者积累源表更改并在以后将其复制到目标表。如果您在环境中实现了双向复制、那么可以在源表与目标表之间来回进行镜像。
(10)刷新—执行初始同步,以便将表从源数据库同步到目标。这称为刷新阅读器
三.架构图

四.前期环境准备
4.1.资源配置
| windows控制台 | 源端服务器 | 目标端服务器 | 备注 | |
|---|---|---|---|---|
| 服务器型号 | ||||
| cpu(个数) | ||||
| 内存大小 | ||||
| 硬盘大小 | 700G | |||
| 操作系统 | Windows 2003 | |||
| 操作系统用户名 | Administrator | |||
| 操作系统密码 | ||||
| CDC程序及版本 | v6.3 | |||
| IP |
4.2.初始化环境
4.2.1.配置jdk
cat >> install_jdk.sh << "EOF"
#!/bin/bash
dir=$(pwd)
#1.配置 JDK 环境解压到 JDK 到指定路径。
tar -xvf $dir/jdk-8u341-linux-x64.tar -C /usr/local
cat >> /etc/profile << "EOF"
export JAVA_HOME=/usr/local/jdk1.8.0_341
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=${JAVA_PATH}:$PATH
export JAVA_BIN=${JAVA_HOME}/bin
EOF
source /etc/profile
java -version
EOF
4.2.2.配置yum源
cat >> yum_config.sh << "EOF"
#!/bin/bash
install_directory=$(pwd)
iso=CentOS-7-x86_64-DVD-2009.iso
mount $install_directory/$iso /mnt/
cat << EOF >> /etc/fstab
/dev/sr0 /mnt iso9660 loop 0 0
EOF
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
cat >> /etc/yum.repos.d/os.repo <<"EOF"
[OS1]
name=OS
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
4.2.3.安装依赖包(源和目标服务器)
--先下载上传然后安装
rpm -ivh nss-softokn-freebl-3.44.0-8.el7_7.i686.rpm glibc-2.17-317.el7.i686.rpm
rpm -ivh libX11-1.6.7-2.el7.i686.rpm libXext-1.3.3-3.el7.i686.rpm libxcb-1.13-1.el7.i686.rpm libXau-1.0.8-2.1.el7.i686.rpm
rpm -ivh libXi-1.7.9-1.el7.i686.rpm
rpm -ivh libXtst-1.2.3-1.el7.i686.rpm
rpm -ivh libXrender-0.9.10-1.el7.i686.rpm
rpm -ivh expat-2.1.0-12.el7.i686.rpm
rpm -ivh zlib-1.2.7-18.el7.i686.rpm
rpm -ivh libpng-1.5.13-8.el7.i686.rpm
rpm -ivh bzip2-libs-1.0.6-13.el7.i686.rpm
rpm -ivh freetype-2.8-14.el7.i686.rpm
rpm -ivh libuuid-2.23.2-65.el7.i686.rpm
rpm -ivh fontconfig-2.13.0-4.3.el7.i686.rpm
rpm -ivh libXft-2.3.2-2.el7.i686.rpm
rpm -ivh libgcc-4.8.5-44.el7.i686.rpm
--安装cdc的依赖包
yum -y install ld-linux.so.2 libgcc_s.so.1 libXext.so.6 libX11.so.6 libXtst.so.6 libXi.so.6 libXft.so.2
输出Nothing to do为正常
如果有报错下载依赖并上传安装
配置agent报错是由于缺失依赖包导致
java.io.IOException: Cannot run program "/opt/IBM/InfoSphereChangeDataCapture/ReplicationEngineforOracle/bin/dmconfigurets": error=2, No such file or directory
安装依赖包报错:
[root@11g-db tmp]# yum -y install ld-linux.so.2 libgcc_s.so.1 libXext.so.6 libX11.so.6 libXtst.so.6 libXi.so.6 libXft.so.2
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
No package ld-linux.so.2 available.
No package libgcc_s.so.1 available.
No package libXext.so.6 available.
No package libX11.so.6 available.
No package libXtst.so.6 available.
No package libXi.so.6 available.
No package libXft.so.2 available.
Error: Nothing to do
下载这些依赖包上传服务器并进行安装,严格安装顺序
rpm -ivh nss-softokn-freebl-3.44.0-8.el7_7.i686.rpm glibc-2.17-317.el7.i686.rpm
rpm -ivh libX11-1.6.7-2.el7.i686.rpm libXext-1.3.3-3.el7.i686.rpm libxcb-1.13-1.el7.i686.rpm libXau-1.0.8-2.1.el7.i686.rpm
rpm -ivh libXi-1.7.9-1.el7.i686.rpm
rpm -ivh libXtst-1.2.3-1.el7.i686.rpm
rpm -ivh libXrender-0.9.10-1.el7.i686.rpm
rpm -ivh expat-2.1.0-12.el7.i686.rpm
rpm -ivh zlib-1.2.7-18.el7.i686.rpm
rpm -ivh libpng-1.5.13-8.el7.i686.rpm
rpm -ivh bzip2-libs-1.0.6-13.el7.i686.rpm
rpm -ivh freetype-2.8-14.el7.i686.rpm
rpm -ivh libuuid-2.23.2-65.el7.i686.rpm
rpm -ivh fontconfig-2.13.0-4.3.el7.i686.rpm
rpm -ivh libXft-2.3.2-2.el7.i686.rpm
rpm -ivh libgcc-4.8.5-44.el7.i686.rpm
下载rpm包地址:RPM resource libev.so.4()(64bit) (rpmfind.net)
五.CDC安装
5.1.安装介质说明
CDC三个组件的安装包如下,一般建议CDC引擎及AS安装在单独的linux服务器上,MC自行安装在windows上,需要特别注意的是,AS与MC的版本必须保持一致,否则会导致组件间通讯异常的情况。
Management Console:cdcaccess-6.5.2-1633-setup.exe
Access Server:cdcmc-6.5.2-1633-setup.exe
agent:CDC_6.5.2_Orcl_Redo_Lnx_x86.zip
5.2.客户机(Windows)
5.2.1.安装Management Console
(cdcmc-6.5.2-1633-setup.exe)
-
运行Management Console安装文件








5.2.2.安装Access Server
(cdcaccess-6.5.2-1633-setup.exe)
1.运行AccessServer安装程序







账号密码均为:admin


5.2.3.添加和配置数据存储器
配置命令:dmconfigurets

配置完成后界面如下:

5.2.4.添加和配置预订

5.2.5.映射和定制表
如果您在使用 InfoSphere CDC Event Server 并且为表映射创建和定制 XML 消息。
如果您在使用 InfoSphere DataStage,并且为 InfoSphere DataStage 作业生成 .dsx定义文件和定制 Java 类。

5.2.6.启动和结束复制

5.3.源端服务器
5.3.1.Oracle开启归档(最好设置定时清理归档的任务)
sqlplus / as sysdba
archive log list
shutdown immediate
startup mount
alter database archivelog;
alter database open;
archive log list
5.3.2.开启附加日志
开启了附加日志
alter database add supplemental log data;
查询是否开启了附加日志
SELECT supplemental_log_data_min FROM v$database;#yes开启
5.3.3.打开表的附加日志
打开命令如下:
alter table table_name add supplemental log data(all,primary key,unique,foreign key) columns;
#批量更改
select 'alter table '||table_name||' add supplemental log data(all,primary key,unique,foreign key) columns;' from user_tables;
--模拟数据
create table test5(id int);
insert into test5 values(10);
commit;
select * from test5;
alter table test5 add supplemental log data(all,primary key,unique,foreign key) columns;
必须开启,不然只同步表结构,不同步数据
5.3.4.安装agent
(CDC_6.5.2_Orcl_Redo_Lnx_x86.zip)
cd /soft
unzip CDC_6.5.2_Orcl_Redo_Lnx_x86.zip
cd CDC_6.5.2_Orcl_Redo_Lnx_x86/ISCDC_652_Oracle
sh setup-cdc-linux-x86-oracleredo.bin





1.选择源端数据库或者目标端数据库所属的数据库平台。

2.选择安装目录

3.开始安装

5.3.5.检查依赖包
cd /opt/IBM/InfoSphereChangeDataCapture/ReplicationEngineforOracle #安装目录
ldd ./jre32/jre/lib/i386/xawt/libmawt.so
5.3.6.配置agent
cd /opt/IBM/InfoSphereChangeDataCapture/ReplicationEngineforOracle/bin
./dmconfigurets


创建agent实例

配置好实例后运行

源端数据库需要开启归档模式

Agent端启动完毕

5.3.7.报错
[root@test2:/opt/IBM/InfoSphereChangeDataCapture/ReplicationEngineforOracle/bin]$ ./dmconfigurets
libgcc_s.so.1 must be installed for pthread_cancel to work
JVMDUMP006I Processing dump event "abort", detail "" - please wait.
JVMDUMP032I JVM requested System dump using '/opt/IBM/InfoSphereChangeDataCapture/ReplicationEngineforOracle/core.20230802.133417.29319.0001.dmp' in response to an event
libgcc_s.so.1 must be installed for pthread_cancel to work
Aborted
在加载动态库时软件和系统路径冲突:
# 删除指定目录(加载软件动态库路径)
unset LD_LIBRARY_PATH
# 查看是否去除
export | grep LD_LIBRARY_PATH
5.4.目标端服务器
5.4.1.安装agent
(CDC_6.5.2_Orcl_Redo_Lnx_x86.zip)
5.4.2.检查依赖包
cd /opt/IBM/InfoSphereChangeDataCapture/ReplicationEngineforOracle #安装目录
ldd ./jre32/jre/lib/i386/xawt/libmawt.so

5.4.3.配置agent
cd /opt/IBM/InfoSphereChangeDataCapture/ReplicationEngineforOracle/bin
./dmconfigurets
5.5.agent运行报错
问题描述:
Congratulations. IBM InfoSphere Change Data Capture (Oracle) has been successfully installed to:
/opt/IBM/InfoSphereChangeDataCapture/ReplicationEngineforOracle
You can launch the Configuration Tool at any time by running
/opt/IBM/InfoSphereChangeDataCapture/ReplicationEngineforOracle/bin/dmconfigurets
Launch Configuration Tool? (1=Yes, 2=No) (DEFAULT: 1): 1
java.io.IOException: Cannot run program "/opt/IBM/InfoSphereChangeDataCapture/ReplicationEngineforOracle/bin/dmconfigurets": error=2, No such file or directory
问题处理:安装相关的依赖包
六.CDC使用
6.1.CDC agent启动
CDC分别在目标端与源端建立一个AGENT,因此在数据同步之前要启目标端与源的agent。命令如下:
cd /opt/IBM/InfoSphereChangeDataCapture/ReplicationEngineforOracle/bin
nohup ./dmts64 –I instance_name &
此命令要在/home/db2inst1/cdc_udb/bin目录下执行。
启动机器上的agent命令:
nohup ./dmts64 –I instance_name &
检查目标端与源端agent是否已启动,命令如下:
netstat –an | grep 10901
出现如下图所示信息,表明已经启动

6.2. CDC agent关闭
CDC agent关闭方式有两种:理想与强制。强制方式在理想关闭方式不起作用的时候执行的。
理想关闭方式命令如下:
./dmshutdown –I instance_name
强制关闭方式命令如下:
./dmterminate
以上命令需在/home/db2inst1/cdc_udb/bin目录下执行
6.3. CDC控制台启动
CDC控制台的打开方式如下图:

点击“Management Console”打开CDC控制台,界面如下:

6.4. CDC控制台管理
6.4.1.修改控制台用户登录密码命令
修改控制台用户登录密码命令:
dmchangeuserpassword.exe
解锁用户命令:
dmunlockuser.exe
6.4.2.控制台与源端和目标端agent的连接与断开

点击工具栏“Configuration”-> “Datastores”就会出现如上图的画面,右击源端与目标端选择“Connect”或“Disconnect”,连接或断开源端与目标端的agent。
6.4.3.访问控制和配置



6.4.4.Subscription的建立与修改
点击工具栏“Configuration”-> “Subscriptions”就会出现如下图的画面

图左面显示所建立的Subscriptions,右面显示某个Subscription所包含的对像。
6.4.5.添加和配置数据存储器
配置命令:dmconfigurets

配置完成后界面如下:

6.4.6.添加和配置预订

6.4.7.映射和定制表
–老版本
如果您在使用 InfoSphere CDC Event Server 并且为表映射创建和定制 XML 消息。
如果您在使用 InfoSphere DataStage,并且为 InfoSphere DataStage 作业生成 .dsx定义文件和定制 Java 类。

–新版本

6.4.8.数据同步监控(启动和结束复制)
–新版本

–老版本:
点击工具栏“Monitoring”-> “Subscriptions”就会出现如下图的画面

上图显示CDC控制台对每个Subscription的监控。数据同步以Subscription为单位, Subscriptions以并行方式执行,每个Subscription内的对像串行执行。
对正在进行数据同步Subscriptions的操作有:
查看同步过程中的日志:右击Subscription,选择“Show Event Log”。
停止同步过程:右击Subscription,选择“End Replication”-> “End Replication(Immediate)”。
开始同步过程:右击Subscription,选择“Start Mirroring(Continuous)”。
补充:Subscription: 订阅
七.CDC常见问题
1、表没有主键报错;
2、找不到归档日志报错;
3、表定义更新报错;
4、RAC的ASM磁盘没有读取权限报错;
5、由于TNSNAME.ORA配置错误报错。
6、表结构同步,表数据未同步;原因:表没有开启补充日志,需要同步的表都需要开启补充日志
7、源端增加表,需重启源端的agent,mc中新增预设
八.参考链接
【IBM CDC系列】CDC的安装_51CTO博客_ibm cdc
1、安装依赖包
yum -y install ld-linux.so.2 libgcc_s.so.1 libXext.so.6 libX11.so.6 libXtst.so.6 libXi.so.6 libXft.so.2
2、解压安装包
cd /opt
unzip CDC_6.5.2_Orcl_Redo_Lnx_x86.zip
cd CDC_6.5.2_Orcl_Redo_Lnx_x86/ISCDC_652_Oracle
3、安装代理服务
sh setup-cdc-linux-x86-oracleredo.bin 命令行式安装界面如下
–选择安装语言

–接受协议

–安装路径

–安装概述

–检查是否缺失依赖包
新开一窗口,检查是否缺失依赖包
cd 检查是否缺失依赖包
–启动agent

问题:运行agent报错
java.io.IOException: Cannot run program “/data/IBM/InfoSphereChangeDataCapture/ReplicationEngineforOracle/bin/dmconfigurets”: error=2, 没有那个文件或目录
缺失的依赖包
yum -y install ld-linux.so.2 libgcc_s.so.1 libXext.so.6 libX11.so.6 libXtst.so.6 libXi.so.6 libXft.so.2
客户机(Windows)
- 安装Management Console(cdcaccess-6.5.2-1633-setup.exe)
- 安装Access Server(cdcmc-6.5.2-1633-setup.exe)
源端服务器:
- Oracle开启归档(最好设置定时清理归档的任务)
- sqlplus / as sysdba
- archive log list
- shutdown immediate
- startup mount
- alter database archivelog;
- alter database open;
- archive log list
- 开启附加日志
- alter database add supplemental log data;
- 安装agent(CDC_6.5.2_Orcl_Redo_Lnx_x86.zip)
- 检查依赖包
- ldd ./jre32/jre/lib/i386/xawt/libmawt.so
- 配置agent
- ./dmconfigurets
目标端服务器:
- 安装agent(CDC_6.5.2_Orcl_Redo_Lnx_x86.zip)
- 检查依赖包
- ldd ./jre32/jre/lib/i386/xawt/libmawt.so
- 配置agent
- ./dmconfigurets





