Tapdata 数据同步
🌲 前言
最近新接触了一个数据同步的产品:Tapdata Cloud 。
Tapdata Cloud 是由 Tapdata 提供的集数据同步、数据融合(即将上线)、数据服务(即将上线)为一体的实时数据融合服务,能够在跨云、跨地域、多类型数据源的场景下,提供毫秒级的实时数据同步服务和数据融合服务。
官网地址:https://cloud.tapdata.net/
本文主要演示通过 Tapdata Cloud 来进行 Oracle 数据同步。ヾ(◍°∇°◍)ノ゙
☀️ 环境准备
Tapdata 部署支持 Windows64,Linux64,docker 三种环境;本文使用 Linux64 环境进行同步测试。
💻 Linux 环境部署
使用 Vagrant 快速部署环境,想玩的朋友可以参考:保姆级教程:Vagrant 从入门到超神玩法
☀️ 顺便分享一下 Vagrant 安装 Oracle 数据库系列:
Vagrant安装Oracle系列
1、添加 Vagrant box
使用 Vagrant 快速部署一套 Linux 环境,主机版本 Centos7.9。#### 2、 初始化 启动 Linux 主机
通过新添加的 box 初始化 Vagrantfile:
Vagrant 启动主机:

3、Vagrant 连接主机
通过 vagrant ssh 连接已成功部署的 Centos 环境:

修改 root 用户密码:
修改玩 root 密码后,通过 su -
切换
到 root 用户。
🌩 Tapdata Agent 本地部署
❤️ 为什么要部署 Tapdata Agent 到本地环境?❤️
Tapdata Agent是数据同步、数据异构、数据开发场景中的关键程序。以上场景对数据的流转有着极高的实时性要求,因此,通过下载Tapdata Agent并将其部署在你的本地环境,基于低延迟的本地网络,Tapdata Agent能够发挥最大性能以确保数据流转的实时性。
1、安装 Java 环境
Tapdata Agent 的运行依赖本地 Java 环境,因此,在部署前你需要检查本地否已经安装java环境,例如在命令行中使用下方命令:
1 2 3 4 5
| java -version
AI写代码bash
* 1
|
如图 java -version 返回异常,则说明java环境可能未安装,可参考下方的命令为本地安装java环境(本提示中的openjdk版本仅用于示例):
1 2 3 4 5
| yum -y install java-1.8.0-openjdk
AI写代码bash
* 1
|
在本地java环境安装完毕后,即可开始下载Tapdata Agent。
2、下载 Tapdata Agent 并部署
安装前请确认您的部署环境中已安装Java1.8版本并正确配置环境变量。
Tapdata Agent 下载界面:https://cloud.tapdata.net/console/#/fastDownload
下载 Tapdata Agent ,官方非常建议在一个独立、干净的文件夹内部署 Tapdata Agent :
1 2 3 4 5 6 7 8 9 10 11
| #通过wget下载Tapdata Agent至本地环境 mkdir /tapdata cd /tapdata wget "https://resource.tapdata.net/package/feagent/dfs-1.0.4-prod/tapdata"
AI写代码bash
|

下载、部署 Tapdata Agent 无需 root 权限,只需要对部署目录具备读写权限即可,因此创建 tapdata 用户:
1 2 3 4 5 6 7
| groupadd tapdata useradd -g tapdata tapdata
AI写代码bash
* 1 * 2
|
授权用户 tabpdata 访问目录 /tapdata 权限:
1 2 3 4 5 6 7
| chown -R tapdata:tapdata /tapdata chmod +x /tapdata/tapdata
AI写代码bash
* 1 * 2
|

