暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

CloudCanal 实现ORACLE 19.4 到PG 16.1 全量增量同步以及数据校验

1583

最近公司要把核心的ORACLE项目换成POSTGRES, 整体数据大致40TB左右,数据迁移同步是一个重大的挑战。

之前公司的去O项目,都是采取的ORA2PG,dataX这种的离线方式,虽然需要维护窗口时间,但是比较稳妥。

但是对于数据量大的项目,并且核心项目不能允许长时间down time的核心系统,必须要采取一种基于CDC的数据实时同步的方案。

国际上业内的旗舰产品自然是OGG了, 但是由于甲骨文的OGG 需要在PG 端 安装OOGG4PG 软件并且需要独立的license 费用, 这边先暂时由于cost 方面的考虑暂时放弃。(据说是1万多美刀 per core ,果然是500强企业的高端奢侈品)

偶然间发现了在网上发现了CloudCanal, 感觉web页面风格很像阿里系的DTS,datawork的产品。

而且最最最重要的是有社区免费版!!!! (虽然任务数受限在5个,但是可以先做一个POC体验一下,最基本同步需求是否可以满足)

我们来访问官网首页:https://www.clougence.com/?src=cc-doc-install-windows

可以看到支持的数据源还是十分丰富的:

Image.png

我们首先需要申请注册一个账号:

Image.png

注册成功登录后,我们点击 下载私有部署版

Image.png

目前支持容器部署和tar安装2种模式: 这里我们选择的TAR包的安装模式

Image.png

Image.png

我们下载完成后,可以参考安装手册进行安装:
https://www.clougence.com/cc-doc/productOP/tgz/firstinstall_with_tgz

简单的总结如下:
1.需要一个mysql 8.0的数据库,作为保存任务的元数据的库
2.需要promethues 服务进行任务指标的采集监控
3.需要钉钉机器人进行报警(可选微信或者其他的方式)

Image.png

基本环境安装:

yum -y install java-1.8.0-openjdk-devel.x86_64 useradd -d /home/clougence -m clougence passwd clougence echo "clougence ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers mkdir -p /home/clougence/{logs,backup,tar_gz} vim /etc/security/limits.conf # nofile - 可以打开的最大文件数, *通配符表示对所有用户有效 * soft nofile 65535 * hard nofile 65535 # 配置文件名可能是 20-nproc.conf vim /etc/security/limits.d/90-nproc.conf # 修改clougence的用户最大进程打开数 * soft nproc 1024 clougence soft nproc 131072

在mysql 8.0中创建用户:(这里我的数据库是提前安装好的,没有的话现成的mysql的话 需要自行独立安装mysql8.0版本)

root@localhost:mysql_uatDB.sock [performance_schema]> CREATE DATABASE `cloudcanal_console` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -------------- CREATE DATABASE `cloudcanal_console` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci -------------- Query OK, 1 row affected (0.00 sec) root@localhost:mysql_uatDB.sock [performance_schema]> create user 'cloudcanal'@'%' identified by 'Clougence#2021'; -------------- create user 'cloudcanal'@'%' identified by 'Clougence#2021' -------------- Query OK, 0 rows affected (0.01 sec) root@localhost:mysql_uatDB.sock [performance_schema]> root@localhost:mysql_uatDB.sock [performance_schema]> grant all on cloudcanal_console.* to 'cloudcanal'@'%'; -------------- grant all on cloudcanal_console.* to 'cloudcanal'@'%' -------------- Query OK, 0 rows affected (0.01 sec) root@localhost:mysql_uatDB.sock [performance_schema]> root@localhost:mysql_uatDB.sock [performance_schema]> flush privileges; -------------- flush privileges -------------- Query OK, 0 rows affected (0.01 sec)

下载软件并解压

wget "https://tgzdownload.clougence.com/tar_gz/3.3.3.1/cc.tgz?Expires=1705934079&OSSAccessKeyId=LTAI4G5wdUHmu9t19fVLkC2w&Signature=HX7to5JMjIs0zHyRA0K6upPsXd0%3D" -O cc.tgz tar -xaf cc.tgz tar -zxvf cloudcanal-console.tar.gz mv /home/clougence/tar_gz/cloudcanal /home/clougence

修改配置文件参数

cd ~/cloudcanal/console/conf 修改必要的参数: spring.datasource.url=jdbc:mysql://10.67.208.70:3310/cloudcanal_console?serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true&socketTimeout=30000&connectTimeout=3000 spring.datasource.username=cloudcanal spring.datasource.password=********* jwt.secret=tpsesJL5AAMZqrlS8Sjg40S3xGKlUxhShYLfqfnNHQKROPx7MNlN9N11W361kDgTr/rNPvPCVruIlwyfW4IYLQ== console.rsocket.dns=10.67.38.173 prometheus.host=http://10.67.39.149:9090

我们需要在linux下生成 jwt.secret( 系统登录验证算法的密钥,可以是一个64位随机码)

openssl rand -base64 64 > jwt.secret >cat jwt.secret tpsesJL5AAMZqrlS8Sjg40S3xGKlUxhShYLfqfnNHQKROPx7MNlN9N11W361kDgT r/rNPvPCVruIlwyfW4IYLQ==

启动项目:第一次启动会初始化mysql数据库里面的表

cd ~/cloudcanal/console/bin sh ./startConsoleAndUpdDB.sh

登录web控制台:http://10.67.38.173:8111/#/login

Image.png

默认登录账号和密码: 默认账号( test@clougence.com)和密码(clougence2021)

下一步:激活软件,免费获取许可证

点击未激活链接

Image.png

复制申请码:

Image.png
点击首页免费获取许可证

Image.png
填取申请码:
Image.png

默认是 最大允许5个任务,有效时长是3个月。

