參考:http://docs.oracle.com/goldengate/bd1221/gg-bd/GADBD/toc.htm
一、環境介紹
源:centos6.5 oracl
e 11.20.4 OGG版本:12.2.0.1.1
目標:OGG 版本Version 12.2.0.1
二、配置源端數據庫
1.1 創建OGG用戶並授權
create user ggmgr identified by ggmgr defaulttablespace DATA_OL;
grant connect,resource,unlimited tablespace to ggmgr;
- grant execute on utl_file to ggmgr;
grant select any dictionary,select any table to ggmgr;
grant alter any table to ggmgr;
grant flashback any table to ggmgr;
grant execute on DBMS_FLASHBACK to ggmgr;
GRANT execute on DBMS_CAPTURE_ADM to ggmgr ;
1.2 開啟附加日志
1.2.1 日志簡介
ORALCE支持三種附加日志:
- 數據庫級別:包括最小(Minimal)、支持所有字段(all)、支持主鍵(primary key)、支持唯一鍵(unique)、支持外鍵(foreign key)。要使用OGG,至少要開啟最小級別。是用戶級別附加日志和表級別附加日志的基礎。
- 用戶級別:使用OGG DDL抽取功能時需要開啟.
- 表級別 :必須開啟表級別附加日志,除非啟用了用戶級別附加日志。
1.2.2 開啟附件日志
檢查補充日志是否開啟,檢查強制日志模式:
SQL> SELECT supplemental_log_data_min, force_logging FROM v$database;
SUPPLEMENTAL_LOG_DATA_MIN FORCE_LOGGING
------------------------- -------------
YES NO
開始補充日志和強制日志
alter database add supplemental log data
(Minimal,all,primary key,unique,foreign key)
;
為了使用OGG for bigdata,至少要開啟primary key級別:
alter database add supplemental log data;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;
ALTER DATABASE FORCE LOGGING;
1.2.3 設置允許OGG復制
該參數從這個參數在11.2.0.4和12.1.0.2以后才出現.
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;
三、配置抽取端OGG
3.1 設置環境變量
編輯.bash_profile,加入ORACLE_HOME和ORACLE_SID及LD_LIBRARY_PATH:
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin:$LD_LIBRARY_PATH
或者在抽取進程配置文件中標明:
setenv(NLS_LANG = "AMERICAN_AMERICA.UTF8")
SETENV(ORACLE_HOME = "/u01/app/oracle/product/11.2.0.4/dbhome_1")
SETENV(ORACLE_SID = "orcl")
3.2 安裝OGG
使用OUI安裝OGG或下載安裝包解壓到/u01/ogg.
1)用OUI安裝OGG
用ORACLE用戶執行runInstaller即可
2)用OUI靜默安裝
在解壓目錄下找到response/oggcore.rsp,修改:
- #如果機器上已經安裝了ORACLE,則只添加以下幾行即可.如果沒有安裝ORACLE,請先安裝ORACLE或者ORACEL LIENT
INSTALL_OPTION=11g
SOFTWARE_LOCATION=/opt/ogg
UNIX_GROUP_NAME=oinstall
然后執行
./runInstaller -silent -nowait -responseFile /opt/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp
- #如果機器上已經安裝了ORACLE,則只添加以下幾行即可.如果沒有安裝ORACLE,請先安裝ORACLE或者ORACEL LIENT
INSTALL_OPTION=11g
SOFTWARE_LOCATION=/opt/ogg
UNIX_GROUP_NAME=oinstall
然后執行
./runInstaller -silent -nowait -responseFile /opt/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp
3.2 創建子目錄
進入ogg的解壓目錄,執行./ggsci進入命令台,執行命令創建工作目錄:
GGSCI (OGGTEST) 1> create subdirs
3.3 添加表級別附加日志
GGSCI (OGGTEST) 2>dblogin userid ggmgr,password ggmgr
Successfully logged intodatabase.
GGSCI (OGGTEST) 3> add trandata scott.dept
Logging of supplemental redo dataenabled for table SCOTT.DEPT.
如果表沒有主鍵,需要這樣:
GGSCI (OGGTEST) 3> add trandata scott.bouns,cols(ename),nokey
cols指定ename做為keycols,nokey表示忽略表上的主鍵,這樣就能用keycols來匹配和過濾
3.4 配置mgr進程
配置管理進程mgr:
GGSCI(OGGTEST) 1> edit param mgr
PORT 7839
DYNAMICPORTLIST 7840-7939
--AUTOSTART ER *
AUTORESTART EXTRACT *,RETRIES5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
MANAGER進程參數配置說明:
PORT:指定服務監聽端口;這里以7839為例,默認端口為7809
DYNAMICPORTLIST:動態端口:可以制定最大256個可用端口的動態列表,當指定的端口不可用時,管理進程將會從列表中選擇一個可用的端口,源端和目標段的Collector、Replicat、GGSCI進程通信也會使用這些端口;
COMMENT:注釋行,也可以用--來代替;
AUTOSTART:指定在管理進程啟動時自動啟動哪些進程;
AUTORESTART:自動重啟參數設置:本處設置表示每3分鍾嘗試重新啟動所有EXTRACT進程,共嘗試5次;
PURGEOLDEXTRACTS:定期清理trail文件設置:本處設置表示對於超過3天的trail文件進行刪除。
LAGREPORT、LAGINFO、LAGCRITICAL:
定義數據延遲的預警機制:本處設置表示MGR進程每隔1小時檢查EXTRACT的延遲情況,如果超過了30分鍾就把延遲作為信息記錄到錯誤日志中,如果延遲超過了45分鍾,則把它作為警告寫到錯誤日志中。
啟動mgr進程:
starg mgr
查看mgr狀態:info mgr
3.5 配置抽取進程
GGSCI(OGGTEST) 12> add extract e_m157,tranlog,begin now #指定從log抽取,抽取時間是noe
EXTRACTadded.
GGSCI(OGGTEST) 14> add exttrail ./dirdat/em,extract e_m157,megabytes 50 #添加trail文件,
Megabytes:指定隊列大小,本處設置表示50M。
- GGSCI(OGGTEST) 14> edit param e_m157
extract
e_m157SETENV(ORACLE_SID="orcl")
SETENV(NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
userid ggmgr, password
ggmgrEXTTRAIL /opt/ogg/dirdat/em
table ogg_owner.togg;
TABLE scott.dept;#可以用scott.*
添加進程時,進程名要注意大小定
相關的語法:
ADD EXTRACT group name {, TRANLOG | , INTEGRATED TRANLOG} {, BEGIN {NOW | yyyy-mm-dd[ hh:mi:[ss[.cccccc]]]} | SCN value} [, THREADS n]
TRANLOG:指定把日志做為輸入源
INTERRATED TRANLOG:指定把logming server的LCR作為輸入源
BEGIN :NOW現在、時間、SCN
TRRADS N:RAC中指定節點
示例:
ADD EXTRACT finance, TRANLOG, BEGIN 2011-01-01 12:00:00.000000
3.6 配置傳輸進程
GGSCI(OGGTEST) 2> add extract dpend,exttrailsource ./dirdat/em #添加 傳輸進程
EXTRACT added.
GGSCI(OGGTEST) 3> add rmttrail /opt/ogg/dirdat/em, EXTRACT DPEND #添加遠程trail文件,即目標機tail文件位置
RMTTRAIL added.
GGSCI(OGGTEST) 4> edit params dpend #編輯傳輸進程配置文件
EXTRACT dpend
SETENV(NLS_LANG = "AMERICAN_AMERICA.UTF8")
USERID ggmgr, PASSWORD ggmgr
PASSTHRU
RMTHOST 10.81.2.108, MGRPORT 7839, compress
RMTTRAIL
/opt/ogg/dirdat/emTABLE Scott.dept
3.7 創建定義文件
3.7.1 創建定義文件參數
[oracle@OGGTEST ogg]$ vi /opt/ogg/dirdef/scott.def.prm
defsfile ./dirdef/scott.def , purge
userid ggmgr,password ggmgr
table scott.*;
3.7.2 創建定義文件
./defgen PARAMFILE /opt/ogg/dirdef/scott.def.prm
然后把/opt/ogg/
dirdef/scott.def這個文件復制到目標機的/opt/ogg/dirdef下
四、配置目標端OGG
4.1 安裝ogg for bigdata
4.1.1 安裝ogg for bigdata
解壓OGG FOR BIGDATA 到/opt/ogg
然后創建工作目錄:
./ggsci
ggsci>create subdirs
4.1.2 設置環境變量
ggsci>create subdirs
添加環境變量:
export LD_LIBRARY_PATH=/usr/java/jdk1.8.0_60/jre/lib/amd64/server/
路徑是JRE中
libjvm.so 和
libjsig.so 所在的目錄.
4.2 配置mgr進程
4.2.1 編輯mgr進程參數
GGSCI(OGGTEST) 1> edit param mgr
port
7839dynamicportlist 7809-7909
lagreportminutes 10
laginfoseconds 1
purgeoldextracts ./dirdat/*, usecheckpoints, minkeephours 192
配置復制進程
REPLICAT進程參數配置說明:
ASSUMETARGETDEFS:假定兩端數據結構一致使用此參數;
SOURCEDEFS:假定兩端數據結構不一致,使用此參數指定源端的數據結構定義文件,該文件需要由GlodenGate工具產生。
MAP:用於指定源端與目標端表的映射關系;
MAPEXCLUDE:用於使用在MAP中使用*匹配時排除掉指定的表;
REPERROR:定義出錯以后進程的響應,一般可以定義為兩種:
ABEND,即一旦出現錯誤即停止復制,此為缺省配置;
DISCARD,出現錯誤后繼續復制,只是把錯誤的數據放到discard文件中。
DISCARDFILE:定義discardfile文件位置,如果處理中油記錄出錯會寫入到此文件中;
SQLEXEC:在進程運行時首先運行一個SQL語句;
GROUPTRANSOPS:將小交易合並成一個大的交易進行提交,減少提交次數,降低系統IO消耗。
MAXTRANSOPS:將大交易拆分,每XX條記錄提交一次。
4.2.2 啟動mgr
ggsci>start mgr
4.3 配置HDFS handler
復制/opt/ogg/AdapterExamples/big-data/hdfs下的hdfs.props和rhdfs.prm到/opt/ogg/dirprm下
cp /opt/ogg/AdapterExamples/big-data/hdfs/* /opt/ogg/dirprm
4.3.1 配置hdfs handler
編輯hdfs.
props:
[root@BFHT5 ogg]# vi dirprm/hdfs.props
gg.handlerlist=hdfs --handler名稱
gg.handler.hdfs.type=hdfs --handler的類型
#gg.handler.hdfs.includeTokens=true
gg.handler.hdfs.maxFileSize=1g
gg.handler.hdfs.rootFilePath=/user/oracle/gg --HDFS上的存儲目錄
gg.handler.hdfs.fileRollInterval=0
gg.handler.hdfs.inactivityRollInterval=0
gg.handler.hdfs.fileSuffix=.txt
gg.handler.hdfs.partitionByTable=true
gg.handler.hdfs.rollOnMetadataChange=true
gg.handler.hdfs.authType=none
gg.handler.hdfs.format=delimitedtext --hdfs文件類型
gg.handler.hdfs.format.includeColumnNames=true --包括列名
gg.handler.hdfs.format.fieldDelimiter=CDATA[|] --字段分隔符
gg.handler.hdfs.mode=tx --工作模式tx 事務 op操作
goldengate.userexit.timestamp=utc
goldengate.userexit.writers=javawriter
javawriter.stats.display=TRUE
javawriter.stats.full=TRUE
gg.log=log4j
gg.log.level=DEBUG --日志級別,可設5個級別,默認為INFO
gg.report.time=30sec
gg.classpath=/opt/cloudera/parcels/CDH/lib/hadoop/*:/opt/cloudera/parcels/CDH/lib/hadoop/lib/*:/opt/cloudera/parcels/CDH/lib/hadoop-hdfs/*:/etc/hadoop/conf/:/opt/cloudera/parcels/CDH/lib/hadoop/lib/native/*
javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar
注意:
gg.classpath要包括hdfs的庫文件和core-site.xml路徑
4.3.2 配置復制進程
編輯hdfs.prm
[root@BFHT5 ogg]# vi dirprm/rhdfs.prm
REPLICAT rhdfs --復制進程名
setenv HADOOP_COMMON_LIB_NATIVE_DIR=/opt/cloudera/parcels/CDH/lib/hadoop/lib/native
TARGETDB LIBFILE libggjava.so SET property=dirprm/hdfs.props --使用的hdfs handler配置文件
SOURCEDEFS ./dirdef/scott.def --使用定義文件
HANDLECOLLISIONS
reperror default ,discard
discardfile ./dirrpt/r_hive00000.dsc, append, megabytes 50 --錯誤數據寫這里
REPORTCOUNT EVERY 1 MINUTES, RATE
GROUPTRANSOPS 10 --組提交
MAP scott.*, TARGET scott.*;
4.3.3 添加復制進程
ggsci>ADD REPLICAT rhdfs, EXTTRAIL /opt/ogg/dirdat/em
相關語法:
ADD REPLICAT <group_name>
[, INTEGRATED | COORDINATED [MAXTHREADS <number>]]
{
, SPECIALRUN |
, EXTFILE <filename> |
, EXTTRAIL <filename>
}
[, BEGIN {NOW | yyyy-mm-dd:hh:mm[:ss[.cccccc]]} |
, EXTSEQNO <seqno>, EXTRBA <rba>]
[, CHECKPOINTTABLE <owner.table> | NODBCHECKPOINT]
[, PARAMS <parameter file>]
[, REPORT <report file>]
[, DESC "<description>"]
[, CPU number]
[, PRI number]
[, HOMETERM device_name]
[, PROCESSNAME process_name]
4.3.4 啟動復制進程
ggsci>start rhdfs
ggserr.log 和 dirrpt/R_HDFS_debug_log4j.log 分別可以看到ogg和hdfs的日志信息
4.3.5 檢查抽取情況
如果日志中沒有報錯,檢查hdfs上相關目錄,數據是否抽取過來:
hdfs dfs -ls /user/oracle/gg/scott.dept
4.4 配置 flume handler
4.4.1 配置flume handler
復制 /opt/ogg/AdapterExamples/big-data/flume下的 custom-flume-rpc.properties flume.props rflume.prm 到/opt/ogg/dirprm/下
編輯
custom-flume-rpc.properties,改flume代理使用的主機\端口\IP
[root@BFHT5 dirprm]# vi custom-flume-rpc.properties
client.type = default
hosts = bfht5
hosts.bfht5 = 10.80.2.108:1111
batch-size = 100
connect-timeout = 20000
request-timeout = 20000
編輯 flume.props:
[root@BFHT5 dirprm]# vi flume.props
gg.handlerlist = flumehandler --handler 名稱
gg.handler.flumehandler.type=flume --handler類型
gg.handler.flumehandler.RpcClientPropertiesFile=custom-flume-rpc.properties --指定flume代理的配置文件
gg.handler.flumehandler.mode=tx
#gg.handler.flumehandler.maxGroupSize=100, 1Mb
#gg.handler.flumehandler.minGroupSize=50, 500 Kb
gg.handler.flumehandler.EventMapsTo=tx
gg.handler.flumehandler.PropagateSchema=true
gg.handler.flumehandler.includeTokens=false
gg.handler.flumehandler.format.fieldDelimiter=,
gg.handler.flumehandler.format.lineDelimiter=;
gg.handler.flumehandler.format.includeColumnNames=true
goldengate.userexit.timestamp=utc
goldengate.userexit.writers=javawriter
javawriter.stats.display=TRUE
javawriter.stats.full=TRUE
gg.log=log4j
gg.log.level=INFO
gg.report.time=30sec
gg.classpath=dirprm/:/opt/cloudera/parcels/CDH/lib/flume-ng/lib/* --要包含flume的庫
javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar
編輯
rflume.prm:
[root@BFHT5 dirprm]# vi rflume.prm
REPLICAT rflume
TARGETDB LIBFILE libggjava.so SET property=dirprm/flume.props
SOURCEDEFS ./dirdef/scott.def
HANDLECOLLISIONS
ALLOWNOOPUPDATES
discardfile ./dirrpt/r_hive00000.dsc, append, megabytes 50
REPORTCOUNT EVERY 1 MINUTES, RATE
GROUPTRANSOPS 10
MAPEXCLUDE uatxdgl.USER_INFO;
MAPEXCLUDE uatxdgl.BACKDETAILS_INFO;
MAPEXCLUDE UATXDGL.ASSISTINVESTIGATE;
MAP scott.dept, TARGET scott.dept;
4.4.2 添加復制進程
ggsci>ADD REPLICAT rflume, EXTTRAIL /opt/ogg/dirdat/em
4.4.3 啟動復制
GGSCI>start rflume
五、初始化數據
5.1 停止復制進程
GGSCI>stop rflume
5.2 源庫查詢當前SCN
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
3173410
5.3 sqoop從SCN 3173410開始抽取數據到HDFS
sqoop --import -e 'select * from scott.dept as of scn
3173410
' ....
5.4 設置復制端使用的文件和SCN,啟動復制
alter replicat fscott,extseqno 2,extrba 0 #使用scn
3173410 時的trail文件start fscott NOFILTERDUPTRANSACTIONS, aftercsn 3173410 #啟動復制進程