OGG學習筆記01-基礎概述
OGG(Oracle Golden Gate),最近幾年在數據同步、容災領域特別火,甚至比Oracle自己的原生產品DataGuard還要風光,主要是因為其跨平台、跨數據庫、跨版本的強大特性。
OGG理論概念
我們可以搜索到網上對它的簡單介紹: > Oracle Golden Gate軟件是一種基於日志的結構化數據復制備份軟件,它通過解析源數據庫在線日志或歸檔日志獲得數據的增量變化,再將這些變化應用到目標數據庫,從而實現源數據庫與目標數據庫同步。 > Oracle Golden Gate可以在異構的IT基礎結構(包括幾乎所有常用操作系統平台和數據庫平台)之間實現大量數據亞秒一級的實時復制,從而可以在應急系統、在線報表、實時數據倉庫供應、交易跟蹤、數據同步、集中/分發、容災、數據庫升級和移植、雙業務中心等多個場景下應用。同時,Oracle Golden Gate可以實現一對一、廣播(一對多)、聚合(多對一)、雙向、點對點、級聯等多種靈活的拓撲結構.目前許多客戶環境都已經在廣泛使用OGG。由於工作需要,近期我也會系統的學習下OGG,目前學習主要以OGG在Oracle數據庫之間的同步來說明一些基本概念,后續看時間情況可能了解OGG對其他主流數據庫的同步。
假設已有源數據庫和目標數據庫,且分別部署好OGG軟件。
源數據庫部署的OGG,簡稱源OGG;目標數據庫部署的OGG,簡稱目標OGG。
同步的過程就是源OGG的EXTRACT進程從源數據庫的聯機redologs中抽取獲得變化,把它寫到本地trail文件中,然后源OGG的Data pump進程再從本地trail文件中抽取變化傳給目標OGG的collector進程,目標的collector進程再把這些變化寫入目標trail文件中,最后目標OGG的Replicat進程把目標trail文件中記錄的變化應用到目標數據庫中。
如果要同步的表數量比較多或是業務有區分,需要分開管理,OGG是支持分開多個extract進程,多個datapump進程,多個replicat進程,這樣,可以啟動或停止其中任意一類同步,而不影響其他的同步。
由此,我們可以得到一張Oracle Golden Gate的簡要體系圖:
需要注意的是,每套OGG所有的進程都是由其Manager進程來管理的,也就是說Manager進程負責管理,啟動關閉其他進程。OGG用組來表示它的進程,上面簡單提到的extract、replicat這些進程,實際上需要各自的參數文件、檢查點文件等。這些內容共同組成一個組,且每個組需要有一個組名字。
可以將上面的簡要體系圖再標注一些內容,便於理解OGG實際的工作方式。
自己畫的草圖太丑,借用Oracle的一張圖:
OGG的檢查點信息,對於源OGG只能以文件形式默認存放在GGHOME/dirchk目錄下,一個組對應一個文件。
而對於目標OGG檢查點信息可以存放在數據庫表中,且建議存放到數據庫表中。
對於源數據庫,如果要使用OGG,需要配置supplemental logging,原因是OGG相當於邏輯同步,除了要記錄被修改的記錄,還要把能夠標識這條記錄的信息同時記錄在日志中。這樣的話,Oracle默認情況是不達標的,需要額外開啟supplemental logging才可以。
具體做法是:在數據庫級別開啟最小附加日志,在需要同步的表級別開啟詳細附加日志。
#數據庫級別開啟最小附加日志:
SQL> alter database add supplemental log data;
#表級別開啟詳細附加日志(這里舉例是jy用戶下的t_second表):
GGSCI> add trandata jy.t_second
對於目標數據庫,配置檢查點信息到目標數據庫表中,具體做法:
#1.目標GG的全局參數(./globals)配置
checkpointtable ggt.chkpt
#2.命令添加checkpointtable
GGSCI> add checkpointtable ggt.chkpt
復制進程可以指定checkpointtable 從而使用數據庫表記錄檢查點信息。
OGG安裝介紹
OGG介質下載,在ORACLE官網就有提供最新版本下載,如果需要下載歷史版本的,就需要MOS賬號。 下載地址: https://edelivery.oracle.com OGG的安裝也非常簡單,在期望的安裝目錄下,直接解壓壓縮文件即可。[ogg@oradb30 ~]$ cd /u01/app
[ogg@oradb30 app]$ ls
oracle
[ogg@oradb30 app]$ mkdir ogg
[ogg@oradb30 app]$ cd ogg/
[ogg@oradb30 ogg]$ pwd
/u01/app/ogg
[ogg@oradb30 ogg]$ tar xvf /u01/media/fbo_ggs_Linux_x64_ora10g_64bit.tar
為了便於管理維護,我們創建新的操作系統用戶和數據庫用戶,專門給OGG使用。
#創建系統用戶ogg,隸屬於oinstall組
useradd ogg -g oinstall
環境變量,除了設置OGG自己,還需要設置可以訪問到庫文件,這也是為何將系統用戶ogg隸屬於oinstall組,保證其有權限訪問oracle安裝目錄的庫文件。
export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export GG_HOME=/u01/app/ogg
export PATH=$GG_HOME:$PATH
確定ggsci可以正常使用,然后使用create subdirs創建OGG的子目錄,最后配置好Manager。
#1.確定ggsci可以正常使用
[ogg@oradb30 ~]$ ggsci
ggsci: error while loading shared libraries: /u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1: cannot restore segment prot after reloc: Permission denied
我這里遇到的這個錯誤關鍵點是“cannot restore segment prot after reloc: Permission denied”是因為主機系統SELinux開啟的原因。關閉SELinux即可解決。
[root@oradb30 ~]# su - ogg
[ogg@oradb30 ~]$ cd /u01/app/ogg/
[ogg@oradb30 ogg]$ ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO
Linux, x64, 64bit (optimized), Oracle 10g on Apr 23 2012 07:30:46
Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
GGSCI (oradb30) 1>
#2.使用create subdirs創建OGG的子目錄
GGSCI (oradb30) 1> create subdirs
Creating subdirectories under current directory /u01/app/ogg
Parameter files /u01/app/ogg/dirprm: already exists
Report files /u01/app/ogg/dirrpt: created
Checkpoint files /u01/app/ogg/dirchk: created
Process status files /u01/app/ogg/dirpcs: created
SQL script files /u01/app/ogg/dirsql: created
Database definitions files /u01/app/ogg/dirdef: created
Extract data files /u01/app/ogg/dirdat: created
Temporary files /u01/app/ogg/dirtmp: created
Stdout files /u01/app/ogg/dirout: created
#3.配置好Manager
GGSCI (oradb30) 2> edit param mgr
port 7777
GGSCI (oradb30) 3> info mgr
Manager is DOWN!
GGSCI (oradb30) 4> start mgr
Manager started.
GGSCI (oradb30) 5> info mgr
Manager is running (IP port oradb30.7777).
后續extract、replicate等OGG實際工作的進程(組)配置,將在下篇《OGG學習筆記02-單向復制配置實例》詳細說明。