Oracle GoldenGate 詳解


一、Oracle GoldenGate介紹

  GoldenGate軟件是一種基於日志的結構化數據復制軟件。GoldenGate 能夠實現大量交易數據的實時捕捉、變換和投遞,實現源數據庫與目標數據庫的數據同步,保持亞秒級的數據延遲。

1、應用場景

1)高可用容災

2)數據庫遷移、升級(支持跨版本、異構數據庫、零宕機時間、亞秒級恢復)

3)實時數據集成(支持異構數據庫、多源數據庫)

2、常用拓撲

(下圖來自網絡)

3、支持的平台和數據庫

我這邊幾年前做過oracle到mysql的同步,也作過mysql到mysql的同步(支持不是很好,而且有DDL和DML的限制、字段類型限制等)

(下圖來自網絡)

4、OGG同步原理

源端通過抽取進程提取redo log或archive log日志內容,通過pump進程(TCP/IP協議)發送到目標端,最后目標端的rep進程接收日志、解析並應用到目標端,進而完成數據同步。

5、OGG相關進程

GoldenGate主要包含Manager進程、Extract進程、Pump進程、Replicat進程
1)Manager進程
不管是源端還是目標端必須並且只能有一個Manager進程,可以啟動、關閉、監控其他進程的健康狀態,報告錯誤事件、分配數據存儲空間,發布閥值報告等。
2)Extract 進程
運行在數據庫源端,負責從源端數據表或日志中捕獲數據,然后捕獲到的將寫到本地trail文件。 想要復制的對象數據發生改變時,Extract進程 就會進行捕捉,當事務提交時,所有和該事務相關的日志記錄被以事務為單元順序的記錄到trail文件中。Extract進程利用其內在的checkpoint機制,周期性的記錄其讀寫的位置,實現斷點同步。
Extract其實有兩種捕獲模式
A.傳統模式
抽取方式:基於在線日志或歸檔日志進行抽取

B.Integrated模式( Oracle Goldengate 11g版本)
抽取方式: Logmining server負責以LCR格式從數據庫日志中捕獲數據變化,extract進程再將這些數據存入 trail文件。

傳統模式是大家非常熟悉的模式啦,平時搭建的都是傳統模式。但是Integrated模式是 Oracle Goldengate 11g版本才出現的,很多人會比較陌生,有興趣的朋友也可以去了解一番。
3)Pump進程(可選)
運行在數據庫源端, 其作用是將源端產生的本地trail文件,把trail以數據塊的形式通過TCP/IP 協議發送到目標端。
但是如果如果不使用trail文件,那么extract進程在抽取完數據以后,直接投遞到目標端,生成遠程trail文件,那么這時候,Pump進程就可以不用配置(存在)了。
4)Replicat進程
運行在數據庫目標端 ,負責讀取源端傳送到目標端的trail文件中的內容,並將其解析為DML或 DDL語句, 然后應用到目標數據庫中。
Replicat兩種模式
A.傳統模式:基於sql交付,最常用的一種方式

B.Integrated模式(OGG12c)
對應這種模式,官方文檔是這樣描述的
Replicat 操作的過程如下:
讀取源端傳輸過來的 trail 文件;執行data 數據過濾和轉換操作;
DML操作:根據commit順序,構造LCR;DDL 操作:Replicat 進程直接apply;
Replicat 通過lightweight streaming 接口和目標庫后台進程(Database inbound server)建立 連接;
將LCR傳輸到inbound server,然后apply 這些數據到目標數據庫。

兩個Apply Servers的Integrated模式
其實對於進程的Capture and Apply Modes可以參考一下官方文檔:
5) Server Collec tor進程
運行於目標端,作用就是把Extract/Pump進程投遞過來的數據塊重新組裝成Trail文件。運行期間無需任何配置。是一個完全自動的進程
好了對GoldenGate的進程介紹到處就告一段落了。

6、OGG相關目錄

dirbdb
dirchk:檢查點文件,記錄了該進程的檢查點信息
dircrd
dirdat:trail日志文件,存放收取接手的日志文件
dirdef:用來存放通過DEFGEN工具生成的源或目標端數據定義文件
dirdmp
dirout
dirpcs:用來存放進程狀態文件
dirprm:用來存放參數文件,該進程所配置的參數(edit param 進程組名   就是配置該文件)
dirrpt:用來存放進程報告(report)文件,可以查看該進程運行時的報錯信息等(view report 進程組名  就是看該文件)
dirsql:用來存放SQL腳本文件
dirtmp:當事物所需要的內存超過已分配內存時,缺省存在此目錄
dirwlt
dirwww