切换到 tapdata 用户,开始安装部署 tapdata :
1 2 3 4 5 6 7 8 9
| su - tapdata cd /tapdata ./tapdata start backend --downloadUrl https://resource.tapdata.net/package/feagent/dfs-1.0.4-prod/ --token a/HZzXh5MDbwPGd8hCzZYYF0XXgDZ287oY34Sx3QAq5Z7zikkMRcI62kZHXq8RRJj6VrJcSY6ehw4iM8d8LW1YDkAXDfFv6XW/comFuRjivUKI0bU2CJbyb9YX2hukWTYG7rnIlkqV6c1QG//tczPtDt4Bvjy5eqwShMLprhyrzjDysD0Zqfag0tfN0rKB8YbGn87/61rWjizqFuByrG+V2RQCKmccHqWLwjAKLeMEYFUW6imRIHTrEHFQ9u5qDEDB4xza6Nz+ZeDgwNTHYQAChlL1rg+2B6g8C55dTKdQvOTiumURSbnY3Z8IURjYOw4INb5NmhUFvlcceX6OMguQVMrKfiV2vYzpSAcFKB+3KGJVj71tKGRxaSuZI5AINPxECZg+kgE2vUTMhFwZ9I2oPLDGntSWSnYp2MVqUnTNq446ikmUIuEsTTPhsiTcHO2/8oniGzy4gMGvSmofZI2w==
AI写代码bash
* 1 * 2 * 3
|

待上方命令执行完毕后,出现如图所示日志则代表Agent启动成功。
3、Tapdata Agent 管理命令
在本地对 Tapdata Agent 进行管理,建议设置 /tapdata 环境变量:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| cat <<EOF>~/.bash_profile export TAPDATA_HOME=/tapdata export PATH=$TAPDATA_HOME:$PATH EOF
source ~/.bash_profile
AI写代码bash
* 1 * 2 * 3 * 4 * 5 * 6
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #关闭 Tapdata Agent tapdata stop
#启动 Tapdata Agent tapdata start
#查看 Tapdata Agent 状态 tapdata status
AI写代码bash
* 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8
|
Tapdata Agent本地目录结构及功能简介:

至此,Tapdata 环境准备已经完成。🎉
🔆 Oracle 环境部署
同样使用 Vagrant 安装两套 Linux 主机环境,使用 Oracle 一键安装脚本 安装数据库:
1、部署 oracle11g 主机
创建安装目录并上传安装介质:
1 2 3 4 5 6 7 8 9
| mkdir oracle11g mkdir oracle12c mkdir software
AI写代码bash
|

