這裏測試ogg的源端與目標端的使用:
1、在源端Oracle創建測試的student數據表
CREATE TABLE "OGG"."student"
(
"sid" NUMBER(8,0),
"sname" VARCHAR2(14),
"sex" VARCHAR2(13),
"class" VARCHAR2(13),
PRIMARY KEY ("sid")
)
2、源端添加配置管理、抽取與投遞
A.添加studen表附加日誌
首先在源端的OGG安裝目錄打開ggsci.exe,使用以下指令連接數據庫:
dblogin userid ogg password ogg
添加復刻表:
add trandata "OGG"."student"
info trandata "OGG"."student"
注意:這裏應該爲 庫名.表名 的形式編寫,我之前沒有加引號則會報 ERROR: No viable tables matched specification . 錯誤。這個說明沒有找到符合規格的可行表格。解決步驟可以看這篇博客:https://blog.csdn.net/JJBOOM425/article/details/106478060
B.配置extract進程
1、編輯extract進程
GGSCI > edit param extkafka --具體名稱自己取,便於管理
extkafka.prm文件內容:
extract extkafka
dynamicresolution
SETENV (ORACLE_SID = "orcl")
SETENV (NLS_LANG = "american_america.AL32UTF8") --此處的編碼問題也是個坑,可能會GBK問題
userid ogg,password ogg
exttrail C:/OGG/dirdat/to
table "OGG"."student";
參數說明:
- extkafka 爲extract進程名稱;
- dynamicresolution 爲動態解析;
- SETENV設置環境變量,這裏分別設置了Oracle數據庫以及字符集;
- userid ogg,password ogg即OGG連接Oracle數據庫的帳號密碼,這裏使用創建的複製帳號;
- exttrail定義trail文件的保存位置以及文件名,注意這裏文件名只能是2個字母(即會出現to000000這樣的文件),其餘部分OGG會補齊,此處爲linux環境的話就填linux下的OGG位置,爲windows即填windows位置;
- table即複製表的表名,支持*通配,必須以;結尾(這裏爲單表的形式進行測試)
2、添加extract進程:
GGSCI> add extract extkafka,tranlog,begin now
EXTRACT added.
3、添加trail文件的定義與extract進程綁定:
GGSCI> add exttrail C:/OGG/dirdat/to,extract extkafka
注意:
注意此處的位置依舊是linux環境和windows環境的位置不同,/和\也不同。之前參考別人的部署這裏用的是 \,後面啓動時報錯了:The trail 'C:/OGG/dirdat/to' is not assigned to extract 'EXTKAFKA'. Assign the trail to the extract with the command "ADD EXTTRAIL/RMTTRAIL C:/OGG/dirdat/to, EXTRACT EXTKAFKA". 把\全部換成/就可以啓動成功了。
C.配置pump進程
1、編輯pump進程
pump進程本質上來說也是一個extract,只不過他的作用僅僅是把trail文件傳遞到目標端,配置過程和extract進程類似,只是邏輯上稱之爲pump進程。
GGSCI (ambari.master.com) 18> edit param pukafka
pukafka.prm文件內容:
extract pukafka
passthru
dynamicresolution
userid ogg,password ogg
rmthost 192.168.129.228 mgrport 7809 --目標端的地址和端口
rmttrail /ogg_bigdata/dirdat/to --目標端的trail文件存儲位置名稱
table "OGG"."student";
參數說明:
- pukafka 爲extract進程名稱;
- passthru 即禁止OGG與Oracle交互,我們這裏使用pump邏輯傳輸,故禁止即可;
- dynamicresolution 爲動態解析;
- userid ogg,password ogg 即OGG連接Oracle數據庫的帳號密碼;
- rmthost和mgrhost 即目標端(kafka)OGG的mgr服務的地址以及監聽端口;
- rmttrail 即目標端trail文件存儲位置以及名稱
2、將本地trail文件和目標端的trail文件綁定到extract進程:
源端路徑:
GGSCI > add extract pukafka,exttrailsource C:\OGG\dirdat\to
注意:這個名詞不能超過8個字符,超過的話則添加時會報錯:ERROR: Invalid group name (must be at most 8 characters) .
目標端路徑:
GGSCI > add rmttrail /ogg_bigdata/dirdat/to,extract pukafka
注意:linux和windows地址寫法
D.配置define文件
Oracle與MySQL,Hadoop集羣(HDFS,Hive,kafka等)等之間數據傳輸可以定義爲異構數據類型的傳輸,故需要定義表之間的關係映射,在OGG命令行執行:
1、編輯define文件
GGSCI > edit param test_ogg
test_ogg配置信息:
defsfile C:\OGG\dirdef\ogg.student
userid ogg,password ogg
table "OGG"."student";
注意:C:\OGG\dirdef\ogg.student中的路徑不能出現"",之前我帶雙引號導致後面生成映射文件失敗。
2、在OGG主目錄下執行命令,生成映射文件:
這裏我是windows環境下,所以需要打開powershell:
然後進入OGG目錄下,執行下面命令:
cd C:\OGG
.\defgen.exe paramfile C:\OGG\dirprm\test_ogg.prm
執行成功後則可以在C:\OGG\dirdef 下看到 ogg.student 文件。此時源端的配置基本都成功了。這個ogg.student文件後面我們會移動到目標端的dirdef文件夾下。
拓展:
A.注意linux和windows下的地址問題。
B.如果是linux下,則在ogg目錄下執行該語句: ./defgen paramfile dirprm/test_ogg.prm
C.如果Windows中啓動PowerShell時報以下錯誤時:
警告: 無法加載文件
C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSDiagnostics\PSDiagnostics.psm1,因爲在此係統中禁止執行腳本。有關詳細信息,請參閱 "get-help about_signing"。
警告: 無法加載文件
C:\Windows\system32\WindowsPowerShell\v1.0\Modules\WebAdministration\WebAdministrationAliases.ps1,因爲在此係統中禁止執行腳本。有關詳細信息,請參閱 "get-help about_signing"。
只要執行 set-executionpolicy remotesigned 即可。
映射文件比較
這裏可以看自己定義的表是否真的生成了正確的映射文件:
之前失敗的文件:
*+- Defgen version 2.0, Encoding GBK
*
* Definitions created/modified 2020-06-02 17:32
*
* Field descriptions for each column entry:
*
* 1 Name
* 2 Data Type
* 3 External Length
* 4 Fetch Offset
* 5 Scale
* 6 Level
* 7 Null
* 8 Bump if Odd
* 9 Internal Length
* 10 Binary Length
* 11 Table Length
* 12 Most Significant DT
* 13 Least Significant DT
* 14 High Precision
* 15 Low Precision
* 16 Elementary Item
* 17 Occurs
* 18 Key Column
* 19 Sub Data Type
*
Database type: ORACLE
Character set ID: UTF-8
National character set ID: UTF-16
Locale: neutral
Case sensitivity: 14 14 14 14 14 14 14 14 14 14 14 14 11 14 14 14
後面修改後,獲取的正確的表結構:
*+- Defgen version 2.0, Encoding GBK
*
* Definitions created/modified 2020-06-12 20:15
*
* Field descriptions for each column entry:
*
* 1 Name
* 2 Data Type
* 3 External Length
* 4 Fetch Offset
* 5 Scale
* 6 Level
* 7 Null
* 8 Bump if Odd
* 9 Internal Length
* 10 Binary Length
* 11 Table Length
* 12 Most Significant DT
* 13 Least Significant DT
* 14 High Precision
* 15 Low Precision
* 16 Elementary Item
* 17 Occurs
* 18 Key Column
* 19 Sub Data Type
*
Database type: ORACLE
Character set ID: UTF-8
National character set ID: UTF-16
Locale: neutral
Case sensitivity: 14 14 14 14 14 14 14 14 14 14 14 14 11 14 14 14
*
Definition for table OGG.student
Record length: 76
Syskey: 0
Columns: 4
sid 134 9 0 0 0 1 0 8 8 8 0 0 0 0 1 0 1 3
sname 64 14 12 0 0 1 0 14 14 0 0 0 0 0 1 0 0 0
sex 64 13 32 0 0 1 0 13 13 0 0 0 0 0 1 0 0 0
class 64 20 50 0 0 1 0 20 20 0 0 0 0 0 1 0 0 0
End of definition
還是很明顯可以看到不同。
3、測試創建的進程
啓動所有部署的進程,使用以下指令在源端的ggsci中啓動進程:
start mgr
start extkafka
start pukafka
啓動後,如果不閃退則成功啓動,如果有閃退則可以看看ogg目錄下的 ggserr.log 日誌信息:
成功啓動後可以在源端(C:/OGG/dirdat)與目標端(/ogg_bigdata/dirdat)下看到to000000的文件。
源端:
目標端:
拓展:
如果源端關閉了那些進程,重新啓動則可能會報錯。我就重新配置一下extkafka與pukafka,再重新啓動就好了。