🌲 前言
最近新接觸了一個數(shù)據(jù)同步的產(chǎn)品:Tapdata Cloud
。
Tapdata Cloud 是由 Tapdata 提供的集數(shù)據(jù)同步、數(shù)據(jù)融合(即將上線)、數(shù)據(jù)服務(即將上線)為一體的實時數(shù)據(jù)融合服務,能夠在跨云、跨地域、多類型數(shù)據(jù)源的場景下,提供毫秒級的實時數(shù)據(jù)同步服務和數(shù)據(jù)融合服務。
官網(wǎng)地址:https://cloud./
本文主要演示通過 Tapdata Cloud 來進行 Oracle 數(shù)據(jù)同步。ヾ(?°?°?)ノ゙
?? 環(huán)境準備
Tapdata 部署支持 Windows64
,Linux64
,docker
三種環(huán)境;本文使用 Linux64
環(huán)境進行同步測試。
💻 Linux 環(huán)境部署
使用 Vagrant 快速部署環(huán)境,想玩的朋友可以參考:保姆級教程:Vagrant 從入門到超神玩法
?? 順便分享一下 Vagrant 安裝 Oracle 數(shù)據(jù)庫系列:
Vagrant安裝Oracle系列
1、添加 Vagrant box
使用 Vagrant 快速部署一套 Linux 環(huán)境,主機版本 Centos7.9
。
2、初始化啟動 Linux 主機
通過新添加的 box 初始化 Vagrantfile:

Vagrant 啟動主機:

3、Vagrant 連接主機
通過 vagrant ssh
連接已成功部署的 Centos 環(huán)境:

修改 root 用戶密碼:

修改玩 root 密碼后,通過 su -
切換到 root 用戶。
🌩 Tapdata Agent 本地部署
?? 為什么要部署 Tapdata Agent 到本地環(huán)境???
Tapdata Agent是數(shù)據(jù)同步、數(shù)據(jù)異構(gòu)、數(shù)據(jù)開發(fā)場景中的關(guān)鍵程序。以上場景對數(shù)據(jù)的流轉(zhuǎn)有著極高的實時性要求,因此,通過下載Tapdata Agent并將其部署在你的本地環(huán)境,基于低延遲的本地網(wǎng)絡,Tapdata Agent能夠發(fā)揮最大性能以確保數(shù)據(jù)流轉(zhuǎn)的實時性。
1、安裝 Java 環(huán)境
Tapdata Agent 的運行依賴本地 Java 環(huán)境,因此,在部署前你需要檢查本地否已經(jīng)安裝java環(huán)境,例如在命令行中使用下方命令:
java -version

如圖 java -version
返回異常,則說明java環(huán)境可能未安裝,可參考下方的命令為本地安裝java環(huán)境(本提示中的openjdk版本僅用于示例):
yum -y install java-1.8.0-openjdk

在本地java環(huán)境安裝完畢后,即可開始下載Tapdata Agent。
2、下載 Tapdata Agent 并部署
安裝前請確認您的部署環(huán)境中已安裝Java1.8版本并正確配置環(huán)境變量。
Tapdata Agent 下載界面:https://cloud./console/#/fastDownload

下載 Tapdata Agent ,官方非常建議在一個獨立、干凈的文件夾內(nèi)部署 Tapdata Agent
:
#通過wget下載Tapdata Agent至本地環(huán)境
mkdir /tapdata
cd /tapdata
wget "https://resource./package/feagent/dfs-1.0.4-prod/tapdata"

下載、部署 Tapdata Agent 無需 root 權(quán)限,只需要對部署目錄具備讀寫權(quán)限即可,因此創(chuàng)建 tapdata 用戶:
groupadd tapdata
useradd -g tapdata tapdata

授權(quán)用戶 tabpdata
訪問目錄 /tapdata
權(quán)限:
chown -R tapdata:tapdata /tapdata
chmod +x /tapdata/tapdata

切換到 tapdata 用戶,開始安裝部署 tapdata :
su - tapdata
cd /tapdata
./tapdata start backend --downloadUrl https://resource./package/feagent/dfs-1.0.4-prod/ --token a/HZzXh5MDbwPGd8hCzZYYF0XXgDZ287oY34Sx3QAq5Z7zikkMRcI62kZHXq8RRJj6VrJcSY6ehw4iM8d8LW1YDkAXDfFv6XW/comFuRjivUKI0bU2CJbyb9YX2hukWTYG7rnIlkqV6c1QG//tczPtDt4Bvjy5eqwShMLprhyrzjDysD0Zqfag0tfN0rKB8YbGn87/61rWjizqFuByrG+V2RQCKmccHqWLwjAKLeMEYFUW6imRIHTrEHFQ9u5qDEDB4xza6Nz+ZeDgwNTHYQAChlL1rg+2B6g8C55dTKdQvOTiumURSbnY3Z8IURjYOw4INb5NmhUFvlcceX6OMguQVMrKfiV2vYzpSAcFKB+3KGJVj71tKGRxaSuZI5AINPxECZg+kgE2vUTMhFwZ9I2oPLDGntSWSnYp2MVqUnTNq446ikmUIuEsTTPhsiTcHO2/8oniGzy4gMGvSmofZI2w==

