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

0139.C 使用CloudCanal实时同步ORACLE数据到StarRocks中

rundba 2022-02-26
2820



使用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 sysdba


SQL*Plus: Release 19.0.0.0.0 - orcluction on Tue Feb 22 21:47:52 2022
Version 19.3.0.0.0


Copyright (c) 1982, 2019, Oracle. All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - orcluction
Version 19.3.0.0.0


SQL> alter database add supplemental log data;


Database altered.


2) 创建scott 用户

SQL> @?/rdbms/admin/utlsampl.sql
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - orcluction
Version 19.3.0.0.0


3) 给scott用户赋予dba角色

SQL> grant dba to scott;


Grant succeeded.



4) 验证数据记录数

SQL> conn scott/tiger
Connected.
SQL> select tname from tab;


TNAME
--------------------------------------------------------------------------------
DEPT
EMP
BONUS
SALGRADE


SQL> select count(1) from DEPT;


COUNT(1)
----------
4


SQL> select count(1) from EMP;


COUNT(1)
----------
14


SQL> select count(1) from BONUS;


COUNT(1)
----------
0


SQL> 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 changed
mysql> 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 10
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10


15 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 10
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7902 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_start
https://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%98
https://docs.starrocks.com/zh-cn/main/loading/CloudCanal_loading


- 完 -



旨在交流,不足之处,还望抛砖。

作者:王坤,微信公众号:rundba,欢迎转载,转载请注明出处。

如需公众号转发,请联系wx: landnow。




 






                             长按二维码                                   


欢迎加入>>国产DB学习交流群


       

   请注明:来自rundba,加入国产DB学习交流群                

             




文章转载自rundba,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论