【实操记录】Oracle数据整库同步至Apache Doris

本文是Oracle数据整库同步至Apache Doris实操记录,仅供参考

参考:https://cn.selectdb.com/blog/104

1、Oracle 配置

[root@node1 oracle]# pwd
/u01/app/oracle
[root@node1 oracle]# mkdir recovery_area
[root@node1 oracle]# chown -R oracle:dba recovery_area
SQL> conn sys/ as sysdba
输入口令: 
已连接。
SQL> alter system set db_recovery_file_dest_size = 2G;
系统已更改。
SQL> alter system set db_recovery_file_dest='/u01/app/oracle/recovery_area' scope=spfile;
系统已更改。
SQL> 

在这里插入图片描述

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。Total System Global Area 1068937216 bytes
Fixed Size                  2233344 bytes
Variable Size             624954368 bytes
Database Buffers          436207616 bytes
Redo Buffers                5541888 bytes
数据库装载完毕。
SQL> alter database archivelog;数据库已更改。SQL> alter database open;数据库已更改。SQL> archive log list;
数据库日志模式            存档模式
自动存档             启用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列     1
下一个存档日志序列   2
当前日志序列           2
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;数据库已更改。SQL> 

2、Oracle 数据

SQL> CREATE USER admin IDENTIFIED BY 123;用户已创建。SQL> GRANT dba TO admin;授权成功。SQL> quit;
[root@node1 ~]# sqlplus admin/123SQL*Plus: Release 11.2.0.2.0 Production on 星期三 6月 28 08:06:29 2023Copyright (c) 1982, 2011, Oracle.  All rights reserved.连接到: 
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL> 
CREATE TABLE t_person(ID NUMBER(10),NAME VARCHAR2(128) ,PRIMARY KEY(ID));
INSERT INTO t_person VALUES (1, 'zhangsan');
INSERT INTO t_person VALUES (2, 'lisi');
INSERT INTO t_person VALUES (3, 'wangwu');
CREATE TABLE t_dept(ID NUMBER(10),NAME VARCHAR2(128) ,PRIMARY KEY(ID));
INSERT INTO t_dept VALUES (1, 'HR');
INSERT INTO t_dept VALUES (2, 'IT');
commit;

3、启动Doris

[root@node1 doris-2.0]# fe/bin/start_fe.sh --daemon
[root@node1 doris-2.0]# be/bin/start_be.sh --daemon
[root@node1 doris-2.0]# jps
16081 DorisBE
14723 DorisFE
16158 Jps
[root@node1 doris-2.0]# 

4、启动Flink

下载相关jar,复制到flink的lib目录

[root@node1 flink-1.17.1]# ll lib
总用量 270772
-rw-r--r-- 1  501 games    196491 5月  19 06:56 flink-cep-1.17.1.jar
-rw-r--r-- 1  501 games    542620 5月  19 06:59 flink-connector-files-1.17.1.jar
-rw-r--r-- 1  501 games    102472 5月  19 07:02 flink-csv-1.17.1.jar
-rw-r--r-- 1  501 games 135975541 5月  19 07:13 flink-dist-1.17.1.jar
-rw-r--r-- 1 root root    8452171 6月  27 23:12 flink-doris-connector-1.17-1.4.0.jar
-rw-r--r-- 1  501 games    180248 5月  19 07:02 flink-json-1.17.1.jar
-rw-r--r-- 1  501 games  21043319 5月  19 07:12 flink-scala_2.12-1.17.1.jar
-rw-r--r-- 1 root root   28702667 6月  28 08:28 flink-sql-connector-oracle-cdc-2.4.1.jar
-rw-r--r-- 1  501 games  15407424 5月  19 07:13 flink-table-api-java-uber-1.17.1.jar
-rw-r--r-- 1  501 games  38191226 5月  19 07:08 flink-table-planner-loader-1.17.1.jar
-rw-r--r-- 1  501 games   3146210 5月  19 06:56 flink-table-runtime-1.17.1.jar
-rw-r--r-- 1  501 games    208006 5月  17 06:07 log4j-1.2-api-2.17.1.jar
-rw-r--r-- 1  501 games    301872 5月  17 06:07 log4j-api-2.17.1.jar
-rw-r--r-- 1  501 games   1790452 5月  17 06:07 log4j-core-2.17.1.jar
-rw-r--r-- 1  501 games     24279 5月  17 06:07 log4j-slf4j-impl-2.17.1.jar
[root@node1 flink-1.17.1]#

