使用Goldengate 实现Oracle for Oracle 单向数据同步
實驗環境
數據源端: ?host1 ip 192.168.199.163 ?
數據目標端: host2 ip 192.168.199.104
兩臺機器都安裝?http://lqding.blog.51cto.com/9123978/1694971?文中描述安裝配置好了Goldengate 。
要實現數據的同步,Oracle源端必須滿足如下設置
Oracle需要運行在歸檔模式下
2. 開啟日志附加屬性
SQL>?ALTER?DATABASE?ADD?SUPPLEMENTAL?LOG?DATA;Database?altered.SQL>?ALTER?SYSTEM?SWITCH?LOGFILE;System?altered.ogg安裝目錄下提供了一些demo的sql
我們使用demo_ora_create.sql在源和目的端都創建兩張表,在源端使用demo_ora_insert.sql插入數據。
host1
SQL>?alter?user?scott?identified?by?tiger?account?unlock;User?altered.SQL>?grant?resource?to?scott;??#ggsci?登錄數據庫時需要該權限 Grant?succeeded.SQL>?grant?select?any?dictionary?to?scott;?#?add?trandata時需要該權限Grant?succeeded. SQL>?conn?scott/tiger Connected. SQL>?@demo_ora_create.sql SQL>?@demo_ora_insert.sqlhost2
為需要同步的表,添加附加日志
GGSCI?(localhost.localdomain)?1>?dblogin?userid?scott,?password?tiger Successfully?logged?into?database.GGSCI?(localhost.localdomain)?2>?add?trandata?scott.tcustmerLogging?of?supplemental?redo?data?enabled?for?table?SCOTT.TCUSTMER.GGSCI?(localhost.localdomain)?3>?add?trandata?scott.tcustordLogging?of?supplemental?redo?data?enabled?for?table?SCOTT.TCUSTORD.一、初始化加載數據
在源端配置一個初始化Extract,用來同步表中現有數據
GGSCI?(localhost.localdomain)?7>?ADD?EXTRACT?EINILOAD,?SOURCEISTABLE EXTRACT?added.ADD EXTRACT命令用來添加一個EXTRACT, EINILOAD為Extract的group name 。SOURCEISTABLE表示數據源為表。
查看Extract的信息
GGSCI?(localhost.localdomain)?9>?INFO?EXTRACT?*,?TASKSEXTRACT????EINILOAD??Initialized???2015-09-11?15:25???Status?STOPPED Checkpoint?Lag???????Not?Available Log?Read?Checkpoint??Not?AvailableFirst?Record?????????Record?0 Task?????????????????SOURCEISTABLE配置初始化加載的捕獲參數
GGSCI?(localhost.localdomain)?10>?edit?params?EINILOAD-- --?GoldenGate?Initial?Data?Capture --?for?TCUSTMER?and?TCUSTORD -- EXTRACT?EINILOAD USERID?system,?PASSWORD?"oracle" RMTHOST?192.168.199.104,?MGRPORT?7809 RMTTASK?REPLICAT,?GROUP?RINILOAD TABLE?SCOTT.TCUSTMER; TABLE?SCOTT.TCUSTORD;在目標端,配置一個REPLICAT
GGSCI?(localhost.localdomain)?2>?ADD?REPLICAT?RINILOAD,?SPECIALRUN REPLICAT?added.查看REPLICAT信息
GGSCI?(localhost.localdomain)?4>?info?replicat?*,?tasksREPLICAT???RINILOAD??Initialized???2015-08-22?14:18???Status?STOPPED Checkpoint?Lag???????00:00:00?(updated?00:02:50?ago) Log?Read?Checkpoint??Not?Available Task?????????????????SPECIALRUN配置Replicat參數
啟動Extract
GGSCI?(localhost.localdomain)?11>?start?extract?einiloadSending?START?request?to?MANAGER?... EXTRACT?EINILOAD?starting查看日志
GGSCI?(localhost.localdomain)?21>?view?report?einiload如果有報錯,查找原因并解決
Processing?table?SCOTT.TCUSTMERProcessing?table?SCOTT.TCUSTORD*********************************************************************** *???????????????????**?Run?Time?Statistics?**?????????????????????????* ***********************************************************************Report?at?2015-09-11?16:23:40?(activity?since?2015-09-11?16:23:33)Output?to?RINILOAD:From?Table?SCOTT.TCUSTMER:#???????????????????inserts:?????????2#???????????????????updates:?????????0#???????????????????deletes:?????????0#??????????????????discards:?????????0 From?Table?SCOTT.TCUSTORD:#???????????????????inserts:?????????2#???????????????????updates:?????????0#???????????????????deletes:?????????0#??????????????????discards:?????????0REDO?Log?StatisticsBytes?parsed????????????????????0Bytes?output??????????????????574日志顯示,已成功同步數據。
到目的庫上驗證
SQL>?select?count(*)?from?tcustmer;COUNT(*) ----------2SQL>?select?count(*)?from?tcustord;COUNT(*) ----------2二、配置數據實時同步
源端,配置一個實時Extract?
GGSCI?(localhost.localdomain)?22>?ADD?EXTRACT?EORAKK,?TRANLOG,?BEGIN?NOW,?THREADS?1 EXTRACT?added.編輯Extract的參數文件
GGSCI?(localhost.localdomain)?23>?EDIT?PARAMS?EORAKK-- --?Change?Capture?parameter?file?to?capture --?TCUSTMER?and?TCUSTORD?Changes -- EXTRACT?EORAKK USERID?system,?PASSWORD?oracle RMTHOST?192.168.199.104,?MGRPORT?7809 RMTTRAIL?./dirdat/KK TABLE?SCOTT.TCUSTMER; TABLE?SCOTT.TCUSTORD;為Extract添加遠端tail file,也就是說這個tail file是在目的端生成的。
GGSCI?(localhost.localdomain)?24>?ADD?RMTTRAIL?./dirdat/KK,?EXTRACT?EORAKK,?MEGABYTES?5 RMTTRAIL?added.驗證結果
啟動Extract 進程
GGSCI?(localhost.localdomain)?29>?start?extract?eorakkSending?START?request?to?MANAGER?... EXTRACT?EORAKK?starting驗證結果
目標端,配置REPLICAT
安裝checkpoint表
配置checkpoint表的名稱
GGSCI?(localhost.localdomain)?33>?EDIT?PARAMS?./GLOBALSHECKPOINTTABLE?system.ggschkpt生成checkpoint表?
添加Replicat
GGSCI?(localhost.localdomain)?3>?ADD?REPLICAT?RORAKK,?EXTTRAIL?./dirdat/KK REPLICAT?added.創建Replicat的參數文件
GGSCI?(localhost.localdomain)?4>?EDIT?PARAMS?RORAKK-- --?Change?Delivery?parameter?file?to?apply --?TCUSTMER?and?TCUSTORD?Changes -- REPLICAT?RORAKK USERID?system,?PASSWORD?oracle HANDLECOLLISIONS ASSUMETARGETDEFS DISCARDFILE?./dirrpt/RORAKK.DSC,?PURGE MAP?scott.tcustmer,?TARGET?scott.tcustmer; MAP?scott.tcustord,?TARGET?scott.tcustord;啟動Replicat
GGSCI?(localhost.localdomain)?5>?start?replicat?rorakkSending?START?request?to?MANAGER?... REPLICAT?RORAKK?starting驗證結果
GGSCI?(localhost.localdomain)?6>?info?replicat?rorakkREPLICAT???RORAKK????Last?Started?2015-08-22?15:49???Status?RUNNING Checkpoint?Lag???????00:00:00?(updated?00:00:08?ago) Log?Read?Checkpoint??File?./dirdat/KK000000First?Record??RBA?1050驗證數據同步
在源數據庫,執行如下腳本,對兩個表進行insert、update、delete操作
[oracle@localhost?ogg]$?sqlplus?scott/tigerSQL*Plus:?Release?11.2.0.1.0?Production?on?Fri?Sep?11?17:58:17?2015Copyright?(c)?1982,?2009,?Oracle.??All?rights?reserved.Connected?to: Oracle?Database?11g?Enterprise?Edition?Release?11.2.0.1.0?-?64bit?Production With?the?Partitioning,?OLAP,?Data?Mining?and?Real?Application?Testing?optionsSQL>?@/u01/app/ogg/demo_ora_misc.sql查看源表中的數據
SQL>?select?count(*)?from?tcustmer;COUNT(*) ----------5SQL>?select?count(*)?from?tcustord;COUNT(*) ----------3查看目的表的數據
SQL>?select?count(*)?from?tcustmer;COUNT(*) ----------5SQL>?select?count(*)?from?tcustord;COUNT(*) ----------3數據已同步
三、為同步添加data pump
如果沒有data pump,Extract將Trail file寫到遠程機器上。如果為Extract配置了Data Pump。那么Extract將Trail file寫到本地。然后Trail 文件由Data Pump傳輸到遠端。
先修改Extract的配置
將參數文件中的RMTTRAIL ./dirdat/kk 改為 EXTTRAIL ./dirdat/KK
2. 刪除Extract的遠程Trail
GGSCI?(localhost.localdomain)?7>?DELETE?RMTTRAIL?./dirdat/KK Deleting?extract?trail?./dirdat/KK?for?extract?EORAKK3. 增加一個本地Trail?
4. 新增Data pump?
GGSCI?(localhost.localdomain)?12>?ADD?EXTRACT?EPMPKK,?EXTTRAILSOURCE?./dirdat/KK EXTRACT?added.Data pump本質上也是一個Extract,只是類型不同而已
為data pump配置參數文件
GGSCI?(localhost.localdomain)?14>?edit?params?epmpkk-- --?Data?Pump?parameter?file -- EXTRACT?EPMPKK PASSTHRU RMTHOST?192.168.199.104,?MGRPORT?7809 RMTTRAIL?./dirdat/KK TABLE?SCOTT.TCUSTMER; TABLE?SCOTT.TCUSTORD;為Data Pump添加遠端Trail
GGSCI?(localhost.localdomain)?15>?add?rmttrail?./dirdat/KK,?EXTRACT?EPMPKK RMTTRAIL?added.啟動Extract、Data Pump
GGSCI?(localhost.localdomain)?16>?start?extract?eorakkSending?START?request?to?MANAGER?... EXTRACT?EORAKK?startingGGSCI?(localhost.localdomain)?17>?start?extract?epmpkkSending?START?request?to?MANAGER?... EXTRACT?EPMPKK?starting驗證數據同步
在源端,刪除兩個表的內容
SQL>?delete?from?tcustmer;5?rows?deleted.SQL>?delete?from?tcustord;3?rows?deleted.SQL>?commit;Commit?complete.查看目的端表內容
SQL>?select?*?from?tcustmer;no?rows?selectedSQL>?select?*?from?tcustord;no?rows?selected轉載于:https://blog.51cto.com/lqding/1695162
總結
以上是生活随笔為你收集整理的使用Goldengate 实现Oracle for Oracle 单向数据同步的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker 1.8.2 源代码编译
- 下一篇: linux加密解密基础、PKI及SSL、