Oracle GoldenGate(OGG)- 超級詳細


Oracle GoldenGate(OGG)- 超級詳細

 2020-10-30 
aclgateoggoracle
 

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源端軟件包

  1. 創建OGG源端的目錄,使用root用戶創建:
1
mkdir /u01/app/ogg/src
  1. 添加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

在這里插入圖片描述

  1. 解壓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
  1. 配置/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進程
  1. 啟動源端mgr進程
1
2
3
4
5
6
7
8
cd $OGG_SRC_HOME
./ggsci
#查看所有進程狀態:
info all
#啟動MANAGER進程:
start mgr
#檢查所有進程狀態:
info all

在這里插入圖片描述

  1. 啟動目標端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

在這里插入圖片描述

  1. 啟動源端pump進程
    啟動pump進程:
1
start pukafka

查看所有進程狀態:

1
info all

在這里插入圖片描述

  1. 啟動目標端replicat進程
1
2
cd $OGG_TGR_HOME
./ggsci

啟動replicat進程:

1
start rekafka

查看所有進程狀態:

1
info all

在這里插入圖片描述

  1. 確認源端和目標端進程運行情況
    源端:
    在這里插入圖片描述
    目標端:
    在這里插入圖片描述

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM