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

2023-10-07 01:15

本文主要是介绍【实操记录】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> 

在这里插入图片描述

在这里插入图片描述

这篇关于【实操记录】Oracle数据整库同步至Apache Doris的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio