OGG到OGGAdapter配置詳情-從Oracle直接抽取成csv文件


Oracle Golden Gate是Oracle旗下一款支持異構平台之間高級復制技術,是Oracle力推一種HA高可用產品,簡稱“OGG”,可以實現Active-Active 雙業務中心架構

1.1. 目的 
本文檔描述OGG的相關配置和實際操作教程,旨在能夠初步了解掌握OGG的原理和使用方法 
1.2. 定義、業務術語、縮略語 
Oracle Golden Gate有源端和目標端,源端捕獲日志發送到目標端應用,這個過程分為六步驟 
 捕獲:實時捕獲交易日志(已提交數據),包含DML和DDL,並可根據規則進行過濾 
 隊列:把捕獲的日志數據加載入隊列(寫入trail文件),這是可選項,為了提高安全性,怕網絡傳丟了。 也可以不入隊列,直接從redo buffer傳遞給目標端 
 數據泵:將trail文件廣播到不同的目標端 
 網絡:從源網絡壓縮加密后傳送到目的網絡 
 接收隊列:接收從源端傳過來的trail文件 
 交付:把trail文件內容轉換成SQL語句在目標庫執行 雙向復制:在把另一端重新配置成源端,即可實現雙向復制,這就是Active-Active雙業務中心 
Golden Gate進程 
 Manager進程:這是GG全局主進程,它是GG守護進程統籌全局,它可以啟動、監控、終止Golden Gate的其它進程,收集錯誤報告及事件,分配數據存儲空間,發布閥值告警等,在源端和目標端有且只有一個Manager進程。 
 Extract進程:運行在源端的進程,實時捕獲交易數據,可以直接在redo buffer捕獲傳遞到目標端,也可以在redo buffer捕獲先寫入trail隊列在傳遞到目標端。非Oracle庫支持從數據表捕獲數據。 
 Pump進程:運行在源端的進程,將源端產生的本地trail文件廣播到不同的目標端,pump進程本質是extract進程的一種特殊形式,如果不使用trail文件,那么extract進程在捕獲完交易日志后直接傳遞到目標端,生成遠程trail文件。 
 Collector進程:運行在目標端的進程,專門接收從源端傳過來的trail文件日志生成隊列。 
 Delivery進程:運行在目標端的進程,通常我們也把它叫做replicat進程,是數據傳遞的最后一站,負責讀取遠程trail文件內容,解析為SQL語句在目標庫上執行。 
1.3. 參考資料 
 《OGG MaxCompute插件.pdf》; 
 《OGG環境搭建手冊.pdf》; 
 《Oracle Golden Gate圖文並茂快速掌握.pdf》 
1.4. 原理特點 
 實時數據復制 
 異構平台數據同步 
 支持斷點續傳,不影響系統連續運行 
 高性能,屬於輕量級軟件 
 保證數據引用完整性和事物一致性 
 整合ETL Tools Message Service 
 靈活拓撲結構 1:1 1:N N:1 N:N 雙向復制 
 復制沖突檢測和解決 
 支持數據壓縮和加密 
 TCP/IP WAN LAN 
 根據事務大小和數量自動管理內存 
 支持多活業務中心 
 以交易數據為單位復制,保證交易一致性 
 支持數據過濾和轉換,可自定義基於表和行的過濾規則,實時在異構環境下轉換數據

2. 安裝使用

2.1. 下載安裝 
配置:源端數據庫192.168.2.78 實例名orcl 
目標數據庫192.168.2.78 實例名orcl 
安裝OGG 
需要下載兩個文件,源端安裝OGG,目標端安裝Adapters 
安裝包下載 
http://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html 
然后解壓安裝,選擇靜默安裝 
源端配置/response/oggcore.rsp文件 
有兩個需要注意的地方 
INSTALL_OPTION=ORA11g –oracle版本是多少就填多少 
UNIX_GROUP_NAME=oinstall –這個組名需要填對,可以通過ll命令查看文件夾屬性組名,否則會報錯,還有每次重新安裝時都要把以前生成的文件全部del掉,不然會報錯 
靜默安裝步驟: 
./runInstaller -silent -responseFile {YOUR_OGG_INSTALL_FILE_PATH}/response/oggcore.rsp 
具體操作參見 
https://help.aliyun.com/document_detail/28294.html?spm=5176.doc28291.6.593.mdVnrX 
2.2. 雙端配置 
2.2.1. 源端數據庫配置 
以dba身份進入數據庫:sqlplus / as sysdba 
*# 創建獨立的表空間,這個路徑根據自己安裝的oracle路徑填寫* 
create tablespace ATMV datafile ‘/home/oracle/u01/app/oracle/oradata/uprr/ATMV.dbf’ size 100m autoextend on next 50m maxsize unlimited; 
*# 創建ogg用戶,密碼也為ogg,也可以不用創建新用戶,但是一定要要給使用ogg的用戶賦予dba權限* 
create user ogg identified by ogg default tablespace ATMV; 
*# 給ogg用戶賦予充分的權限以便ogg正常使用* 
grant connect,resource,dba to ogg; 
*# 檢查附加日志情況,若是返回YES則代表日志已開啟最小補全日志* 
Select SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI, SUPPLEMENTAL_LOG_DATA_FK, SUPPLEMENTAL_LOG_DATA_ALL from v$database; 
*# 增加數據庫附加日志,可以指示數據庫在日志中添加額外信息到日志流中,以支持基於日志的工具如ogg,幫助ogg目標端分析識別修改的數據* 
alter database add supplemental log data; 
alter database add supplemental log data (primary key, unique,foreign key) columns; 
*# rollback,回滾機制,幫助數據庫回到某一時間點的數據,OGG使用時可以不配置這一步* 
alter database drop supplemental log data (primary key, unique,foreign key) columns; 
alter database drop supplemental log data; 
*# 全字段模式,開啟補全日志* 
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; 
*# 開啟數據庫強制日志模式,無論什么操作都進行redo的寫入,一些nologging的操作也會寫如日志* 
alter database force logging; 
*# 執行marker_setup.sql 腳本,會讓你填寫用戶名,這些腳本在ogg安裝文件夾里* 
@marker_setup.sql 
*# 執行@ddl_setup.sql* 
@ddl_setup.sql 
*# 執行role_setup.sql* 
@role_setup.sql 
*# 給ogg用戶賦權* 
grant GGS_GGSUSER_ROLE to ogg_test; 
*# 執行@ddl_enable.sql,開啟DDL trigger* 
@ddl_enable.sql 
*# 執行優化腳本* 
@ddl_pin ogg_test 
*# 安裝sequence support* 
@sequence.sql 
alter table sys.seq$ add supplemental log data (primary key) columns; 
2.2.2. 源端mgr配置 
通過./ggsci 進入命令行模式 
創建必須目錄GGSCI>create subdirs 
源端配置要配置好mgr(類似於主機的cpu),extract(進程)和pump(策略) 
 配置mgr 
GGSCI> edit params mgr 
PORT 7839 –端口號可以隨意配置,本機傳本機端口號要不同 
DYNAMICPORTLIST 7840-7849 
USERID ogg, PASSWORD ogg 
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 7 
LAGREPORTHOURS 1 
LAGINFOMINUTES 30 
LAGCRITICALMINUTES 45 
PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7 
PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7 
 啟動mgr: start mgr 
運行日志在dirrpt文件夾下 
 查看mgr狀態:info mgr 
 查看mgr配置:view params mgr 
2.2.3. 源端extract配置 
 配置extract 
GGSCI>edit params extract –extract是組名可以任取 
EXTRACT extract 
SETENV (NLS_LANG=” AMERICAN_AMERICA.ZHS16GBK”) 
–通過env查看本機獲取這個NLS_LANG 
setenv (ORACLE_SID = orcl) 
USERID ogg, PASSWORD ogg 
EXTTRAIL ./dirdat/st 
DYNAMICRESOLUTION 
TABLE OGG.*; 
 增加該進程 GGSCI> add ext extract,tranlog, begin now 
2.2.4. 源端pump配置 
 配置pump 
GGSCI>edit params pump –pump是組名可以任取 
EXTRACT pump 
setenv (NLS_LANG = “AMERICAN_AMERICA.ZHS16GBK”)  #這里改為了UTF-8之后失敗,使用這個配置是對的
PASSTHRU 
RMTHOST 192.168.2.78, MGRPORT 8839, COMPRESS 
RMTTRAIL ./dirdat/st 
DYNAMICRESOLUTION 
TABLE OGG.*; 
 增加抽取進程,開始進程之前目標端一定要配置好,否則會報錯 
GGSCI> add ext pump,exttrailsource ./dirdat/st 
2.2.5. 生成def表定義文件 
 編輯defgen 
GGSCI> edit params defgen 
DEFSFILE ./dirdef/ogg.def 
USERID ogg, PASSWORD ogg 
table OGG.*; 
 在shell中執行如下命令,生成ogg.def,並把這個ogg.def 拷貝到目標端dirdef下 
./defgen paramfile ./dirprm/defgen.prm 
2.2.6. 目標端配置並開啟 
 解壓Ada文件並運行./ggsci 
 GGSCI>create subdirs 
 配置mgr 
GGSCI> edit param mgr 
PORT 8839 
DYNAMICPORTLIST 8840-8849 
 配置接收進程 