启动flink集群

[root@node1 flink-1.17.1]# bin/start-cluster.sh 
Starting cluster.
Starting standalonesession daemon on host node1.
Starting taskexecutor daemon on host node1.
[root@node1 flink-1.17.1]# jps
11755 StandaloneSessionClusterEntrypoint
12091 TaskManagerRunner
12190 Jps
[root@node1 flink-1.17.1]# 

5、测试同步操作

[root@node1 flink-1.17.1]# bin/flink run \
>     -Dexecution.checkpointing.interval=10s \
>     -Dparallelism.default=1 \
>     -c org.apache.doris.flink.tools.cdc.CdcTools \
>     lib/flink-doris-connector-1.17-1.4.0.jar \
>     oracle-sync-database \
>     --database test \
>     --oracle-conf hostname=node1 \
>     --oracle-conf port=1521 \
>     --oracle-conf username=admin \
>     --oracle-conf password=admin123 \
>     --oracle-conf database-name=XE \
>     --oracle-conf schema-name=ADMIN \
>     --including-tables "t_.*" \
>     --sink-conf fenodes=node1:8030 \
>     --sink-conf username=root \
>     --sink-conf password=123456\
>     --sink-conf jdbc-url=jdbc:mysql://node1:9030 \
>     --sink-conf sink.label-prefix=label \
>     --table-conf replication_num=1Unknown operation oracle-sync-database
[root@node1 flink-1.17.1]#

异常:Unknown operation oracle-sync-database
处理办法:
需要使用最新的 flink-doris-connector 包https://repository.apache.org/content/repositories/snapshots/org/apache/doris/

[root@node1 flink-1.17.1]# ll lib
-rw-r--r-- 1  501 games    196491 5月  19 06:56 flink-cep-1.17.1.jar
-rw-r--r-- 1  501 games    542620 5月  19 06:59 flink-connector-files-1.17.1.jar
-rw-r--r-- 1  501 games    102472 5月  19 07:02 flink-csv-1.17.1.jar
-rw-r--r-- 1  501 games 135975541 5月  19 07:13 flink-dist-1.17.1.jar
-rw-r--r-- 1 root root    8526699 9月  21 12:46 flink-doris-connector-1.17-1.5.0-20230915.034854-2.jar
-rw-r--r-- 1  501 games    180248 5月  19 07:02 flink-json-1.17.1.jar
-rw-r--r-- 1  501 games  21043319 5月  19 07:12 flink-scala_2.12-1.17.1.jar
-rw-r--r-- 1 root root   28702667 6月  28 08:28 flink-sql-connector-oracle-cdc-2.4.1.jar
-rw-r--r-- 1  501 games  15407424 5月  19 07:13 flink-table-api-java-uber-1.17.1.jar
-rw-r--r-- 1  501 games  38191226 5月  19 07:08 flink-table-planner-loader-1.17.1.jar
-rw-r--r-- 1  501 games   3146210 5月  19 06:56 flink-table-runtime-1.17.1.jar
-rw-r--r-- 1  501 games    208006 5月  17 06:07 log4j-1.2-api-2.17.1.jar
-rw-r--r-- 1  501 games    301872 5月  17 06:07 log4j-api-2.17.1.jar
-rw-r--r-- 1  501 games   1790452 5月  17 06:07 log4j-core-2.17.1.jar
-rw-r--r-- 1  501 games     24279 5月  17 06:07 log4j-slf4j-impl-2.17.1.jar

重新执行

