使用CloudCanal同步ORACLE到StarRocks中,将scott用户中有主键的表进行全量/增量实时同步,无主键表不参与同步。


0. ENV
0.1 基础环境
CentOS 7.6;
ORACLE 19.3;
StarRocks 2.0.1(简称SR);
CloudCanal 2.1.0.22(简称CC)。
0.2 部署架构
ORACLE 单机部署:192.168.80.121
SR 4主机部署: 1FE(192.168.80.80)+3BE(192.168.80.83-85)
CC 单机docker容器部署:192.168.80.120

源端ORACLE数据库ORCL实例下,scott用户下所有表:DEPT(有主键)、EMP(有主键)、BONUS(无主键)、SALGRADE(无主键),使用CC同步全量和增量到目标端SR的orcl数据库中,只同步有主键表,无主键表目前不支持。

1. 前置条件
首先参考CloudCanal安装部署参考文档完成CloudCanal社区版的安装和部署,部署详见文末参考章节。
支持条件:
ORACLE database 10G、11G、12C、18C、19C;
支持的StarRocks版本为: 1.18.x、1.19.x、2.0.x;
校验任务只支持主键模型的StarRocks表,源端表需要有主键。
可能有部分字段类型不支持,待进一步确认。

2. 添加数据源
登录CloudCanal平台,ORACLE2SR需要先创建源端ORACLE数据源和目标端SR数据源,再创建任务。
2.1 创建源端ORACLE数据源
数据源管理 -> 新增数据源
部署类型:自建数据库;
数据库类型:ORACLE。
ORACLE 数据源设置:
网络地址: 内网,192.168.80.121:1521;
SID:orcl
认证方式:账号密码
账号:scott
密码:******
点击“测试连接”,确保“测试连接成功”。
描述(可选):ORACLE2SR
点击“新增数据源”。
创建的数据源名称为:ora-6j2pqh94b66w97g (ORACLE2SR),后续创建任务时用到。

注:此处的oracle账号scott,需要赋予DBA角色,不勾选以sysdba身份登入。
2.2 创建目标端StarRocks数据源
数据源管理 -> 新增数据源
部署类型:自建数据库;
数据库类型:StarRocks。
StarRocks 数据源设置:
Client地址: 内网,192.168.80.80:9030,填写FE地址
Http地址:内网,192.168.80.80:8030,填写FE地址
认证方式:有账号无密码
账号:root
点击“测试连接”,提示“测试连接成功”即可。
描述(可选):ORACLE2SR
点击“新增数据源”。
创建的数据源名称为:sr-495yi75s3h6ev1g (ORACLE2SR),后续创建任务时用到。

注:
Client地址:为StarRocks提供给ORACLE Client的服务端口,CloudCanal主要用其查询库表的元数据信息;
Http地址:Http地址主要用于接收CloudCanal数据导入的请求;
到同一个数据库的数据源只能配置一个,如果之前已经配置,不需要再配置,数据源可复用。

3. 任务创建
3.1 创建任务前ORACLE测试数据准备[ORACLE数据库中执行]
1) 源端ORACLE 19C开启supplemental log
[oracle@oms ~]$ sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 - orcluction on Tue Feb 22 21:47:52 2022Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle. All rights reserved.Connected to:Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - orcluctionVersion 19.3.0.0.0SQL> alter database add supplemental log data;Database altered.
2) 创建scott 用户
SQL> @?/rdbms/admin/utlsampl.sqlDisconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - orcluctionVersion 19.3.0.0.0
3) 给scott用户赋予dba角色
SQL> grant dba to scott;Grant succeeded.

4) 验证数据记录数
SQL> conn scott/tigerConnected.SQL> select tname from tab;TNAME--------------------------------------------------------------------------------DEPTEMPBONUSSALGRADESQL> select count(1) from DEPT;COUNT(1)----------4SQL> select count(1) from EMP;COUNT(1)----------14SQL> select count(1) from BONUS;COUNT(1)----------0SQL> select count(1) from SALGRADE;COUNT(1)----------5