⭐️ 安装介质获取方式:Oracle安装包,Oracle一键安装脚本。
3、配置 Shell 脚本
分别进入 oracle11g 和 oracle12c 目录下,创建 scripts 目录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| mkdir scripts cat <<EOF>ora_preinstall.sh #change root password echo oracle | passwd --stdin root #change sshd_config sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config systemctl reload sshd.service #mkdir software dir mkdir /soft #cp software to softdir cp /vagrant/* /soft #chmod shell script chmod +x /soft/OracleShellInstall.sh #install oracle database cd /soft ./OracleShellInstall.sh -i 192.168.1.140 -installmode single -dbv 11g -iso N EOF
AI写代码bash
* 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13 * 14 * 15 * 16 * 17
|
需要注意 -dbv 和 -i 参数,需要根据实际情况修改,12C 需要修改为对应 12c。
3、配置 Vagrantfile 脚本
Oracle 11G:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| cd oracle11g cat <<EOF>Vagrantfile Vagrant.configure("2") do |config| config.vm.box = "centos79" config.vm.provision :shell, path: "/Volumes/DBA/vagrant/oracle11g/scripts/ora_preinstall.sh" config.vm.synced_folder "/Volumes/DBA/vagrant/software", "/vagrant" config.vm.network :forwarded_port, guest: 1521, host: 1521 config.vm.network :forwarded_port, guest: 22, host: 22 config.vm.network "public_network", ip: "192.168.1.140" config.vm.provider "virtualbox" do |vb| vb.name = "orcl11g" vb.memory = 2048 vb.cpus = 2 end end EOF
AI写代码bash
|
Oracle 12C:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| cd oracle12c cat <<EOF>Vagrantfile Vagrant.configure("2") do |config| config.vm.box = "centos79" config.vm.provision :shell, path: "/Volumes/DBA/vagrant/oracle12c/scripts/ora_preinstall.sh" config.vm.synced_folder "/Volumes/DBA/vagrant/software", "/vagrant" config.vm.network :forwarded_port, guest: 1521, host: 1522 config.vm.network :forwarded_port, guest: 22, host: 23 config.vm.network "public_network", ip: "192.168.1.150" config.vm.provider "virtualbox" do |vb| vb.name = "orcl12c" vb.memory = 2048 vb.cpus = 2 end end EOF
AI写代码bash
|
4、启动部署 Oracle 数据库
1 2 3 4 5 6 7 8 9 10 11
| cd oracle11g vagrant up --provider=virtualbox cd oracle12c vagrant up --provider=virtualbox
AI写代码bash
|
5、Oracle 11G+12C 创建测试数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| create user tapdata identified by tapdata; grant dba to tapdata; conn tapdata/tapdata; create table tapdata (id number,name varchar(100)); insert into tapdata values (1,'lucifer'); insert into tapdata values (2,'lucifer1'); insert into tapdata values (3,'lucifer2'); commit;
AI写代码sql
* 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8
|
❤️ 想了解的朋友可参考:❤️
💛 数据同步 Oracle 11GR2 –> 12C
⚡️ 数据同步介绍
工作原理:
数据同步功能是 Tapdata 数据中台的重要功能,同时也是 Tapdata 的核心优势。如上图所示,在两个数据存储节点中,Tapdata Agent 作为处理的桥梁,在用户简单设置后即可全自动的将数据从一个节点中读取(源端),并写入至另一个节点(目标端)。在整个过程中,Tapdata Agent 仅作为数据的处理层确保处理的流程符合用户的预期,Tapdata Agent 不会对用户数据做任何形式的上传、保存。
接入、同步、异构:
在数据同步功能中,Tapdata 中台支持多种数据存储的接入,其不仅支持同类型数据存储(如 MySQL 到MySQL,Oracle 到Oracle)之间的数据同步,同时也支持不同类型数据存储(如 Oracle 到 MySQL,MySQL 到 MongoDB)之间以异构方式进行数据同步。
任务类型:
基于Tapdata Agent的可配置性,其支持全量同步、全量及增量两种任务类型。用户可根据对应的数据场景选择对应的同步模式来满足需求。如全量同步适合一次性的数据迁移、异构场景,而全量及增量同步则适合实时的数据迁移、异构场景。

❤️ ORACLE 配置 Tapdata(源端+目标端)
确保在 Tapdata 中成功添加和使用Oracle数据库,注意:Oracle 实时同步基于Oracle Redo Log,因此需要提前执行某些配置。
1、开启归档日志
以具有 DBA 权限的用户身份登录数据库
1 2 3 4 5
| sqlplus / as sysdba
AI写代码bash
|
查看数据库的 logging mode
1 2 3 4 5
| select log_mode from v$database;
AI写代码sql
* 1
|

如果返回的结果是 NOARCHIVELOG , 继续按照以下步骤操作:
关闭数据库:
1 2 3 4 5
| shutdown immediate;
AI写代码sql
* 1
|

启动并挂载数据库:
1 2 3 4 5
| startup mount
AI写代码sql
* 1
|
开启归档模式并打开数据库:
1 2 3 4 5 6 7
| alter database archivelog; alter database open;
AI写代码sql
* 1 * 2
|

2、开启 Supplemental Logging
11G:
1 2 3 4 5 6 7 8 9 10 11 12 13
| alter database add supplemental log data; alter system switch logfile; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS; SELECT supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_all FROM v$database;
AI写代码sql
* 1 * 2 * 3 * 4 * 5
|