二、Oracle GoldenGate安裝

1、安裝環境

 

源端

目標端

IP地址

10.20.11.176

10.20.32.23

操作系統

RHEL6.6_X64

RHEL6.6_X64

數據庫

ORACLE_11.2.0.4

ORACLE_11.2.0.4

OGG

Version 12.2.0.1.1

Version 12.2.0.1.1

2、OGG下載

http://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html
http://download.oracle.com/otn/goldengate/12301/123012_fbo_ggs_Linux_x64_shiphome.zip

3、OGG安裝

1)源端:

tnsname配置

開啟歸檔等

archive log list
alter database add supplemental log data; 
select supplemental_log_data_min from v$database;  
alter database force logging; (不是必須)
alter system set recyclebin=off;(更好的支持DDL)
show parameter recyclebin
備注: 在oracle中可以通過rowid來定位某條記錄,但是目標端的數據庫和源端數據庫的數據庫可能完全不一樣,所以無法通過rowid來確定源端數據庫的邏輯變化,
這時附加日志supplemental log便登上了表演的舞台。數據庫在開啟附加日志功能后,對於源端的修改操作,oracle會同時追加能夠唯一標示記錄的列到redo log。
這樣目標端數據庫就可以知道源端發生了哪些具體的變化。

ogg安裝(略)

2)目標端:

tnsname配置

開啟歸檔等

ogg安裝

[root@node1 oracle]# unzip 123012_fbo_ggs_Linux_x64_shiphome.zip  
[root@node1 oracle]# mv fbo_ggs_Linux_x64_shiphome  /home/oracle/ogg_install
[root@node1 oracle]# chown -R oracle:oinstall /home/oracle/ogg_install
[oracle@node1 response]$ vi /home/oracle/ogg_install/Disk1/response/oggcore.rsp 

INSTALL_OPTION=ORA11g
SOFTWARE_LOCATION=/home/oracle/ogg_install
START_MANAGER=false
MANAGER_PORT=
DATABASE_LOCATION=
INVENTORY_LOCATION=/home/oracle/ogg_install/ogg_log
UNIX_GROUP_NAME=oinstall

[oracle@node1 Disk1]$ ./runInstaller -silent -responseFile /home/oracle/ogg_install/Disk1/response/oggcore.rsp 

 至此OGG軟件安裝成功,為方便管理OGG可以設置環境變量

[oracle@node1 ogg_install]$ vi ~/.bash_profile

PATH=$PATH:$HOME/bin:/home/oracle/ogg_install

[oracle@node1 ogg_install]$ source ~/.bash_profile

[oracle@node1 ~]$ ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 12.3.0.1.2 OGGCORE_12.3.0.1.0_PLATFORMS_171208.0005_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Dec  8 2017 21:13:00
Operating system character set identified as UTF-8.

Copyright (C) 1995, 2017, Oracle and/or its affiliates. All rights reserved.



GGSCI (node1) 1> create subdirs  

Creating subdirectories under current directory /home/oracle

Parameter file                 /home/oracle/ogg_install/dirprm: created.
Report file                    /home/oracle/ogg_install/dirrpt: created.
Checkpoint file                /home/oracle/ogg_install/dirchk: created.
Process status files           /home/oracle/ogg_install/dirpcs: created.
SQL script files               /home/oracle/ogg_install/dirsql: created.
Database definitions files     /home/oracle/ogg_install/dirdef: created.
Extract data files             /home/oracle/ogg_install/dirdat: created.
Temporary files                /home/oracle/ogg_install/dirtmp: created.
Credential store files         /home/oracle/ogg_install/dircrd: created.
Masterkey wallet files         /home/oracle/ogg_install/dirwlt: created.
Dump files                     /home/oracle/ogg_install/dirdmp: created.

至此真正的OGG安裝完畢,可以進行下面的數據同步部署了。

三、Oracle GoldenGate數據同步

 1、源端配置

1)創建數據同步用戶、表空間

SQL> create tablespace ogg_tbs datafile '/U01/app/oracle/oradata/testdb/ogg_data.dbf' size 30M autoextend on next 10M;

Tablespace created.

SQL> create user ogguser identified by "ogguser";

User created.

SQL> alter user ogguser default tablespace ogg_tbs;

User altered.

SQL> grant create session to ogguser;

Grant succeeded.

SQL> grant dba to ogguser;

Grant succeeded.

2)更改相關數據庫配置

歸檔檢查和更改:

SQL> archive log list

Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination           /oracle/archivelog
Oldest online log sequence     180
Next log sequence to archive   181
Current log sequence           181

若處於非歸檔模式,則改為歸檔模式:
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.