5) 目标端StarRocks数据库准备-[StarRocks中执行]
如果需要将数据同步到目标端指定数据库名,需要提前在目标端创建,默认同步到目标端的库名为源端oracle的用户名称,如源端用户名称为scott,默认同步到目标端库名也为scott。
mysql> create database orcl;Query OK, 0 rows affected (0.01 sec)
3.2 创建任务
添加好数据源之后可以按照如下步骤进行数据迁移、同步任务的创建。
1) 开始创建任务
任务管理 -> 创建任务
绑定集群,选择默认集群。
2) 源&目标设置
选择源库和目标库设置
[源库]
部署类型:自建数据库
源类型:ORACLE
网络类型:内网
源实例:选择前面创建的ORACLE数据源ora-6j2pqh94b66w97g (ORACLE2SR),点击“测试连接”,直到提示成功。
字符集:utf8,ORACLE数据库字符集AMERICAN_AMERICA.ZHS16GBK
[目标库]
部署类型:自建数据库
目标类型:StarRocks
网络类型:内网
目标实例:选择前面创建的StarRocks数据源sr-495yi75s3h6ev1g (ORACLE2SR),点击“测试连接”,直到提示成功。此处也可复用其它项目创建的StarRocks数据源,如mysql2SR。
字符集:utf8

[高级配置]:默认

[数据库映射]:
数据库源端选择orcl数据库;
表空间一栏实际是oracle数据库用户列表,此处选择scott用户;
目标数据库选择之前创建的“orcl”,默认同步到SR和源端用户同名的数据库下;
如果有多个用户需要同步,可点击右侧“加号”添加。
点击下一步。

报错处理--ORA-00942: table or view does not exist .
oracle数据源中配置的用户(如scott)需要赋予dba角色,否则,创建任务测试连接或创建任务下一步时会报错:

解决方法:
同步用户授予dba角色。或者可以更改数据源配置的用户为system或sys。

3) 功能配置
选择增量同步,即可以作为容灾方式,一直同步。

增量模式 选择“redo日志”,点击下一步。

也可选择全量迁移,即做一次性全量。此处的增量同步7天,是指任务启动时间开始,7天后就停止增量。

说明:该界面可以理解为这是个岔路口,从上面下来有4条路可以选择,选择其中一条进入下一步。

4) 表&action过滤
去掉无主键表的对勾,下一步。

注:目标表提示待创建,表示不需要手工创建;
默认update和delete勾选的表,表示有主键,可以进行该两项操作,没有勾选的表示表无主键,where条件没有主键,你去执行update(或delete),很有可能会错误的更新(删除),比如多更新(删除)了数据。无主键表,去掉表名的勾选,否则任务创建后,任务会报错,如:
Not support no pk table migration. Not supported table is BONUS。
5) 数据处理
默认,下一步。

6) 创建确认
默认,创建任务。

任务创建后,会自动完成结构迁移、全量、增量阶段。
7) 创建完成

8) 同步数据确认
此时,目标端StarRocks中数据已经生成,表名默认为大写。
mysql> use orcl;Database changedmysql> show tables;+----------------+| Tables_in_orcl |+----------------+| DEPT || EMP |+----------------+2 rows in set (0.00 sec)默认同步过来的表名大写:mysql> select count(1) from emp;ERROR 1064 (HY000): Unknown table 'emp'mysql> select count(1) from EMP;+----------+| count(1) |+----------+| 14 |+----------+1 row in set (0.10 sec)mysql> select count(1) from DEPT;+----------+| count(1) |+----------+| 4 |+----------+1 row in set (0.01 sec)