待上方命令執(zhí)行完畢后,出現(xiàn)如圖所示日志則代表Agent啟動成功。
3、Tapdata Agent 管理命令
在本地對 Tapdata Agent 進行管理,建議設置 /tapdata 環(huán)境變量:
cat <<EOF>~/.bash_profile
export TAPDATA_HOME=/tapdata
export PATH=$TAPDATA_HOME:$PATH
EOF
source ~/.bash_profile

#關(guān)閉 Tapdata Agent
tapdata stop
#啟動 Tapdata Agent
tapdata start
#查看 Tapdata Agent 狀態(tài)
tapdata status

Tapdata Agent本地目錄結(jié)構(gòu)及功能簡介:

至此,Tapdata 環(huán)境準備已經(jīng)完成。🎉
🔆 Oracle 環(huán)境部署
同樣使用 Vagrant
安裝兩套 Linux 主機環(huán)境,使用 Oracle 一鍵安裝腳本
安裝數(shù)據(jù)庫:
1、部署 oracle11g 主機
創(chuàng)建安裝目錄并上傳安裝介質(zhì):
mkdir oracle11g
mkdir oracle12c
mkdir software

?? 安裝介質(zhì)獲取方式:Oracle安裝包,Oracle一鍵安裝腳本。
3、配置 Shell 腳本
分別進入 oracle11g
和 oracle12c
目錄下,創(chuàng)建 scripts
目錄:
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
需要注意 -dbv
和 -i
參數(shù),需要根據(jù)實際情況修改,12C 需要修改為對應 12c。
3、配置 Vagrantfile 腳本
Oracle 11G:
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
Oracle 12C:
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
4、啟動部署 Oracle 數(shù)據(jù)庫
cd oracle11g
vagrant up --provider=virtualbox
cd oracle12c
vagrant up --provider=virtualbox



5、Oracle 11G+12C 創(chuàng)建測試數(shù)據(jù)
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;

?? 想了解的朋友可參考:??
- Vagrant 一鍵搞定 Oracle 數(shù)據(jù)庫安裝
- 我寫了4000多行Shell腳本,終于實現(xiàn)了一鍵安裝Oracle RAC!!!
💛 數(shù)據(jù)同步 Oracle 11GR2 --> 12C
?? 數(shù)據(jù)同步介紹
工作原理:

數(shù)據(jù)同步功能是 Tapdata 數(shù)據(jù)中臺的重要功能,同時也是 Tapdata 的核心優(yōu)勢。如上圖所示,在兩個數(shù)據(jù)存儲節(jié)點中,Tapdata Agent 作為處理的橋梁,在用戶簡單設置后即可全自動的將數(shù)據(jù)從一個節(jié)點中讀取(源端),并寫入至另一個節(jié)點(目標端)。在整個過程中,Tapdata Agent 僅作為數(shù)據(jù)的處理層確保處理的流程符合用戶的預期,Tapdata Agent 不會對用戶數(shù)據(jù)做任何形式的上傳、保存。
接入、同步、異構(gòu):
在數(shù)據(jù)同步功能中,Tapdata 中臺支持多種數(shù)據(jù)存儲的接入,其不僅支持同類型數(shù)據(jù)存儲(如 MySQL 到MySQL,Oracle 到Oracle)之間的數(shù)據(jù)同步,同時也支持不同類型數(shù)據(jù)存儲(如 Oracle 到 MySQL,MySQL 到 MongoDB)之間以異構(gòu)方式進行數(shù)據(jù)同步。
任務類型:
基于Tapdata Agent的可配置性,其支持全量同步、全量及增量兩種任務類型。用戶可根據(jù)對應的數(shù)據(jù)場景選擇對應的同步模式來滿足需求。如全量同步適合一次性的數(shù)據(jù)遷移、異構(gòu)場景,而全量及增量同步則適合實時的數(shù)據(jù)遷移、異構(gòu)場景。

?? ORACLE 配置 Tapdata(源端+目標端)
確保在 Tapdata 中成功添加和使用Oracle數(shù)據(jù)庫,注意:Oracle 實時同步基于Oracle Redo Log,因此需要提前執(zhí)行某些配置。
1、開啟歸檔日志
以具有 DBA 權(quán)限的用戶身份登錄數(shù)據(jù)庫
sqlplus / as sysdba
查看數(shù)據(jù)庫的 logging mode
select log_mode from v$database;