GGSCI> edit param ffwriter 
EXTRACT ffwriter 
SOURCEDEFS ./dirdef/ogg.def 
CUSEREXIT ./flatfilewriter.so CUSEREXIT PASSTHRU INCLUDEUPDATEBEFORES, PARAMS “./dirprm/ffue.properties” 
TABLE OGG.*; 
 把源端生成的ogg.def 拷貝到目標端dirdef文件夾下 
 把目標端下這個文件/AdapterExamples/file-writer/ ffue.properties拷貝到目標端dirprm文件夾下 
 啟動mgr:start mgr 
 添加進程:ADD EXTRACT ffwriter, EXTTRAILSOURCE dirdat/st 
 啟動進程:start ffwriter 
當看到mgr 和ffwriter狀態都是running時,說明目標端配置完成,現在可以去調整源端進行測試

#在虛擬機上start失敗,錯誤提示:

2018-11-01 02:52:30  INFO    OGG-01635  BOUNDED RECOVERY: reset to initial or altered checkpoint.

2018-11-01 02:52:30  INFO    OGG-01815  Virtual Memory Facilities for: BR
    anon alloc: mmap(MAP_ANON)  anon free: munmap
    file alloc: mmap(MAP_SHARED)  file free: munmap
    target directories:
    /data/ogg/oggserver/BR/EXT01.

Bounded Recovery Parameter:
BRINTERVAL = 4HOURS
BRDIR      = /data/ogg/oggserver

2018-11-01 02:52:30  INFO    OGG-01851  filecaching started: thread ID: 140736980846336.

2018-11-01 02:52:30  INFO    OGG-01815  Virtual Memory Facilities for: COM
    anon alloc: mmap(MAP_ANON)  anon free: munmap
    file alloc: mmap(MAP_SHARED)  file free: munmap
    target directories:
    /data/ogg/oggserver/dirtmp.

2018-11-01 02:52:30  WARNING OGG-01590  cm_vm_max: failed in call to: VMF_probe  error code: 11 (Resource temporarily unavailable).

Source Context :
  SourceModule            : [ggapp.cachemgr]
  SourceID                : [/scratch/aime/adestore/views/aime_adc4150378/oggcore/OpenSys/src/gglib/ggapp/cachemgr/cmgr_restore.c]
  SourceFunction          : [cm_init_vm_facilities]
  SourceLine              : [2450]
  ThreadBacktrace         : [13] elements
                          : [/data/ogg/oggserver/libgglog.so(CMessageContext::AddThreadContext()+0x1b) [0x7fffed936f2b]]
                          : [/data/ogg/oggserver/libgglog.so(CMessageFactory::CreateMessage(CSourceContext*, unsigned int, ...)+0x134) [0x7fffed930f84]]
                          : [/data/ogg/oggserver/libgglog.so(_MSG_ERR_CACHEOBJ_FUNCTION_FAILED(CSourceContext*, char const*, CMessageFactory::MessageDisposition)+0x30) [0x7fffed912aec]]
                          : [/data/ogg/oggserver/extract() [0x698242]]
                          : [/data/ogg/oggserver/extract() [0x6997b9]]
                          : [/data/ogg/oggserver/extract(CM_cache_init(pool_info*, char const*, extract_vals*)+0x58) [0x69a668]]
                          : [/data/ogg/oggserver/extract() [0x5e9b5a]]
                          : [/data/ogg/oggserver/extract(ggs::gglib::MultiThreading::MainThread::ExecMain()+0x60) [0x6c7e70]]
                          : [/data/ogg/oggserver/extract(ggs::gglib::MultiThreading::Thread::RunThread(ggs::gglib::MultiThreading::Thread::ThreadArgs*)+0x14d) [0x6c90ed]]
                          : [/data/ogg/oggserver/extract(ggs::gglib::MultiThreading::MainThread::Run(int, char**)+0xb1) [0x6c91d1]]
                          : [/data/ogg/oggserver/extract(main+0x3b) [0x5eb26b]]
                          : [/lib64/libc.so.6(__libc_start_main+0xfd) [0x3793e1ed1d]]
                          : [/data/ogg/oggserver/extract() [0x556f39]]

2018-11-01 02:52:30  ERROR   OGG-01264  The call to the cm_vm_max() function from line 2450 in cm_init_vm_facilities() returned an unexpected value.

 

在物理機上卻沒有報錯,目前猜測是分配內存失敗。下面是物理機正常情況的日志:

2018-11-01 10:39:53  INFO    OGG-01851  filecaching started: thread ID: 140242236507904.

2018-11-01 10:39:53  INFO    OGG-01815  Virtual Memory Facilities for: COM
    anon alloc: mmap(MAP_ANON)  anon free: munmap
    file alloc: mmap(MAP_SHARED)  file free: munmap
    target directories:
    /data/oggdata/oggadapter_error/dirtmp.