Image.png

我们把生成的许可证填入到激活对话框里:

Image.png

最后我们可以看到地址栏中的产品状态变成了 已激活

Image.png

======= 如果你采用源码安装的话,还需要删除默认节点和添加机器的额外的步骤=====

Image.png
先停止,后删除
Image.png
Image.png
接下来,我们需要新增一台机器:
Image.png
部署成功后机器显示
Image.png

至此我们完成了安装和激活产品的步骤。

下面我们来部署一个任务: 数据源ORACLE (19.4.0.0.0)的表同步到Postgres 16.1

配置同步任务前的准备:

源端ORACLE:

1.需要打开archive log mode: (我的测试环境已经是打开的模式)

SYS@CN00C1CB> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 211 Next log sequence to archive 213 Current log sequence 213

如果尚未打开参考命令:

shutdown immediate; startup mount; alter database archivelog; alter database open read write;

2.开启数据库级别的supplemental logging

SYS@CN00C1CB> alter database add supplemental log data; Database altered.

3.我们创建一张表,并打开别级别的supplemental logging

SYS@CN00C1CB> alter session set current_schema=jason; Session altered. SYS@CN00C1CB> create table sync_table(id number primary key, name varchar2(20), cdate date); Table created. SYS@CN00C1CB> alter table jason.sync_table add supplemental log data (all,primary key,unique) columns; Table altered.

4.创建一个同步的账号

create user data_cdc_sync identified by "1234abcD"; grant create session, select_catalog_role, logmining, select any transaction, select any table to data_cdc_sync; grant execute on sys.dbms_logmnr to data_cdc_sync; grant execute on sys.dbms_logmnr_d to data_cdc_sync; grant select on v_$archived_log to data_cdc_sync; grant select on v_$logmnr_contents to data_cdc_sync; grant select on v_$log to data_cdc_sync; grant select on v_$logfile to data_cdc_sync; grant select on v_$logmnr_logs to data_cdc_sync; grant select,alter on jason.sync_table to data_cdc_sync;

目标端POSTGRES 16上创建一张表:

postgres=# \c db_cab psql (12.3, server 16.1) db_cab=# create user app_data_sync password 'app_data_sync'; CREATE ROLE db_cab=# create schema app_data_sync authorization app_data_sync; CREATE SCHEMA db_cab=# \c db_cab app_data_sync psql (12.3, server 16.1) WARNING: psql major version 12, server major version 16. Some psql features might not work. You are now connected to database "db_cab" as user "app_data_sync". db_cab=> create table sync_table (id bigint primary key, name varchar(20), cdate timestamp); CREATE TABLE

接下来我们登陆web界面,分别创建数据库源端和目标端的数据源。

Image.png
我们选择创建一个ORACLE的数据源:

Image.png
测试通过:

Image.png

这个时候我们源端的ORACLE和目标端的PG都已经创建好了
Image.png

下一步,我们创建同步任务:

我们在源端ORACLE插入1万条数据, 然后模拟一下初始化全量同步数据到postgres

SYS@CN00C1CB> begin for i in 1..100000 loop insert into sync_table select i , 'jason'||i, sysdate from dual; end loop; commit; end; /

Image.png

SCHEMA映射这块要选择正确:

Image.png

我们选取全量同步,全量增强型, 选择全量8GB的最近性能模式

Image.png

选择表

Image.png

任务创建成功后,出现在列表中,我们点击启动任务

Image.png

10万数据不算大,瞬间同步完成。

Image.png

我们在测试一下基于SCN 点增量同步:

获得当前源端ORACLE的SCN:

SYS@CN00C1CB> select to_char(current_scn) from v$database; TO_CHAR(CURRENT_SCN) ---------------------------------------- 10387086027046

我们分别进行修改,删除,和插入操作:

SYS@CN00C1CB> delete from sync_table where id <= 100; 100 rows deleted. SYS@CN00C1CB> update sync_table set name = 'new version jason', cdate = sysdate where id between 101 and 201; 101 rows updated. SYS@CN00C1CB> begin for i in 100001..200000 loop insert into sync_table select i , 'jason'||i, sysdate from dual; end loop; commit; end; / 2 3 4 5 6 7 PL/SQL procedure successfully completed. SYS@CN00C1CB> commit; Commit complete.

我们创建一个增量同步的任务 start scn = 10387086027046:

Image.png

INSERT,UPDATE,DELETE 必须要勾选:

Image.png

字段过滤:

Image.png

创建任务:

Image.png

设置起始点SCN: 10387086027046

Image.png

启动任务: 我们可以从commit-log 发现日志在同步

Image.png

我们登陆目标端数据库PG进行手动校验: 数据是符合我们的预期的

db_cab=> select count(1) from sync_table where id <=100; count ------- 0 (1 row) db_cab=> select count(1) from sync_table where name = 'new version jason'; count ------- 101 (1 row) db_cab=> select count(1) from sync_table; count -------- 199900 (1 row)

接来下我们通过web自带的数据校验功能,来比较一下源端和目标端的数据是否一致。

我们创建一个全量校验的任务:

Image.png

我们点击数据校验的按钮查看验证结果:

Image.png

最后我们总结一下:
1.CloudCanal 作为中心化部署方式(非OGG经典模式的端对端方式),提供了容器部署(docker和K8S)和TGZ的多种部署方式。
2.CloudCanal 免费版可以支持5个任务,基本上满足测试环境的POC的任务。
3.CloudCanal 提供类似于阿里云DTS功能的服务web界面,可以选择全量,增量(ORACLE基于SCN number),数据校验和结构迁移等任务.
4.CloudCanal 支持的数据库种类很丰富,而且支持的大多数数据库的最新版。

Have a fun 😃 !

最后修改时间:2024-01-25 10:59:57
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论