这里测试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,再重新启动就好了。