[root@node1 flink-1.17.1]# bin/flink run \
>     -Dexecution.checkpointing.interval=10s \
>     -Dparallelism.default=1 \
>     -c org.apache.doris.flink.tools.cdc.CdcTools \
>     lib/flink-doris-connector-1.17-1.5.0-20230915.034854-2.jar \
>     oracle-sync-database \
>     --database test \
>     --oracle-conf hostname=node1 \
>     --oracle-conf port=1521 \
>     --oracle-conf username=admin \
>     --oracle-conf password=admin123 \
>     --oracle-conf database-name=XE \
>     --oracle-conf schema-name=ADMIN \
>     --including-tables "t_.*" \
>     --sink-conf fenodes=node1:8030 \
>     --sink-conf username=root \
>     --sink-conf password=123456\
>     --sink-conf jdbc-url=jdbc:mysql://node1:9030 \
>     --sink-conf sink.label-prefix=label \
>     --table-conf replication_num=1------------------------------------------------------------The program finished with the following exception:org.apache.flink.client.program.ProgramInvocationException: The main method caused an error: No tables to be synchronized.at org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:372)at org.apache.flink.client.program.PackagedProgram.invokeInteractiveModeForExecution(PackagedProgram.java:222)at org.apache.flink.client.ClientUtils.executeProgram(ClientUtils.java:105)at org.apache.flink.client.cli.CliFrontend.executeProgram(CliFrontend.java:851)at org.apache.flink.client.cli.CliFrontend.run(CliFrontend.java:245)at org.apache.flink.client.cli.CliFrontend.parseAndRun(CliFrontend.java:1095)at org.apache.flink.client.cli.CliFrontend.lambda$mainInternal$9(CliFrontend.java:1189)at org.apache.flink.runtime.security.contexts.NoOpSecurityContext.runSecured(NoOpSecurityContext.java:28)at org.apache.flink.client.cli.CliFrontend.mainInternal(CliFrontend.java:1189)at org.apache.flink.client.cli.CliFrontend.main(CliFrontend.java:1157)
Caused by: java.lang.IllegalStateException: No tables to be synchronized.at org.apache.flink.util.Preconditions.checkState(Preconditions.java:193)at org.apache.doris.flink.tools.cdc.DatabaseSync.build(DatabaseSync.java:101)at org.apache.doris.flink.tools.cdc.CdcTools.syncDatabase(CdcTools.java:116)at org.apache.doris.flink.tools.cdc.CdcTools.createOracleSyncDatabase(CdcTools.java:80)at org.apache.doris.flink.tools.cdc.CdcTools.main(CdcTools.java:53)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:355)... 9 more
[root@node1 flink-1.17.1]# 

报错:No tables to be synchronized
修改:--including-tables "T_.*"

[root@node1 flink-1.17.1]# bin/flink run \
>     -Dexecution.checkpointing.interval=10s \
>     -Dparallelism.default=1 \
>     -c org.apache.doris.flink.tools.cdc.CdcTools \
>     lib/flink-doris-connector-1.17-1.5.0-20230915.034854-2.jar \
>     oracle-sync-database \
>     --database test \
>     --oracle-conf hostname=node1 \
>     --oracle-conf port=1521 \
>     --oracle-conf username=admin \
>     --oracle-conf password=admin123 \
>     --oracle-conf database-name=XE \
>     --oracle-conf schema-name=ADMIN \
>     --including-tables "T_.*" \
>     --sink-conf fenodes=node1:8030 \
>     --sink-conf username=root \
>     --sink-conf password=123456\
>     --sink-conf jdbc-url=jdbc:mysql://node1:9030 \
>     --sink-conf sink.label-prefix=label \
>     --table-conf replication_num=1------------------------------------------------------------The program finished with the following exception:org.apache.flink.client.program.ProgramInvocationException: The main method caused an error: The following SQL query could not be executed: SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`;at org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:372)at org.apache.flink.client.program.PackagedProgram.invokeInteractiveModeForExecution(PackagedProgram.java:222)at org.apache.flink.client.ClientUtils.executeProgram(ClientUtils.java:105)at org.apache.flink.client.cli.CliFrontend.executeProgram(CliFrontend.java:851)at org.apache.flink.client.cli.CliFrontend.run(CliFrontend.java:245)at org.apache.flink.client.cli.CliFrontend.parseAndRun(CliFrontend.java:1095)at org.apache.flink.client.cli.CliFrontend.lambda$mainInternal$9(CliFrontend.java:1189)at org.apache.flink.runtime.security.contexts.NoOpSecurityContext.runSecured(NoOpSecurityContext.java:28)at org.apache.flink.client.cli.CliFrontend.mainInternal(CliFrontend.java:1189)at org.apache.flink.client.cli.CliFrontend.main(CliFrontend.java:1157)
Caused by: org.apache.doris.flink.exception.DorisSystemException: The following SQL query could not be executed: SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`;at org.apache.doris.flink.catalog.doris.DorisSystem.extractColumnValuesBySQL(DorisSystem.java:137)at org.apache.doris.flink.catalog.doris.DorisSystem.listDatabases(DorisSystem.java:59)at org.apache.doris.flink.catalog.doris.DorisSystem.databaseExists(DorisSystem.java:67)at org.apache.doris.flink.tools.cdc.DatabaseSync.build(DatabaseSync.java:102)at org.apache.doris.flink.tools.cdc.CdcTools.syncDatabase(CdcTools.java:116)at org.apache.doris.flink.tools.cdc.CdcTools.createOracleSyncDatabase(CdcTools.java:80)at org.apache.doris.flink.tools.cdc.CdcTools.main(CdcTools.java:53)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:355)... 9 more
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driverat java.net.URLClassLoader.findClass(URLClassLoader.java:382)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at org.apache.flink.util.FlinkUserCodeClassLoader.loadClassWithoutExceptionHandling(FlinkUserCodeClassLoader.java:67)at org.apache.flink.util.ChildFirstClassLoader.loadClassWithoutExceptionHandling(ChildFirstClassLoader.java:74)at org.apache.flink.util.FlinkUserCodeClassLoader.loadClass(FlinkUserCodeClassLoader.java:51)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)at java.lang.Class.forName0(Native Method)at java.lang.Class.forName(Class.java:264)at org.apache.doris.flink.connection.SimpleJdbcConnectionProvider.getOrEstablishConnection(SimpleJdbcConnectionProvider.java:52)at org.apache.doris.flink.catalog.doris.DorisSystem.extractColumnValuesBySQL(DorisSystem.java:121)... 20 more
[root@node1 flink-1.17.1]# 