如果返回的結(jié)果是 NOARCHIVELOG , 繼續(xù)按照以下步驟操作:
關(guān)閉數(shù)據(jù)庫:
shutdown immediate;

啟動并掛載數(shù)據(jù)庫:
startup mount;

開啟歸檔模式并打開數(shù)據(jù)庫:
alter database archivelog;
alter database open;

2、開啟 Supplemental Logging
11G:
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;


12C:
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;

3、創(chuàng)建用戶賬號
創(chuàng)建用戶帳戶并分配權(quán)限:
--前面已經(jīng)創(chuàng)建,這里不再創(chuàng)建用戶
--CREATE USER tapdata IDENTIFIED BY tapdata;
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;

至此,已配置完 Oracle 11G 源端數(shù)據(jù)庫。
?? Tapdata Cloud 連接 Oracle 11G+12C
首先需要打開 Tapdata Cloud 控制臺。
1、創(chuàng)建連接

2、選擇 Oracle

3、填寫關(guān)鍵信息
根據(jù)提示填寫信息,具體可參考:Oracle 創(chuàng)建連接

注意:這里的 Schema
值需要大寫!
4、測試連接
測試連接是否成功,具體可參考:Oracel 的連接測試與常見問題

以同樣的方式添加 Oracle 12C ,添加成功后顯示如下:

🌀 創(chuàng)建同步任務
創(chuàng)建好連接之后,需要創(chuàng)建任務來配置進行數(shù)據(jù)同步。
1、創(chuàng)建任務
配置源端和目標端連接,選擇上一步中新建的連接:

2、配置任務
設置任務,本次選擇 全量+增量
類型,全量寫入模式
:

3、選擇同步表
這里選擇需要同步的表,添加到目標端:

同時還支持 改名
和 字段映射
:

點擊完成按鈕,即可。如果點擊沒有反應,可以嘗試退回上一步,再回來點擊完成。
4、啟動任務
點擊完成后,任務狀態(tài)為 待啟動
,可以通過啟動任務來開始:

先去目標端 Oracle 12C 查詢表 Lucifer 是否存在:
select * from lucifer;

確認沒有表 Lucifer,啟動任務:

5、運行監(jiān)控
點擊 運行監(jiān)控
可以看到同步情:

6、報錯處理
可以看到,這里報錯了,看了一下日志記錄:

由于我之前創(chuàng)建表時,沒有創(chuàng)建主鍵,咨詢官方之后,確認必須需要表帶主鍵才可以,因此,新增表主鍵:
alter table lucifer add constraint tb_lucifer_pk primary key (id);
alter table tapdata add constraint tb_tapdata_pk primary key (id);
新增表主鍵之后,需要重新加載數(shù)據(jù)源,即連接管理
那里連接測試即可。

回到運行監(jiān)控
頁面,重置
之后重新同步:

重置
即清除進度,回到最初,然后點擊啟動即可。

7、同步測試
連接 Oracle 12C 目標端,查詢 Lucifer 表的數(shù)據(jù):

發(fā)現(xiàn)數(shù)據(jù)已經(jīng)同步成功。
測試源端 Oracle 11G 寫入數(shù)據(jù)之后,目標端是否同步:
源端:
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;
目標端:
select * from lucifer;
select * from tapdata;

查看監(jiān)控頁面,可以發(fā)現(xiàn)源端的操作記錄均已同步:

?? 至此,Oracle 不同版本間的實時數(shù)據(jù)同步測試已經(jīng)完成。
🌊 寫在最后
首先,給 Tapdata 的文檔點贊一波,寫的真的很詳細易懂!
本文從無到有地展示了所有環(huán)境的安裝部署,數(shù)據(jù)同步的完整步驟以及一些需要注意的事項,可以說是盡善盡美了。之后,應該還會寫異構(gòu)數(shù)據(jù)庫之間的同步教程。
總體體驗來說,Tapdata Cloud 在安裝部署和使用方面,大大降低了技術(shù)難度,相較于其他一些數(shù)據(jù)同步產(chǎn)品,在入門體驗上更好。關(guān)于實時同步的效率,由于沒有實測生產(chǎn),不做過多的評價。
感興趣的朋友可以多多測試,希望 Tapdata 能夠越做越好!同時還可以參加 Tapdata 的新活動:推薦 | 異構(gòu)數(shù)據(jù)庫同步云平臺 Tapdata Cloud 開啟有獎公測,?? 獎品確實很豐厚!