force_logging開啟

SQL> select force_logging from v$database;
FOR
---
NO
SQL> alter database force logging;
Database altered.
SQL> select force_logging from v$database;
FOR
---
YES 

supplemental log開啟

SQL> select supplemental_log_data_min from v$database;
SUPPLEME
--------
NO
SQL
> alter database add supplemental log data; Database altered.
##切換日志,使更改生效
SQL
> alter system switch logfile; System altered.
SQL
> select supplemental_log_data_min from v$database; SUPPLEME -------- YES

關閉回收站(10g需要,11g可以不關閉)

SQL> show parameter recyclebin

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
recyclebin string on


SQL> alter system set recyclebin=off;

System altered.

SQL> show parameter recyclebin

NAME TYPE                                VALUE
------------------------------------ -------------------------------
recyclebin string                          OFF

3)配置manager進程

GGSCI (dg) 1> edit params mgr

port 7809
DYNAMICPORTLIST 7810-7880
--AUTORESTART ER *,RETRIES 5,WAITMINUTES 7
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 7
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
MANAGER進程參數配置說明:
PORT:指定服務監聽端口;這里以7839為例,默認端口為7809
DYNAMICPORTLIST:動態端口:可以制定最大256個可用端口的動態列表,當指定的端口不可用時,管理進程將會從列表中選擇一個可用的端口,源端和目標段的Collector、Replicat、GGSCI進程通信也會使用這些端口;
COMMENT:注釋行,也可以用--來代替;
AUTOSTART:指定在管理進程啟動時自動啟動哪些進程;
AUTORESTART:自動重啟參數設置:本處設置表示每7分鍾嘗試重新啟動所有EXTRACT進程,共嘗試5次;
PURGEOLDEXTRACTS:定期清理trail文件設置:本處設置表示對於超過7天的trail文件進行刪除。
LAGREPORT、LAGINFO、LAGCRITICAL:
定義數據延遲的預警機制:本處設置表示MGR進程每隔1小時檢查EXTRACT的延遲情況,如果超過了30分鍾就把延遲作為信息記錄到錯誤日志中,如果延遲超過了45分鍾,則把它作為警告寫到錯誤日志中。

4)配置extract進程

ogg 12版本可創建用戶別名:

[oracle@dg ogg]$ ggsci  
GGSCI (dg) 3> add credentialstore
Credential store created in ./dircrd/.
GGSCI (dg) 4> alter credentialstore add user  gguser alias ogguser
Password: 

Credential store in ./dircrd/ altered.
--這里就可以使用別名登錄  (正常用戶名密碼 dblogin userid ggs,password ggs)

GGSCI (dg) 3> dblogin useridalias ogguser
Successfully logged into database.
GGSCI (dg) 5> add extract EXT01,tranlog,begin now
EXTRACT added.
###可以通過命令add extract EXT01,tranlog,begin 2018-05-06 08:05:14,制定開始抽取的日志時間
GGSCI (customerdg)
6> edit params EXT01
##extract配置文件內容如下
EXTRACT ext01 SETENV (ORACLE_HOME
="/U01/app/oracle/product/11.2.0.4") setenv (NLS_LANG="AMERICAN_AMERICA.AL32UTF8") setenv (ORACLE_SID="testdb") useridalias ogguser GETTRUNCATES REPORTCOUNT EVERY 1 MINUTES, RATE DISCARDFILE ./dirrpt/ext01.dsc,APPEND,MEGABYTES 1000 WARNLONGTRANS 2h,CHECKINTERVAL 10m EXTTRAIL ./dirdat/ex TRANLOGOPTIONS EXCLUDEUSER gguser TRANLOGOPTIONS MINEFROMACTIVEDG DBOPTIONS ALLOWUNUSEDCOLUMN DYNAMICRESOLUTION FETCHOPTIONS FETCHPKUPDATECOLS --table table CUSTOMER.t_t1; table CUSTOMER.t_t2; table CUSTOMER.t_t3;

添加該extract對應的trail文件,用來存儲抽取的數據。單個文件大小設置為100MB

GGSCI (dg) 1> add exttrail /home/oracle/ogg_install/dirdat/ex,extract ext01 MEGABYTES 100

EXTTRAIL added.

 

5)配置pump進程

為了避免primary extract受到網絡的影響,我們在源端和目標端之間增加一個data pump,這樣的話,primary extract負責將數據從源數據中抽取出來,存在本地的trail文件中,然后data pump進程負責將本地trail文件中的數據傳輸到目標端的trail文件里。這樣能提高更高的靈活性和可用性(當源和目標端之間的網絡出現故障時,primary extract會繼續抽取數據存到本地的trail中)