缺少mysql驱动,flink的lib目录添加mysql-connector-java-5.1.49.jar

[root@node1 flink-1.17.1]# bin/flink run \
>     -Dexecution.checkpointing.interval=10s \
>     -Dparallelism.default=1 \
>     -c org.apache.doris.flink.tools.cdc.CdcTools \
>     lib/flink-doris-connector-1.17-1.5.0-20230915.034854-2.jar \
>     oracle-sync-database \
>     --database test \
>     --oracle-conf hostname=node1 \
>     --oracle-conf port=1521 \
>     --oracle-conf username=admin \
>     --oracle-conf password=admin123 \
>     --oracle-conf database-name=XE \
>     --oracle-conf schema-name=ADMIN \
>     --including-tables "T_.*" \
>     --sink-conf fenodes=node1:8030 \
>     --sink-conf username=root \
>     --sink-conf password=123456\
>     --sink-conf jdbc-url=jdbc:mysql://node1:9030 \
>     --sink-conf sink.label-prefix=label \
>     --table-conf replication_num=1Thu Sep 21 13:06:59 EDT 2023 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Job has been submitted with JobID fd244bcb10f06e5aa801d2708441bb86

登录Doris查看同步效果

[root@node1 doris-2.0]# mysql -h192.168.203.101 -P9030 -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.99 Doris version doris-2.0.1.1-ea0bfb2Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| T_DEPT         |
| T_PERSON       |
+----------------+
2 rows in set (0.00 sec)mysql> select * from T_PERSON;
Empty set (0.29 sec)mysql> select * from T_DEPT;
Empty set (0.06 sec)

6、同步成功

bin/flink run \-Dexecution.checkpointing.interval=10s \-Dparallelism.default=1 \-c org.apache.doris.flink.tools.cdc.CdcTools \lib/flink-doris-connector-1.17-1.5.0-20230915.034854-2.jar \oracle-sync-database \--database test \--oracle-conf hostname=node1 \--oracle-conf port=1521 \--oracle-conf username=admin \--oracle-conf password=123 \--oracle-conf database-name=XE \--oracle-conf schema-name=ADMIN \--including-tables "T_.*" \--sink-conf fenodes=node1:8030 \--sink-conf username=root \--sink-conf password=123456\--sink-conf jdbc-url=jdbc:mysql://node1:9030 \--sink-conf sink.label-prefix=label \--table-conf replication_num=1

在这里插入图片描述