12C:
1 2 3 4 5 6 7 8 9 10 11
| ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS; ALTER SYSTEM SWITCH LOGFILE; SELECT supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_all FROM v$database;
AI写代码sql
* 1 * 2 * 3 * 4
|
3、创建用户账号
创建用户帐户并分配权限:
1 2 3 4 5 6 7 8 9
|
GRANT create session, alter session, execute_catalog_role, select any dictionary, select any transaction, select any table, create any table, create any index, unlimited tablespace to tapdata;
AI写代码sql
* 1 * 2 * 3
|
至此,已配置完 Oracle 11G 源端数据库。
☀️ Tapdata Cloud 连接 Oracle 11G+12C
首先需要打开 Tapdata Cloud 控制台。
1、创建连接

2、选择 Oracle
3、填写关键信息
根据提示填写信息,具体可参考:Oracle 创建连接

注意:这里的 Schema 值需要大写!
4、测试连接
测试连接是否成功,具体可参考:Oracel 的连接测试与常见问题
以同样的方式添加 Oracle 12C ,添加成功后显示如下:
🌀 创建同步任务
创建好连接之后,需要创建任务来配置进行数据同步。
1、创建任务
配置源端和目标端连接,选择上一步中新建的连接:
2、配置任务
设置任务,本次选择 全量+增量 类型,全量写入模式:

3、选择同步表
这里选择需要同步的表,添加到目标端:

同时还支持 改名 和 字段映射:

点击完成按钮,即可。如果点击没有反应,可以尝试退回上一步,再回来点击完成。
4、启动任务
点击完成后,任务状态为 待启动,可以通过启动任务来开始:

先去目标端 Oracle 12C 查询表 Lucifer 是否存在:
1 2 3 4 5
| select * from lucifer;
AI写代码sql
* 1
|
确认没有表 Lucifer,启动任务:

5、运行监控
点击 运行监控 可以看到同步情:

6、报错处理
可以看到,这里报错了,看了一下日志记录:
由于我之前创建表时,没有创建主键,咨询官方之后,确认必须需要表带主键才可以,因此,新增表主键:
1 2 3 4 5 6 7
| alter table lucifer add constraint tb_lucifer_pk primary key (id); alter table tapdata add constraint tb_tapdata_pk primary key (id);
AI写代码sql
* 1 * 2
|
新增表主键之后,需要重新加载数据源,即连接管理那里连接测试即可。
回到运行监控页面,重置之后重新同步:
重置 即清除进度,回到最初,然后点击启动即可。
7、同步测试
连接 Oracle 12C 目标端,查询 Lucifer 表的数据:

发现数据已经同步成功。
测试源端 Oracle 11G 写入数据之后,目标端是否同步:
源端:
1 2 3 4 5 6 7 8 9 10 11 12 13
| insert into tapdata values (17,'haha'); insert into lucifer values (26,'hah1a'); delete from tapdata where id=1; delete from lucifer where id=2; commit;
AI写代码sql
* 1 * 2 * 3 * 4 * 5
|
目标端:
1 2 3 4 5 6 7
| select * from lucifer; select * from tapdata;
AI写代码sql
* 1 * 2
|

查看监控页面,可以发现源端的操作记录均已同步:
❤️ 至此,Oracle 不同版本间的实时数据同步测试已经完成。
🌊 写在最后
首先,给 Tapdata 的文档点赞一波,写的真的很详细易懂!
本文从无到有地展示了所有环境的安装部署,数据同步的完整步骤以及一些需要注意的事项,可以说是尽善尽美了。之后,应该还会写异构数据库之间的同步教程。
总体体验来说,Tapdata Cloud 在安装部署和使用方面,大大降低了技术难度,相较于其他一些数据同步产品,在入门体验上更好。关于实时同步的效率,由于没有实测生产,不做过多的评价。
感兴趣的朋友可以多多测试,希望 Tapdata 能够越做越好!同时还可以参加 Tapdata 的新活动:推荐 | 异构数据库同步云平台 Tapdata Cloud 开启有奖公测,❤️ 奖品确实很丰厚!