GGSCI (dg) 5> edit params pump01

EXTRACT pump01
RMTHOST 10.20.32.23, MGRPORT 7809, compress
PASSTHRU
RMTTRAIL /home/oracle/ogg_install/dirdat/rt
DYNAMICRESOLUTION

--table
table CUSTOMER.t_t1;
table CUSTOMER.t_t2;
table CUSTOMER.t_t3;


GGSCI (dg) 14> add extract pump01,exttrailsource ./dirdat/ex
EXTRACT added.
GGSCI (dg) 15> add rmttrail  /home/oracle/ogg_install/dirdat/rt,extract pump01
RMTTRAIL added.

 

2、目標端配置

1)創建數據同步用戶、表空間

SQL> create tablespace ogg_tbs datafile '/U01/app/oracle/oradata/testdb/ogg_data.dbf' size 30M autoextend on next 10M;

Tablespace created.

SQL> create user ogguser identified by "ogguser";

User created.

SQL> alter user ogguser default tablespace ogg_tbs;

User altered.

SQL> grant create session to ogguser;

Grant succeeded.

SQL> grant dba to ogguser;

Grant succeeded.

2)歸檔開啟

3)配置manager進程

GGSCI (node1) 1>  add credentialstore

Credential store created.

GGSCI (node1) 2> alter credentialstore add user  ogguser alias ogguser
Password: 

Credential store altered.

GGSCI (node1) 3> dblogin useridalias ogguser
Successfully logged into database.

GGSCI (node1 as ogguser@testdb) 4> edit params mgr

port 7809
DYNAMICPORTLIST 7810-7880
--AUTORESTART ER *,RETRIES 5,WAITMINUTES 7
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 7
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
GGSCI (node1) 1> start mgr
Manager started.

GGSCI (node1) 2> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING 

 

4)配置replicate進程

REPLICAT rep01
SETENV (ORACLE_HOME="/U01/app/oracle/product/11.2.0.4")
setenv (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
setenv (ORACLE_SID="testdb")
useridalias ogguser
REPORT AT 01:59
REPORTCOUNT EVERY 30 MINUTES, RATE
REPERROR DEFAULT, ABEND

HANDLECOLLISIONS
assumetargetdefs
DISCARDFILE ./dirrpt/rep01.dsc, APPEND, MEGABYTES 1000
GETTRUNCATES
ALLOWNOOPUPDATES

--table
map gguser.t_t1,    target gguser.t_t1; 
map gguser.t_t2,      target gguser.t_t2;   
map gguser.t_t3,      target gguser.t_t3;

5)、添加checkpoint表

GGSCI (node1) 5> dblogin useridalias ogguser
Successfully logged into database.

GGSCI (node1 as ogguser@testdb) 6> add checkpointtable ogguser.checkpointtab

Successfully created checkpoint table ogguser.checkpointtab.
GGSCI (node1 as ogguser@testdb) 7> add replicat rep01,exttrail   /home/oracle/ogg_install/dirdat/rt,checkpointtable ogguser.checkpointtab
REPLICAT added.

3、源端進程啟動

1)源端啟動mgr進程、extract進程、pump進程

GGSCI (dg) 20> start mgr
Manager started.

GGSCI (dg as gguser@testdb) 9> start ext01
Sending START request to MANAGER ...
EXTRACT EXT01 starting

GGSCI (dg as gguser@testdb) 12> start PUMP01

Sending START request to MANAGER ...
EXTRACT PUMP01 starting

GGSCI (dg as gguser@testdb) 14> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
EXTRACT     RUNNING     EXT01       00:00:03      00:00:03    
EXTRACT     RUNNING     PUMP01      00:00:00      00:00:08  

4、數據庫初始化

1)源端導出數據

##創建導出文件目錄、查看到處點SCN

select * from dba_directories; 
create directory DATA_PUMP_DIR as '/U01/oracle/oggdump';

col  CURRENT_SCN  format 999999999999999999999999;
set line 200;
set pagesize 20000;

select current_scn from v$database;
select dbms_flashback.get_system_change_number current_scn from dual;

##導出表數據

##只導出數據
expdp \'/ as sysdba\' directory=DATA_PUMP_DIR file=20180506.dmp tables=ogguser.t_t1,ogguser.t_t2,ogguser.t3 grants=n statistics=none triggers=n compress=n content=data_only FLASHBACK_SCN=54995990597 log=expdp.log
##只導出表結構
expdp \'/ as sysdba\' directory=DATA_PUMP_DIR file=20180506.dmp tables=ogguser.t_t1,ogguser.t_t2,ogguser.t3 grants=n statistics=none triggers=n compress=n content=METADATA_ONLY FLASHBACK_SCN=54995990597 log=expdp.log
##導出表結構和數據
expdp \'/ as sysdba\' directory=DATA_PUMP_DIR file=20180506.dmp tables=ogguser.t_t1,ogguser.t_t2,ogguser.t3 grants=n statistics=none triggers=n compress=n FLASHBACK_SCN=54995990597 log=expdp.log