在这里插入图片描述
查看Flink中运行的Job http://192.168.203.101:8081/
在这里插入图片描述

7、测试新增记录同步

SQL> INSERT INTO t_person VALUES (4, 'test_user');已创建 1 行。SQL> INSERT INTO t_dept VALUES (3, 'CS');已创建 1 行。SQL> commit;提交完成。SQL> 

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/125697.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AndroidStudio精品插件集

官网 项目地址:Github博客地址:Studio 精品插件推荐 使用需知 所有插件在 Android Studio 2022.3.1.18(长颈鹿)上测试均没有问题,推荐使用此版本Android Studio 2022.3.1.18(长颈鹿)正式版下…

卷积神经网络-池化层和激活层

2.池化层 根据特征图上的局部统计信息进行下采样,在保留有用信息的同时减少特征图的大小。和卷积层不同的是,池化层不包含需要学习的参数。最大池化(max-pooling)在一个局部区域选最大值作为输出,而平均池化(average pooling)计算一个局部区…

人机关系不是物理关系也不是数理关系

人机关系是一种复杂的社会技术系统,涉及到人类和机器、环境之间的相互作用和影响。它不仅限于物理接触和数理规律,同时还包括了思维、情感、意愿等方面的交流和互动。在人机关系中,人类作为使用者和机器作为工具(将来可能会上升到…

Windows下使用VS2010编译出带pdb可调试的FFmpeg库

本人主要在windows环境下开发,Linux下的gpb调试工具又不如vs调试方便(使用过其他调试工具才知道,vs果真为宇宙最强调试工具),所以决定在windows编译可以调试FFmpeg,以方便调试和学习FFmpeg内部代码。 有过在…

C#,数值计算——完全VEGAS编码的蒙特·卡洛计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Complete VEGAS Code /// adaptive/recursive Monte Carlo /// </summary> public abstract class VEGAS { const int NDMX 50; const int …

基于微信小程序的付费自习室

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2 技术栈3 需求分析3.1用户需求分析3.1.1 学生用户3.1.3 管理员用户 4 数据库设计4.4.1 E…

【C++】一文带你走入vector

文章目录 一、vector的介绍二、vector的常用接口说明2.1 vector的使用2.2 vector iterator的使用2.3 vector空间增长问题2.4 vector 增删查改 三、总结 ヾ(๑╹◡╹)&#xff89;" 人总要为过去的懒惰而付出代价ヾ(๑╹◡╹)&#xff89;" 一、vector的介绍 vector…

【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门

大家在日常开发中应该能发现&#xff0c;单表的CRUD功能代码重复度很高&#xff0c;也没有什么难度。而这部分代码量往往比较大&#xff0c;开发起来比较费时。 因此&#xff0c;目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国内使用较多的一个组件就是…

【VUE·疑难问题】定义 table 中每行的高度(使用 element-UI)

一、如何定义 table 中每一行的 height &#xff1f; 1.table例子 <!-- 二、table --><div style"overflow: hidden;display: block;height: 68vh;width: 100%;"><el-table stripe show-header style"width: 100%" :data"tableData&q…

代码随想录Day12 二叉树 LeetCode T102二叉树的层序遍历 T226 翻转二叉树 T101 对称二叉树

本文思路和详细讲解来自于:代码随想录 (programmercarl.com) LeetCode T102 二叉树的层序遍历 题目链接:102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 题目思路: 本题使用队列辅助完成,讲解主要函数CheckOrder:首先判断root是否为空,是就直接返回,然后创建…

互联网Java工程师面试题·Elasticsearch 篇·第一弹

目录 1、elasticsearch 了解多少&#xff0c;说说你们公司 es 的集群架构&#xff0c;索引数据大小&#xff0c;分片有多少&#xff0c;以及一些调优手段 。 1.1 设计阶段调优 1.2 写入调优 1.3 查询调优 1.4 其他调优 2、elasticsearch 的倒排索引是什么 3、elastic…

安卓教材学习

文章目录 教材学习第一行代码 Android 第3版环境配置gradle配置下载包出现问题 教材学习 摘要&#xff1a;选了几本教材《第一行代码 Android 第3版》&#xff0c;记录一下跑案例遇到的问题&#xff0c;和总结一些内容。 第一行代码 Android 第3版 环境配置 gradle配置 gradl…