3.3 增量验证--成功
1) 源端新增一条记录
SQL> insert into emp values (8000,'rundba','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);1 row created.SQL> commit;Commit complete.SQL> select * from emp;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ---------- --------- ---------- ------------ ---------- ---------- ----------8000 rundba CLERK 7782 23-JAN-82 1300 107369 SMITH CLERK 7902 17-DEC-80 800 207499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 307521 WARD SALESMAN 7698 22-FEB-81 1250 500 307566 JONES MANAGER 7839 02-APR-81 2975 207654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 307698 BLAKE MANAGER 7839 01-MAY-81 2850 307782 CLARK MANAGER 7839 09-JUN-81 2450 107788 SCOTT ANALYST 7566 19-APR-87 3000 207839 KING PRESIDENT 17-NOV-81 5000 107844 TURNER SALESMAN 7698 08-SEP-81 1500 0 307876 ADAMS CLERK 7788 23-MAY-87 1100 207900 JAMES CLERK 7698 03-DEC-81 950 307902 FORD ANALYST 7566 03-DEC-81 3000 207934 MILLER CLERK 7782 23-JAN-82 1300 1015 rows selected.

2) 目标端查询是否成功--成功
mysql> select * from EMP;+-------+--------+-----------+------+---------------------+------+------+--------+------+| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO | __op |+-------+--------+-----------+------+---------------------+------+------+--------+------+| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 00:00:00 | 1250 | 500 | 30 | 0 || 7782 | CLARK | MANAGER | 7839 | 1981-06-09 00:00:00 | 2450 | NULL | 10 | 0 || 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 00:00:00 | 3000 | NULL | 20 | 0 || 7934 | MILLER | CLERK | 7782 | 1982-01-23 00:00:00 | 1300 | NULL | 10 | 0 || 7369 | SMITH | CLERK | 7902 | 1980-12-17 00:00:00 | 800 | NULL | 20 | 0 || 7566 | JONES | MANAGER | 7839 | 1981-04-02 00:00:00 | 2975 | NULL | 20 | 0 || 7839 | KING | PRESIDENT | NULL | 1981-11-17 00:00:00 | 5000 | NULL | 10 | 0 || 7876 | ADAMS | CLERK | 7788 | 1987-05-23 00:00:00 | 1100 | NULL | 20 | 0 || 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 00:00:00 | 1600 | 300 | 30 | 0 || 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 00:00:00 | 2850 | NULL | 30 | 0 || 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 00:00:00 | 1500 | 0 | 30 | 0 || 7902 | FORD | ANALYST | 7566 | 1981-12-03 00:00:00 | 3000 | NULL | 20 | 0 || 8000 | rundba | CLERK | 7782 | 1982-01-23 00:00:00 | 1300 | NULL | 10 | 0 || 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 00:00:00 | 1250 | 1400 | 30 | 0 || 7900 | JAMES | CLERK | 7698 | 1981-12-03 00:00:00 | 950 | NULL | 30 | 0 |+-------+--------+-----------+------+---------------------+------+------+--------+------+15 rows in set (0.01 sec)

3) 增量排错参考
https://www.askcug.com/topic/142
3.4 更新验证--成功
1) 源端更新一条记录
update EMP set ename='张三' where EMPNO='8000';commit;select * from EMP;

2) 目标端查询是否成功--成功
mysql> select * from EMP;+-------+--------+-----------+------+---------------------+------+------+--------+------+| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO | __op |+-------+--------+-----------+------+---------------------+------+------+--------+------+| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 00:00:00 | 1250 | 500 | 30 | 0 || 7782 | CLARK | MANAGER | 7839 | 1981-06-09 00:00:00 | 2450 | NULL | 10 | 0 || 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 00:00:00 | 3000 | NULL | 20 | 0 || 7934 | MILLER | CLERK | 7782 | 1982-01-23 00:00:00 | 1300 | NULL | 10 | 0 || 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 00:00:00 | 1250 | 1400 | 30 | 0 || 7900 | JAMES | CLERK | 7698 | 1981-12-03 00:00:00 | 950 | NULL | 30 | 0 || 7369 | SMITH | CLERK | 7902 | 1980-12-17 00:00:00 | 800 | NULL | 20 | 0 || 7566 | JONES | MANAGER | 7839 | 1981-04-02 00:00:00 | 2975 | NULL | 20 | 0 || 7839 | KING | PRESIDENT | NULL | 1981-11-17 00:00:00 | 5000 | NULL | 10 | 0 || 7876 | ADAMS | CLERK | 7788 | 1987-05-23 00:00:00 | 1100 | NULL | 20 | 0 || 8000 | 张三 | CLERK | 7782 | 1982-01-23 00:00:00 | 1300 | NULL | 10 | 0 || 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 00:00:00 | 1600 | 300 | 30 | 0 || 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 00:00:00 | 2850 | NULL | 30 | 0 || 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 00:00:00 | 1500 | 0 | 30 | 0 || 7902 | FORD | ANALYST | 7566 | 1981-12-03 00:00:00 | 3000 | NULL | 20 | 0 |+-------+--------+-----------+------+---------------------+------+------+--------+------+15 rows in set (0.01 sec)