CACHEMGR virtual memory values (may have been adjusted)
CACHEPAGEOUTSIZE (default):               8M
PROCESS VM AVAIL FROM OS (min):       24.35G
CACHESIZEMAX (strict force to disk):  22.35G
CACHEVMPAGEOUTMAX:                       64M

2018-11-01 10:39:53  WARNING OGG-01842  CACHESIZE PER DYNAMIC DETERMINATION (16G) LESS THAN RECOMMENDED: 64G (64bit system)
vm found: 24.35G
Check swap space. Recommended swap/extract: 128G (64bit system

 

2.2.7. 源端進程開啟 
GGSCI> start extract 
GGSCI> start pump 
通過info all 查看進程狀態,若進程顯示running則正常運行,若是ABENDING 或者STOPPED則代表啟動錯誤 
通過view report 是進程名)來查看運行日志,空格到最后會有報錯日志

這個報錯已經說得很清楚了可以通過下面命令來解決 
GGSCI>ADD EXTRAIL ./dirdat/st , extract pump 
至於ERROR OGG-10668 ABENDING 這個錯誤是代表着配置有錯誤,即只要有錯誤配置這個ERROR就會出現,所以不用管它,只需更改好正確配置,錯誤標志就會消失 
當配置的pump和extract進程都顯示RUNNING時,即代表源端,目標端都已准備好

2.3. 測試OGG

 在pl/sql里插入ogg.test表一行數據,並點擊提交commit

 然后在目標端dirout文件夾下就可以看到有文件傳進來,文件是由時間戳來命名的

 Strings/cat/more/vim等命令查看該dsv文件,即可得到更改訊息事件id,事件類型,發生時間,表,表數據等,其中事件類型有三類(I:insert,D:delete, U:update),這個文件也可以通過datax配置path路徑上雲 
 GoldenGate File Adapter提供了兩個文件,用來生成數據文件。其中properties中有多個文件格式控制屬性,通過設置這些屬性,即可以控制生成文件的格式,它的文件屬性如下: 
dsvwriter.includecolnames=false 
是否在字段值前放置字段名稱,缺省為false 
dsvwriter.files.onepertable=true 
每個表格各生成一個文件,還是所有數據放入一個文件,缺省為true 
dsvwriter.files.data.rootdir=./dirout 
數據文件輸出目錄 
dsvwriter.files.data.ext=_data.dsv 
已就緒的數據文件擴展名 
dsvwriter.files.data.tmpext=_data.dsv.temp 
處理中的數據文件 
dsvwriter.files.data.rollover.time=1800 
數據文件由“處理中”切換為“就緒”的最大時間(秒) 
dsvwriter.files.data.rollover.size=104857600 
數據文件由“處理中”切換為“就緒”的最大文件尺寸(KB) 
dsvwriter.files.data.norecords.timeout=1800 
當無記錄寫入時,最多等待時間(秒)即切換數據文件為“就緒”,缺省120秒 
dsvwriter.files.rolloveronshutdown=true 
當本屬性為true時,如果Extract進程停止,則所有空白“處理中”文件被刪除,所有有數據的“處理中”文件切換為“就緒”文件。當本屬性為false時,如果Extract進程停止,則所有空白“處理中”文件被刪除,所有有數據的“處理中”文件狀態不變。 
dsvwriter.dsv.fielddelim.chars=| 
數據文件中的字段分隔符 
dsvwriter.dsv.linedelim.chars=\n 
數據文件中的行終結符號 
dsvwriter.dsv.quotes.chars=” 
數據文件中的引號符號 
dsvwriter.dsv.quotes.escaped.chars=”” 
數據文件中的escape符號 
dsvwriter.metacols=opcode,timestamp 
數據文件中每行數據之前的元數據: 
Opcode - I,U與D代表Insert, Update和Delete Timestamp - 記錄的提交時間戳 
dsvwriter.metacols.opcode.insert.chars=I 
數據文件中代表Insert操作的字符 
dsvwriter.metacols.opcode.update.chars=U 
數據文件中代表Update操作的字符 
dsvwriter.metacols.opcode.delete.chars=D 
數據文件中代表Delete操作的字符 
dsvwriter.files.formatstring=pump_%s_%t_%d_%05n 
數據文件名字格式: %s - schema 
%t - table 
%d- timestamp 
%05n - 5位序號

2.4. 備注

GGSCI 常用的操作有edit params * –編輯mgr,pump,extract這些文件 
start mgr –啟動mgr 
start extract –啟動某進程 
view report * –查看進程日志 
view params * –查看mgr等的配置信息 
info all –查看信息

 

參考:

https://www.waitig.com/oggadapters安裝部署配置文檔.html


免責聲明!

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



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