2)目標端數據導入

##若表結構事前沒有創建好,需要表結構和表數據一起導入,若表結構已創建,只需要導入表數據即可

##導入表數據
impdp \'/ as sysdba\' DIRECTORY=DATA_PUMP_DIR  DUMPFILE=20180506.dmp    REMAP_SCHEMA=source_user:target_user content=data_only LOGFILE=impdp.log      
##導入表結構
impdp \'/ as sysdba\' DIRECTORY=DATA_PUMP_DIR  DUMPFILE=20180506.dmp    REMAP_SCHEMA=source_user:target_user content=METADATA_ONLY LOGFILE=impdp.log               
##導入表結構和數據
impdp \'/ as sysdba\' DIRECTORY=DATA_PUMP_DIR  DUMPFILE=20180506.dmp    REMAP_SCHEMA=source_user:target_user  LOGFILE=impdp.log                      

5、目標端進程啟動

目標端啟動mgr、replicate進程

GGSCI (node1 as ogguser@testdb) 9> start mgr
Manager started.

GGSCI (node1) 2> start rep01,aftercsn 54995990597

Sending START request to MANAGER ...
REPLICAT REP01 starting

GGSCI (node1) 4> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
REPLICAT    RUNNING     REP01       00:00:00      00:00:00   

 

四、Oracle GoldenGate管理

1、進程啟動、關閉以及狀態查看

啟動:

GGSCI (node1) 1> start mgr
Manager started.

##可以通過SCN啟動
start rep01,aftercsn 54995990597
##可以通過時間啟動
add extract EXT01,tranlog,begin 2018-05-06 08:05:14

 關閉:

GGSCI (node1) 3> stop mgr
Manager process is required by other GGS processes.
Are you sure you want to stop it (y/n)?yes

Sending STOP request to MANAGER ...
Request processed.
Manager stopped.

 狀態查看:

GGSCI (node1) 1> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
REPLICAT    STOPPED     REP01       00:00:00      00:14:29 GGSCI (node1) 2> info rep01

REPLICAT   REP01     Initialized   2018-05-04 16:29   Status STOPPED
Checkpoint Lag       00:00:00 (updated 00:14:51 ago)
Log Read Checkpoint  File /home/oracle/ogg_install/dirdat/rt000000000
                     First Record  RBA 0

 2、進程添加、編輯、刪除、配置文件查看

進程文件添加:

##抽取進程
add extract ext5,tranlog,begin now
add exttrail  /usr/local/mysql/ogg/dirdat/ex,extract ext5
##pump進程
add extract pump01,exttrailsource  /usr/local/mysql/ogg/dirdat/ex
add rmttrail /oracle/app/ogg/dirdat/pt,extract pump5
##檢查點
add checkpointtable ogg.checkpointtab
add replicat rep2,exttrail   /oracle/app/ogg/dirdat/pt,checkpointtable ogg.checkpointtab
##別名
add credentialstore alter credentialstore add user ogguser alias ogguser

 文件編輯:

##管理進程文件
edit params mgr
##抽取進程文件
edit params ext01
##傳輸進程文件
edit params pump01
##應用進程文件
edit params rep01

文件查看:

##管理進程文件
view params mgr
##抽取進程文件
view params ext01
##傳輸進程文件
view params pump01
##應用進程文件
view params rep01

文件刪除:

GGSCI (node1) 5> dblogin useridalias ogguser
Successfully logged into database.
GGSCI (node1 as ogguser@testdb) 8> delete checkpointtable ogguser.checkpointtab This checkpoint table may be required for other installations. Are you sure you want to delete this checkpoint table? yes Successfully deleted checkpoint table ogguser.checkpointtab. GGSCI (node1 as ogguser@testdb) 9> delete rep01 Deleted REPLICAT REP01.

3、SCN和時間互轉

 

##SCN轉為時間戳
select
to_char(scn_to_timestamp(54995990597),'yyyy-mm-dd hh24:mi:ss') from dual;

 

##時間戳轉為為SCN
select
timestamp_to_scn(to_timestamp('2018-05-06 08:05:14','yyyy-mm-dd hh24:mi:ss')) from dual;

 


免責聲明!

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



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