Oracle GoldenGate(OGG)- 超級詳細
1. OGG簡介
- OGG 是一種基於日志的結構化數據復制軟件,它通過解析源數據庫在線日志或歸檔日志獲得數據的增刪改變化(數據量只有日志的四分之一左右)
- OGG 能夠實現大量交易數據的實時捕捉,變換和投遞,實現源數據庫與目標數據庫的數據同步,保持最少10ms的數據延遲。
2. 應用場景
- 高可用容災
- 數據庫遷移、升級(支持跨版本、異構數據庫、零宕機時間、亞秒級恢復)
- 實時數據集成(支持異構數據庫、多源數據庫)
3. 基本原理

基於日志捕獲技術的實時增量數據集成
Oracle GoldenGate 數據復制過程如下:
- 利用抽取進程(Extract Process)在源端數據庫中讀取Online Redo Log或者Archive Log,然后進行解析,只提取其中數據的變化信息,比如DML操作——增、刪、改操作
- 將抽取的信息轉換為GoldenGate自定義的中間格式存放在隊列文件(trail file)中
- 再利用傳輸進程將隊列文件(trail file)通過TCP/IP傳送到目標系統。
- 目標端有一個進程叫Server Collector,這個進程接受了從源端傳輸過來的數據變化信息
- 把信息緩存到GoldenGate 隊列文件(trail file)當中,等待目標端的復制進程讀取數據。
- GoldenGate 復制進程(replicat process)從隊列文件(trail file)中讀取數據變化信息,並創建對應的SQL語句,通過數據庫的本地接口執行,提交到目標端數據庫,提交成功后更新自己的檢查點,記錄已經完成復制的位置,數據的復制過程最終完成。
4. 基本架構
Oracle GoldenGate主要由如下組件組成
組件 | 說明 |
---|---|
Manager | 不管是源端還是目標端必須並且只能有一個Manager進程,可以啟動、關閉、監控其他進程的健康狀態,報告錯誤事件、分配數據存儲空間,發布閥值報告等,其作用: 1:監控與啟動 GoldenGate 的其它進程 2:管理 trail 文件及 Reporting |
Extract | Extract 進程運行在數據庫源端上,它是Golden Gate的捕獲機制,可以配置Extract 進程來做如下工作: 1:初始數據裝載:對於初始數據裝載,Extract 進程直接從源對象中提取數據 2:同步變化捕獲:保持源數據與其它數據集的同步。初始數據同步完成后,Extract 進程捕獲源數據的變化;如DML變化、 DDL變化等 |
Replicat | Replicat 進程是運行在目標端系統的一個進程,負責讀取 Extract 進程提取到的數據(變更的事務或 DDL 變化)並應用到目標數據庫,就像 Extract 進程一樣,也可以配置 Replicat 進程來完成如下工作: 1:初始化數據裝載:對於初始化數據裝載,Replicat 進程應用數據到目標對象或者路由它們到一個高速的 Bulk-load 工具上; 2:數據同步,將 Extract 進程捕獲到的提交了的事務應用到目標數據庫中; |
Collector | Collector 是運行在目標端的一個后台進程,接收從 TCP/IP 網絡傳輸過來的數據庫變化,並寫到 Trail 文件里 |
Trails | 為了持續地提取與復制數據庫變化,GoldenGate 將捕獲到的數據變化臨時存放在磁盤上的一系列文件中,這些文件就叫做 Trail 文件 |
Data Pumps | Data Pump 是一個配置在源端的輔助的 Extract 機制,Data Pump 是一個可選組件,如果不配置 Data Pump,那么由 Extract 主進程將數據發送到目標端的 Remote Trail 文件中;如果配置了 Data Pump,會由 Data Pump將Extract 主進程寫好的本地 Trail 文件通過網絡發送到目標端的 Remote Trail 文件中 |
5. 常用的拓撲結構
- 單向復制:由一個源數據庫復制到一個目的數據庫,一般用於高可用性和容災,為生產機保持一個活動的備份數據庫,從而在發生災難的時候迅速切換,減少數據丟失和系統宕機時間;
- 雙向復制:利用GoldenGate TDM可以實現兩個數據庫之間數據的雙向復制,任何一方的數據變化都會被傳遞到另一端,可以利用此模式開展雙業務中心;
- 廣播復制:由一個數據庫向多個數據庫復制,利用GoldenGate TDM的數據過濾功能可以實現數據的有選擇分發;
- 集中復制:由多個數據庫向一個數據庫復制,可以將分布的、跨平台或異構的多個數據庫集中到一個數據庫。此種模式廣泛應用於n+1模式的容災,通過將多個系統數據庫集中到一起,可以充分利用備份中心的設施,大幅減少投資;另外也用於跨平台多系統的數據集成,為這些提供系統提供一個統一視圖便於查詢和統計數據。
- 多層復制:由A數據庫向B復制,同時又由B向C復制,可以在以上幾種模式基礎上無限制擴展。
由此可見,GoldenGate TDM的復制模式非常靈活,用戶可以根據自己的需求選擇特定的復制方式,並根據系統擴展對復制進行擴展。
6. 支持的環境
源和目標的操作系統和數據庫可以進行任意的組合
7. OGG安裝部署
注:在Docker環境下,整合Oracle,
主機名 | IP | OGG |
---|---|---|
node1 | 192.168.88.10 | 源端 |
node2 | 192.168.88.20 | 目標端 |
7.1 配置Oracle11gR2數據庫
7.1.1 Oracle11gR2打開歸檔模式
需要切換到oracle用戶操作:
1
|
su - oracle
|
因為配置數據庫需要在sqlplus中執行,所以使用sysdba用戶登錄:
1
|
sqlplus / as sysdba
|
- 驗證數據庫是否開啟自動歸檔
執行歸檔查詢命令:
1
|
archive log list
|
Automatic archival是Disabled狀態,因為Oracle默認是不開啟自動歸檔的
- 開啟自動歸檔
以DBA的身份連接數據庫,執行命令:
1
|
conn /as sysdba
|
關閉數據庫,執行命令:
1
|
shutdown immediate
|
啟動並裝載數據庫,但沒有打開數據文件,該命令常用來修改數據庫運行模式或恢復數據庫。執行命令:
1
|
startup mount
|
執行開啟歸檔命令:
1
|
alter database archivelog;
|
執行打開數據庫命令:
1
|
alter database open;
|
執行自動歸檔命令:
1
|
alter system archive log start;
|
- 驗證是否開啟自動歸檔成功
執行歸檔查詢命令:
1
|
archive log list
|
Automatic archival變成了Enabled狀態,表示已經開啟自動歸檔成功
7.1.2 Oracle開啟輔助日志和補充日志
- 驗證數據庫是否開啟輔助日志和補充日志
執行SQL語句驗證:
1
|
select force_logging,supplemental_log_data_min from v$database;
|
當顯示NO的時候表示沒有開啟,需要調整
- 開啟數據庫的輔助日志和補充日志
開啟強制日志后數據庫會記錄除臨時表空間或臨時回滾段外所有的操作,命令:
1
|
alter database force logging;
|
開啟輔助日志命令:
1
|
alter database add supplemental log data;
|
開啟主鍵附加日志命令:
1
|
alter database add supplemental log data (primary key) columns;
|
開啟全列附加日志命令:
1
|
alter database add supplemental log data (all) columns;
|
- 檢查數據庫是否成功開啟輔助日志和補充日志
執行SQL語句驗證:
1
|
select force_logging,supplemental_log_data_min from v$database;
|
當顯示為YES的時候表示開啟成功。
7.2 安裝OGG源端
7.2.1 解壓和安裝OGG源端軟件包
- 創建OGG源端的目錄,使用root用戶創建:
1
|
mkdir /u01/app/ogg/src
|
- 添加OGG源端的目錄到oracle用戶的環境變量中(需要切換到oracle用戶操作)
1
2 3 4 5 6 7 8 9 |
su - oracle
vim ~/.bash_profile export OGG_SRC_HOME=/u01/app/ogg/src export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib source ~/.bash_profile # 退出oracle用戶shell命令: exit |
- 解壓OGG源端軟件
OGG源端的軟件包是V34339-01.zip,存放在/export/softwares/oracle/ogg目錄下。需要使用root用戶解壓
1
|
cd /export/softwares/oracle/ogg
|
創建src文件夾是用來存放解壓后的OGG源端軟件
1
|
mkdir /export/softwares/oracle/ogg/src/
|
解壓OGG源端軟件到src文件夾下
1
|
unzip /export/softwares/oracle/ogg/V34339-01.zip -d /export/softwares/oracle/ogg/src/
|
1
|
cd /export/softwares/oracle/ogg/src/
|
fbo_ggs_Linux_x64_ora11g_64bit.tar文件才是OGG源端的軟件包,解壓該文件到/u01/app/ogg/src目錄下,執行命令:
1
|
tar -xf fbo_ggs_Linux_x64_ora11g_64bit.tar -C /u01/app/ogg/src
|
- 配置/u01/app/ogg/src目錄及其所有文件的權限
使用root用戶執行授權命令:
1
|
chown -R oracle:oinstall /u01/app/ogg/src
|
可以看到/u01/app/ogg/目錄下的src屬於oracle用戶和oinstall組
可以看到/u01/app/ogg/src目錄下的所有文件都屬於oracle用戶和oinstall組
7.2.2 在Oracle中創建OGG相關的用戶和表空間
創建表空間在磁盤中的物理路徑(需要到root用戶操作)
1
2 |
mkdir -p /u01/app/oracle/oggdata/orcl/
chown -R oracle:oinstall /u01/app/oracle/oggdata/orcl |
進入sqlplus
切換到oracle用戶:
1
|
su - oracle
|
登錄sqlplus:sqlplus “/as sysdba”
創建oggtbs表空間
1
|
create tablespace oggtbs datafile '/u01/app/oracle/oggdata/orcl/oggtbs.dbf' size 500M autoextend on;
|
創建ogg用戶(用戶名和密碼都是ogg)
1
|
create user ogg identified by ogg default tablespace oggtbs;
|
賦予ogg用戶dba權限
1
|
grant dba to ogg;
|
7.2.3 OGG源端初始化
使用oracle用戶登錄源端OGG的命令行中
1
2 3 |
su – oracle
cd $OGG_SRC_HOME ./ggsci |
初始化源端OGG目錄
注意:如果不在OGG_SRC_HOME下,初始化OGG目錄時會報錯
1
|
create subdirs
|
退出OGG命令行客戶端:exit
檢查源端OGG初始化后的目錄
初始化完成后,可以查詢在$OGG_SRC_HOME下是否存在dirchk、dirdat、dirdef、dirjar、dirout、dirpcs、dirprm、dirrpt、dirsql、dirtmp共11個目錄。
7.3 配置OGG源端
7.3.1 Oracle創建測試表
1
2 3 4 |
#切換到oracle用戶:
su – oracle #登錄sqlplus: sqlplus "/as sysdba" |
1
2 3 4 5 6 7 8 |
#在oracle中創建test_ogg用戶:
create user test_ogg identified by test_ogg default tablespace users; #為test_ogg用戶授權: grant dba to test_ogg; #使用test_ogg用戶登錄: conn test_ogg/test_ogg; #創建test_ogg表: create table test_ogg(id int ,name varchar(20),primary key(id)); |
7.3.2 配置OGG的全局變量
- 使用oracle用戶進入OGG_SRC_HOME目錄下
1
2 3 4 5 6 |
#切換到oracle用戶下:
su – oracle #打印源端OGG_SRC_HOME: echo $OGG_SRC_HOME #進入OGG_SRC_HOME: cd $OGG_SRC_HOME |
- 進入源端OGG命令行
1
|
./ggsci
|
- 使用oracle中的ogg用戶登錄
1
|
dblogin userid ogg password ogg
|
- 配置全局變量
1
|
edit param ./globals
|
oggschema ogg
然后跟使用vi一樣,在新窗口中添加oggschema ogg后保存退出編輯
7.3.3 配置管理器MGR進程
- 進入源端OGG命令行
1
|
./ggsci
|
創建mgr進程:
1
|
edit param mgr
|
PORT 7809
DYNAMICPORTLIST 7810-7909
AUTORESTART EXTRACT ,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/,usecheckpoints, minkeepdays 3
參數名稱 | 參數說明 |
---|---|
PORT | mgr的默認監聽端口 |
DYNAMICPORTLIST | 當指定的mgr端口不可用時,會在這個端口列表中選擇一個,最大指定范圍為256個 |
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3 | 重啟EXTRACT進程的參數,最多5次,每次間隔3分鍾 |
PURGEOLDEXTRACTS | TRAIL文件的定期清理 |
7.3.4 添加復制表
- 進入源端OGG命令行
1
2 3 4 |
./ggsci
add trandata test_ogg.test_ogg info trandata test_ogg.test_ogg |
7.3.5 配置extract進程
配置Extract進程:
1
|
edit param extkafka
|
新增內容:
1
|
extract extkafka
|
dynamicresolution
SETENV (ORACLE_SID = “orcl”)
SETENV (NLS_LANG = “american_america.AL32UTF8”)
userid ogg,password ogg
exttrail /u01/app/ogg/src/dirdat/to
table test_ogg.test_ogg;
參數名稱 | 參數說明 |
---|---|
extract extkafka | 定義extract進程名稱 |
dynamicresolution | 啟用動態解析 |
SETENV (ORACLE_SID = “orcl”) | 設置Oracle數據庫 |
SETENV (NLS_LANG = “american_america.AL32UTF8”) | 設置字符集 |
userid ogg,password ogg | OGG連接Oracle數據庫的帳號密碼 |
exttrail /u01/app/ogg/src/dirdat/to | 定義trail文件的保存位置以及文件名,文件字母最多2個,否則會報錯 |
table test_ogg.test_ogg; | 復制表的表名,支持*通配,必須以;結尾 |
添加Extract進程:
1
|
add extract extkafka,tranlog,begin now
|
將trail文件配置與extract進程綁定:
1
|
add exttrail /u01/app/ogg/src/dirdat/to,extract extkafka
|
7.3.6 配置pump進程
配置Pump進程:
1
|
edit param pukafka
|
新增內容:
extract pukafka
passthru
dynamicresolution
userid ogg,password ogg
rmthost localhost mgrport 7809
rmttrail /u01/app/ogg/tgr/dirdat/to
table test_ogg.test_ogg;
?extract進程名稱;passthru即禁止OGG與Oracle交互,我們這里使用pump邏輯傳輸,故禁止即可;dynamicresolution動態解析;userid ogg,password ogg即OGG連接Oracle數據庫的帳號密碼rmthost和mgrhost即目標端(kafka)OGG的mgr服務的地址以及監聽端口;rmttrail即目標端trail文件存儲位置以及名稱。
參數名稱 | 參數說明 |
---|---|
extract pukafka | 定義pump進程名稱 |
passthru | 因使用了pump邏輯傳輸,所以禁止OGG與Oracle交互 |
dynamicresolution | 配置動態解析 |
userid ogg,password ogg | OGG連接Oracle數據庫的帳號密碼 |
rmthost localhost mgrport 7809 | 目標端OGG的mgr服務的地址以及監聽端口 |
rmttrail /u01/app/ogg/tgr/dirdat/to | 目標端OGG的trail文件存儲位置以及名稱 |
table test_ogg.test_ogg; | 要采集的表,必須使用;結尾 |
將源端trail文件綁定到Extract進程:
1
|
add extract pukafka,exttrailsource /u01/app/ogg/src/dirdat/to
|
將目標端trail文件綁定到Extract進程:
1
|
add rmttrail /u01/app/ogg/tgr/dirdat/to,extract pukafka
|
7.3.7 配置define文件
?注意:該文件用來在異構數據源之間傳輸時,需明確知道表之間的映射關系,比如:Oracle與MySQL,Hadoop集群(HDFS,Hive,kafka等)等之間數據傳輸可以定義為異構數據類型的傳輸,故需要定義表之間的關系映射,在OGG命令行執行:
配置define文件:
1
|
edit param test_ogg
|
defsfile /u01/app/ogg/src/dirdef/test_ogg.test_ogg
userid ogg,password ogg
table test_ogg.test_ogg;
生成表schema文件:(在OGG_SRC_HOME目錄下執行(oracle用戶))
1
|
./defgen paramfile dirprm/test_ogg.prm
|
將生成的/u01/app/ogg/src/dirdef/test_ogg.test_ogg發送的目標端ogg目錄下的dirdef里:
1
|
scp -r /u01/app/ogg/src/dirdef/test_ogg.test_ogg /u01/app/ogg/tgr/dirdef/
|
因為目標端目錄還沒有創建,因此發送文件可能會失敗,所以執行完目標端配置后發送即可
7.4 配置OGG目標端
7.4.1 解壓和安裝OGG目標端軟件包
- 創建OGG目標端的目錄
使用root用戶創建:
1
|
mkdir /u01/app/ogg/tgr
|
- 添加OGG目標端的目錄到oracle用戶的環境變量中
從root用戶切換到oracle用戶:
1
|
su oracle
|
注意【非常重要】:在這里,需要調整oracle用戶的.bash_profile,主要是更新LD_LIBRARY_PATH的值,來確保源端和目標端的ggsci命令都可以正常使用。如果不更新的話,目標端ggsci命令可以使用,但源端的ggsci命令無法使用,會報錯./ggsci: error while loading shared libraries: libclntsh.so.11.1: cannot open shared object file: No such file or directory
1
2 3 4 5 6 7 8 9 |
vim ~/.bash_profile
export OGG_TGR_HOME=/u01/app/ogg/tgr export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server:$JAVA_HOME/jre/lib/amd64/libjsig.so:$JAVA_HOME/jre/lib/amd64/server/libjvm.so:$ORACLE_HOME/lib:/usr/lib source ~/.bash_profile #退出oracle用戶shell命令: exit |
- 解壓OGG目標端軟件
OGG源端的軟件包是V971332-01.zip,存放在/export/softwares/oracle/ogg目錄下。需要使用root用戶解壓
1
|
cd /export/softwares/oracle/ogg
|
創建tgr文件夾是用來存放解壓后的OGG目標端軟件
1
|
mkdir -p /export/softwares/oracle/ogg/tgr/
|
解壓OGG目標端軟件到tgr文件夾下
1
|
unzip /export/softwares/oracle/ogg/V971332-01.zip -d /export/softwares/oracle/ogg/tgr/
|
1
|
cd /export/softwares/oracle/ogg/tgr/
|
ggs_Adapters_Linux_x64.tar文件是真正的OGG目標端軟件包,解壓該文件到/u01/app/ogg/tgr目錄下,執行命令:
1
|
tar -xf ggs_Adapters_Linux_x64.tar -C /u01/app/ogg/tgr/
|
- 配置/u01/app/ogg/tgr目錄及其所有文件的權限
解壓后的默認用戶和組
使用root用戶執行授權命令:
1
|
chown -R oracle:oinstall /u01/app/ogg/tgr
|
可以看到/u01/app/ogg/目錄下的tgr屬於oracle用戶和oinstall組。
1
|
ll /u01/app/ogg/tgr
|
可以看到/u01/app/ogg/tgr目錄下的所有文件都屬於oracle用戶和oinstall組。
7.4.2 OGG目標端初始化
- 使用oracle用戶登錄目標端OGG的命令行中
可以看到/u01/app/ogg/目錄下的tgr屬於oracle用戶和oinstall組。
1
|
su oracle
|
切換oracle用戶時需要重新加載環境變量:
1
2 3 |
source ~/.bash_profile
cd $OGG_TGR_HOME ./ggsci |
- 初始化目標端OGG目錄
注意:如果不在OGG_TGR_HOME下,初始化目標端OGG目錄時會報錯
1
|
create subdirs
|
退出OGG命令行客戶端:exit
- 檢查目標端OGG初始化后的目錄
初始化完成后,可以查詢在$OGG_TGR_HOME下是否存在dirchk、dircrd、dirdat、dirdef、dirdmp、diretc、dirout、dirpcs、dirprm、dirrpt、dirsql、dirtmp、dirwlt、dirwww共14個目錄。
7.4.3 拷貝源端的define文件到目標端
將生成的/u01/app/ogg/src/dirdef/test_ogg.test_ogg發送的目標端ogg目錄下的dirdef里:
1
|
scp -r $OGG_SRC_HOME/dirdef/test_ogg.test_ogg $OGG_TGR_HOME/dirdef/
|
7.4.4 安裝zookeeper和Kafka
- 安裝ZooKeeper(使用root用戶操作)
解壓:
1
|
tar -zxf /export/softwares/zookeeper-3.4.14.tar.gz -C /export/services/
|
創建軟連接:
1
|
ln -s /export/services/zookeeper-3.4.14 /export/services/zookeeper
|
創建zoo.cfg:
1
|
cp /export/services/zookeeper/conf/zoo_sample.cfg /export/services/zookeeper/conf/zoo.cfg
|
配置zoo.cfg:
1
|
vim /export/services/zookeeper/conf/zoo.cfg
|
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/export/datas/zookeeper/data
dataLogDir=/export/datas/zookeeper/log
clientPort=2181
創建ZooKeeper的數據路徑:
1
2 |
mkdir -p /export/datas/zookeeper/data
mkdir -p /export/datas/zookeeper/log |
添加到環境變量:
1
|
vim /etc/profile
|
export ZOOKEEPER_HOME=/export/services/zookeeper
export PATH=.:Z
O
O
K
E
E
P
E
R
H
O
M
E
/
b
i
n
:
ZOOKEEPER_HOME/bin:
ZOOKEEPERH?OME/bin:JAVA_HOME/bin:
J
A
V
A
H
O
M
E
/
j
r
e
/
b
i
n
:
JAVA_HOME/jre/bin:
JAVAH?OME/jre/bin:PATH
1
|
source /etc/profile
|
啟動ZooKeeper:
1
2 |
zkServer.sh start
zkServer.sh status |
- 安裝kafka(使用root用戶操作)
解壓:
1
|
tar -zxf /export/softwares/kafka_2.11-2.2.0.tgz -C /export/services/
|
創建軟連接:
1
|
ln -s /export/services/kafka_2.11-2.2.0 /export/services/kafka
|
配置server.prperties:
1
|
vim /export/services/kafka/config/server.properties
|
listeners=PLAINTEXT://server01:9092
broker.id=0
zookeeper.connect=server01:2181
添加環境變量:
1
|
vim /etc/profile
|
1
2 |
export KAFKA_HOME=/export/services/kafka
export PATH=.:\$KAFKA_HOME/bin:\$ZOOKEEPER_HOME/bin:\$JAVA_HOME/bin:\$JAVA_HOME/jre/bin:\$PATH |
1
|
source /etc/profile
|
啟動Kafka:
1
|
kafka-server-start.sh -daemon /export/services/kafka/config/server.properties
|
創建主題:
1
|
kafka-topics.sh --create --zookeeper server01:2181 --replication-factor 1 --partitions 1 --topic test_ogg
|
查看主題:
1
|
kafka-topics.sh --list --zookeeper server01:2181
|
7.4.5 配置管理器MRG進程
使用oracle用戶進入OGG_SRC_HOME目錄下
切換到oracle用戶下:
1
|
su – oracle
|
打印目標端OGG_TGR_HOME:
1
|
echo $OGG_TGR_HOME
|
進入OGG_TGR_HOME:
1
|
cd $OGG_TGR_HOME
|
啟動ggsci:
1
|
./ggsci
|
配置目標端MRG進程
配置MGR進程:
1
|
edit param mgr
|
新增內容:
PORT 7810
DYNAMICPORTLIST 7810-7909
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
7.4.6 配置checkpoint
1
|
edit param ./GLOBALS
|
新增內容:
CHECKPOINTTABLE test_ogg.checkpoint
7.4.7 配置Replicate進程
配置目標端Replicate進程
配置replicate進程:
1
|
edit param rekafka
|
REPLICAT rekafka
sourcedefs /u01/app/ogg/tgr/dirdef/test_ogg.test_ogg
TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka.props
REPORTCOUNT EVERY 1 MINUTES, RATE
GROUPTRANSOPS 10000
MAP test_ogg.test_ogg, TARGET test_ogg.test_ogg;
7.4.8 添加trail文件到replicate進程
添加trail文件到Replicate進程
1
|
add replicat rekafka exttrail /u01/app/ogg/tgr/dirdat/to,checkpointtable test_ogg.checkpoint
|
7.4.9 配置kafka.props
- 配置kafka.props
1
2 |
cd $OGG_TGR_HOME
vim dirprm/kafka.props |
新增內容:
gg.handlerlist=kafkahandler
gg.handler.kafkahandler.type=kafka
gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer.properties
gg.handler.kafkahandler.topicMappingTemplate=test_ogg
gg.handler.kafkahandler.format=json
gg.handler.kafkahandler.mode=op
gg.classpath=dirprm/:/export/services/kafka/libs/*:/u01/app/ogg/tgr/:/u01/app/ogg/tgr/lib/*
- 配置custom_kafka_producer.properties
1
2 |
cd $OGG_TGR_HOME
vim dirprm/custom_kafka_producer.properties |
新增內容:
1
2 3 4 5 6 7 8 |
bootstrap.servers=server01:9092
acks=1 compression.type=gzip reconnect.backoff.ms=1000 value.serializer=org.apache.kafka.common.serialization.ByteArraySerializer key.serializer=org.apache.kafka.common.serialization.ByteArraySerializer batch.size=102400 linger.ms=10000 |
7.4.10 最后確認所有的進程
在目標端,主要做了4個操作,共包括2個進程,分別是MANAGER和REPLICAT。
7.5 OGG測試
7.5.1 啟動OGG的源端和目標端
前提:切換到 oracle 賬號且啟動了 Oracle
注意:要嚴格按照啟動順序執行:
- 第一步:啟動源端mgr進程
- 第二步:啟動目標端mgr進程
- 第三步:啟動源端extract進程
- 第四步:啟動源端pump進程
- 第五步:啟動目標端replicate進程
- 啟動源端mgr進程
1
2 3 4 5 6 7 8 |
cd $OGG_SRC_HOME
./ggsci #查看所有進程狀態: info all #啟動MANAGER進程: start mgr #檢查所有進程狀態: info all |
- 啟動目標端mgr進程
1
2 3 4 5 6 7 |
cd $OGG_TGR_HOME
./ggsci #啟動MANAGER進程: start mgr #查看所有進程狀態: info all |
3. 啟動源端extract進程
1
2 3 4 5 6 |
cd $OGG_SRC_HOME
./ggsci #啟動EXTRACT進程: start extkafka #查看所有進程狀態: info all |
- 啟動源端pump進程
啟動pump進程:
1
|
start pukafka
|
查看所有進程狀態:
1
|
info all
|
- 啟動目標端replicat進程
1
2 |
cd $OGG_TGR_HOME
./ggsci |
啟動replicat進程:
1
|
start rekafka
|
查看所有進程狀態:
1
|
info all
|
- 確認源端和目標端進程運行情況
源端:
目標端:
7.5.2 測試OGG的數據采集
- 使用oracle用戶登錄到oracle11g數據庫(源端)
1
2 3 |
su – oracle
sqlplus "/as sysdba" conn test_ogg/test_ogg |
- 對表進行DML操作(每一條SQL都需要手動執行commit提交)
登錄到test_ogg用戶下:
1
|
conn test_ogg/test_ogg
|
查看該用戶擁有的表:
1
|
select table_name from user_tables;
|
查看TEST_OGG表的字段信息:
1
|
select column_name,data_type from user_tab_columns where table_name = upper('TEST_OGG');
|
插入數據:
1
|
insert into test_ogg values(1,'beijing');
|
執行Commit:
1
|
commit;
|
查看kafka是否多出了一個叫做test_ogg的主題:
1
|
kafka-topics.sh --list --zookeeper server01:2181
|
然后啟動kafka的消費者來消費test_ogg主題的數據:
1
|
kafka-console-consumer.sh --bootstrap-server server01:9092 --topic test_ogg --from-beginning
|
再查看kafka的test_ogg主題下是否有了數據:
執行修改數據(修改id=2的name為china-shanghai):
1
|
update test_ogg set name='china-shanghai' where id=2;
|
查看kafka中是否有了id為2的china-shanghai的這條記錄:
刪除id為2的數據:
1
|
delete test_ogg where id=2;
|
檢查kafka是否多個一條被標記為刪除的數據:
1
2 |
:{<!-- -->"table":"TEST_OGG.TEST_OGG","op_type":"I","op_ts":"2020-05-28 09:22:18.000129",
{<!-- -->"table":"TEST_OGG.TEST_OGG","op_type":"U","op_ts":"2020-05-28 09:25:17.000140","current_ts":"2020-05-28T09:25:22.085000","pos":"00000000000000001227","before":{<!-- -->},"after":{<!-- -->"ID":1,"NAME":"china-shanghai"}} |
- 關於數據文件的檢查
如果數據庫中發生了事務(都被commit后)操作,會在源端和目標端的dirdat下生成trail數據文件。數據文件名稱只能使用2個字母,多了會報錯。
當源端發生事務后,檢查源端的trail文件:
1
|
ll /u01/app/ogg/src/dirdat/
|
目標端會接收到源端pump進程傳過來的數據文件:
1
|
ll /u01/app/ogg/tgr/dirdat/
|
7.5.3 注意事項
- 必須嚴格遵守OGG的啟動順序;
- 必須嚴格遵守OGG的關閉順序;
- 如果需要修改OGG的進程,必須先停止,修改成功后,再重啟;
7.5.4 錯誤日志位置
源端錯誤日志路徑
/u01/app/ogg/src/ggserr.log
目標端錯誤日志路徑
/u01/app/ogg/tgr/ggserr.log