3.5 删除验证--成功
1) 源端删除一条记录
SQL> delete from emp where empno='7934';已删除 1 行。SQL> commit;提交完成。SQL> select * from emp;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ---------- --------- ---------- -------------- ---------- ---------- ----------8000 张三 CLERK 7782 23-1月 -82 1300 107369 SMITH CLERK 7902 17-12月-80 800 207499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 307521 WARD SALESMAN 7698 22-2月 -81 1250 500 307566 JONES MANAGER 7839 02-4月 -81 2975 207654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 307698 BLAKE MANAGER 7839 01-5月 -81 2850 307782 CLARK MANAGER 7839 09-6月 -81 2450 107788 SCOTT ANALYST 7566 19-4月 -87 3000 207839 KING PRESIDENT 17-11月-81 5000 107844 TURNER SALESMAN 7698 08-9月 -81 1500 0 307876 ADAMS CLERK 7788 23-5月 -87 1100 207900 JAMES CLERK 7698 03-12月-81 950 307902 FORD ANALYST 7566 03-12月-81 3000 20已选择 14 行。

2) 目标端查询是否成功--成功
mysql> select * from EMP;+-------+--------+-----------+------+---------------------+------+------+--------+------+| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO | __op |+-------+--------+-----------+------+---------------------+------+------+--------+------+| 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 00:00:00 | 1250 | 1400 | 30 | 0 || 7900 | JAMES | CLERK | 7698 | 1981-12-03 00:00:00 | 950 | NULL | 30 | 0 || 7521 | WARD | SALESMAN | 7698 | 1981-02-22 00:00:00 | 1250 | 500 | 30 | 0 || 7782 | CLARK | MANAGER | 7839 | 1981-06-09 00:00:00 | 2450 | NULL | 10 | 0 || 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 00:00:00 | 3000 | NULL | 20 | 0 || 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 00:00:00 | 1600 | 300 | 30 | 0 || 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 00:00:00 | 2850 | NULL | 30 | 0 || 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 00:00:00 | 1500 | 0 | 30 | 0 || 7902 | FORD | ANALYST | 7566 | 1981-12-03 00:00:00 | 3000 | NULL | 20 | 0 || 7369 | SMITH | CLERK | 7902 | 1980-12-17 00:00:00 | 800 | NULL | 20 | 0 || 7566 | JONES | MANAGER | 7839 | 1981-04-02 00:00:00 | 2975 | NULL | 20 | 0 || 7839 | KING | PRESIDENT | NULL | 1981-11-17 00:00:00 | 5000 | NULL | 10 | 0 || 7876 | ADAMS | CLERK | 7788 | 1987-05-23 00:00:00 | 1100 | NULL | 20 | 0 || 8000 | 张三 | CLERK | 7782 | 1982-01-23 00:00:00 | 1300 | NULL | 10 | 0 |+-------+--------+-----------+------+---------------------+------+------+--------+------+14 rows in set (0.01 sec)


4. 小结
伴随着数据多元化、国产数据库的崛起,各种数据之间数据同步、转换、数仓构建等产生大量需求。
同步CC作为一款数据同步工具,多了一种选择,软件的成熟需千锤百炼,进一步在客户使用过程中打磨。

5. 参考
https://doc-cloudcanal.clougence.com/quick/quick_starthttps://www.askcug.com/topic/262/5%E5%88%86%E9%92%9F%E6%90%9E%E5%AE%9AORACLE-postgresql-oracle%E5%88%B0starrocks%E6%95%B0%E6%8D%AE%E8%BF%81%E7%A7%BB%E5%90%8C%E6%AD%A5-cloudcanal%E5%AE%9E%E6%88%98https://docs.starrocks.com/zh-cn/main/loading/CloudCanal_loading
旨在交流,不足之处,还望抛砖。
作者:王坤,微信公众号:rundba,欢迎转载,转载请注明出处。
如需公众号转发,请联系wx: landnow。





