oracle golden gate我最近正在琢磨,這個軟件我覺得約等於dataguard的邏輯模式,我認為其最大的優勢是更可控制,比如可以細化到某個schema、某個table的同步。
如下實驗的主要步驟:
ogg根據scn同步數據,源庫零停機時間
1. 配置好ogg源端的mgr、抓取和傳送進程,並啟動。
2. 配置好ogg目標端的mgr、復制進程,僅啟動mgr。
3. 源端可自由進行交易,此時觀察源與目標的trail文件是否都正常。
4. 查詢源端此時的scn,並按照參數flashbask_scn進行expdp。
5. 目標端impdp導入。
6. 目標端start replicat xxx,aftercsn xxxxx
GoldenGate重要進程介紹:
1、Manager管理進程在兩端開啟,監控和重啟其他進程;分配數據存儲和報告錯誤及事件;
2、Extract進程從日志中抓取並傳輸到target端事務數據;
3、Server Collector進程在target(接受)端接受數據並寫入trail文件;
4、Replicat進程讀取trail文件,並應用到traget數據庫;
5、trail文件時gg自己抓捕信息的文件,是一個OS文件,存放在./dirdat/下,以X00000命名,N順序1,2,3…此文件用完可配置參數自動刪除。
一、環境准備並安裝GoldenGate
1. 數據庫准備情況(我是在一個主機上面兩個實例)
1) 源服務器
IP地址:192.168.82.178
數據庫:11.2.0.4.0 64 bit
SID: terry
操作系統版本:Oracle 6.5 64 bit
ogg版本:ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip
2) 目標服務器
IP地址:192.168.82.178
數據庫:10.2.0.5 64 bit
SID: ora10g
操作系統版本:Oracle 6.4 64 bit
ogg版本:ogg112101_fbo_ggs_Linux_x64_ora11g_64bit.zip
說明:前提條件是數據庫已經准備方式安裝完畢。
2. 下載OGG軟件並解壓安裝
1) 源服務器
系統用戶ggsmb
/home/ggsmb/ggsmb_home
2) 目標服務器都要配置
系統用戶ggs
/home/ggs/ggs_home
3. 准備OGG環境變量
#源服務器、與目標服務器都要配置
$ vi /home/ggs/.bash_profile
$ vi /home/ggsmb/.bash_profile
ggsmb增加如下行:
export PATH export ORACLE_BASE=/u01 export ORACLE_HOME=$ORACLE_BASE/product/11.2.0 export ORACLE_SID=terry export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/home/ggsmb/ggsmb_home
ggs增加如下行:
export PATH export ORACLE_BASE=/u02 export ORACLE_HOME=$ORACLE_BASE/product/10.2.0 export ORACLE_SID=ora10g export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/home/ggs/ggs_home:/usr/local/lib:/usr/X11R6/lib export LD_LIBRARY_PATH_64=$ORACLE_HOME/lib
4. 配置日志模式
#目標服務器不用配置(非雙向)
1) 查看規檔與日志模式
sqlplus / as sysdba select log_mode,supplemental_log_data_min,force_logging from v$database;
2) 配置為規檔模式
shutdown immediate; startup mount; alter database archivelog; alter database open; alter system set log_archive_dest_1='location=/u01/archive' scope=both;
3) 配置日志模式(打開強制規檔與補充日志模式)
alter database add supplemental log data; alter database force logging;
4)查看配置結果:
SQL> select log_mode,supplemental_log_data_min,force_logging from v$database; LOG_MODE SUPPLEME FOR ------------ -------- --- ARCHIVELOG YES YES
5. 創建GoldenGate用戶帳號
1) 源服務器
su - oracle
sqlplus /nolog
conn / as sysdba;
create tablespace ogg datafile '/u01/oradata/terry/ogg.dbf' size 10m autoextend on next 10m;
create user ggs identified by ggs default tablespace ogg temporary tablespace TEMP quota unlimited on ogg;
grant connect,resource to ggs;
grant create session,alter session to ggs; grant select any dictionary,select any table to ggs; grant alter any table to ggs; grant flashback any table to ggs; grant execute on dbms_flashback to ggs; --或直接grant dba to ggs;
2) 目標服務器
su - oracle
sqlplus /nolog
conn / as sysdba;
create tablespace ogg datafile '/u02/oradata/ora10g/ogg.dbf' size 10m autoextend on next 10m; create user ggs identified by ggs default tablespace ogg temporary tablespace TEMP quota unlimited on ogg; grant connect,resource to ggs; grant create session,alter session to ggs; grant select any dictionary,select any table to ggs; grant alter any table to ggs; grant flashback any table to ggs; grant execute on dbms_flashback to ggs; grant insert any table to ggs; grant delete any table to ggs; grant update any table to ggs; --或直接grant dba to ggs;
6. 安裝GoldenGate軟件
(1) 源服務器、與目標服務器都要配置
su - ggsmb
cd /home/ggsmb/ggsmb_home
./ggsci
GGSCI (terry) 1> create subdirs
Creating subdirectories under current directory /home/ggsmb/ggsmb_home
Parameter files /home/ggsmb/ggsmb_home/dirprm: created
Report files /home/ggsmb/ggsmb_home/dirrpt: created
Checkpoint files /home/ggsmb/ggsmb_home/dirchk: created
Process status files /home/ggsmb/ggsmb_home/dirpcs: created
SQL script files /home/ggsmb/ggsmb_home/dirsql: created
Database definitions files /home/ggsmb/ggsmb_home/dirdef: created
Extract data files /home/ggsmb/ggsmb_home/dirdat: created
Temporary files /home/ggsmb/ggsmb_home/dirtmp: created
Veridata files /home/ggsmb/ggsmb_home/dirver: created
GGSCI (terry) 2> quit
(2) 目標服務器都要配置
su - ggs
cd /home/ggs/ggs_home
./ggsci
GGSCI (terry) 1> create subdirs
Creating subdirectories under current directory /home/ggs/ggs_home
Parameter files /home/ggs/ggs_home/dirprm: created
Report files /home/ggs/ggs_home/dirrpt: created
Checkpoint files /home/ggs/ggs_home/dirchk: created
Process status files /home/ggs/ggs_home/dirpcs: created
SQL script files /home/ggs/ggs_home/dirsql: created
Database definitions files /home/ggs/ggs_home/dirdef: created
Extract data files /home/ggs/ggs_home/dirdat: created
Temporary files /home/ggs/ggs_home/dirtmp: created
Veridata files /home/ggs/ggs_home/dirver: created
GGSCI (terry) 2> quit
二、 GoldenGate DML同步源端配置
cd /u01/app/oracle/ogg
./ggsci
1. 源MGR進程
1) 編輯mgr程組
edit params mgr
port 7809 dynamicportlist 7800-7899 autorestart extract *,retries 5,waitminutes 2 purgeoldextracts ./dirdat/*,usecheckpoints,minkeepdays 7 lagreporthours 1 laginfominutes 30 lagcriticalminutes 45
說明:
port 指定mgr進程通信端口
dynamicportlist 表示mgr進程可以為源與目的端動態通信指定端口
autorestart extract 表示自動重啟extract進程組,每2分鍾嘗試重啟所有進程,重試5次。
配置參數后,重啟mgr進程生效
purgeoldextracts xxx,usercheckpoints,minkeepdays x表示trail文件會保留7天,ogg會根據checkpoint刪除使用過的trail文件。
lagreporthours 1 每隔1小時檢查一次extract和replicat的lag。
laginfominutes 30 如果lag超過規定的值(lagcritical),會報錯critical。如果沒問題,會每30分鍾報告信息。
lagcriticalminutes 45 會每隔45分鍾報告critical信息。
2) 啟動主管理進程
GGSCI (terry) 3> start mgr
Manager started.
GGSCI (terry) 4> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
2. 配置Extract進程組
GGSCI (terry) 5> edit params test_ext
GGSCI (terry) 9> view param test_ext
extract test_ext dynamicresolution setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8) userid ggs,password ggs exttrail /home/ggsmb/ggsmb_home/dirdat/te table test.*;
2) 添加抽取進程
GGSCI (terry) 6> add extract test_ext,tranlog,begin now
EXTRACT added.
3) 添加本地trail文件,源extract進程負責寫這部分文件,pump負責把這部分文件傳到目標服務器端。
GGSCI (terry) 7> add exttrail /home/ggsmb/ggsmb_home/dirdat/te,extract test_ext
EXTTRAIL added.
GGSCI (terry) 10> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT STOPPED TEST_EXT 00:00:00 00:01:13
說明:
extract eora定義extract進程名字
dynamicresolution
setenv設置環境變量
userid 登錄數據庫
exttrail指定本地trail文件地址
table 定義同步的表
4) 啟動服務
GGSCI (terry) 19> start extract test_ext
Sending START request to MANAGER ...
EXTRACT TEST_EXT starting
GGSCI (terry) 20> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING TEST_EXT 00:04:39 00:00:00
此時觀察dirdat目錄,可以發現抽取的文件:
[ggsmb@terry dirdat]$ pwd
/home/ggsmb/ggsmb_home/dirdat
[ggsmb@terry dirdat]$ ll
總用量 4
-rw-rw-rw- 1 ggsmb oinstall 1053 6月 17 11:27 te0000
3. 配置Pump進程組
1) 編輯配置文件
edit params test_p
extract test_p dynamicresolution passthru rmthost 192.168.82.178,mgrport 7909,compress rmttrail /home/ggs/ggs_home/dirdat/tp table test.*;
2) 添加pump進程
add extract test_p,exttrailsource /hoem/ggsmb/ggsmb_home/dirdat/te
3) 添加遠程trail文件
GGSCI (terry) 27> add rmttrail /home/ggs/ggs_home/dirdat/tp,extract test_p
RMTTRAIL added.
4) 啟動pump進程
GGSCI (terry) 29> start extract test_p
Sending START request to MANAGER ...
EXTRACT TEST_P starting
GGSCI (terry) 30> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING TEST_EXT 00:00:00 00:00:03
EXTRACT RUNNING TEST_P 00:00:00 00:03:04
三、 GoldenGate DML同步目標端配置
1. 目標端MGR進程
1) 編輯配置文件
GGSCI (terry) 1> view param mgr
port 7909 dynamicportlist 7900-7999 purgeoldextracts /home/ggs/ggs_home/dirdat/*, usecheckpoints, minkeepdays 3
2) 啟動
GGSCI (terry) 2> start mgr
Manager started.
GGSCI (terry) 3> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT ABENDED REPL 00:00:00 20:42:08
GGSCI (terry) 4> exit
此時在目標端的dirdat中可以看到由源端傳送過來的trail文件
[ggs@terry ggs_home]$ cd dirdat
[ggs@terry dirdat]$ ll
總用量 0
-rw-rw-rw- 1 ggs oinstall 0 6月 17 13:18 tp000000
2. 添加檢查表
說明: 當我們在GLOBALS 文件里指定了默認的checkpoint 之后,新的Replicat groups 在創建時會自動使用這個參數,不需要其他指令
1) 編輯全局配置文件
edit params ./GLOBALS
CHECKPOINTTABLE ggs.checkpoint
2)exit # 這里需要退出ggsci終端
3) 添加checkpoint表
./ggsci
GGSCI (slave) 1> dblogin userid ggs,password ggs
Successfully logged into database.
GGSCI (slave) 2> add checkpointtable ggs.checkpoint
Successfully created checkpoint table GGS.CHECKPOINT.
3. 配置目標端Peplicat進程組
1) 編輯配置文件
edit params test_r
replicat test_r userid ggs,password ggs assumetargetdefs reperror default,discard discardfile /home/ggs/ggs_home/dirrpt/test_r.desc dynamicresolution map test.*;target test.*;
2) 添加復制進程,此時不要啟動進程
GGSCI (terry) 6> add replicat test_r,exttrail /home/ggs/ggs_home/dirdat/tp,checkpointtable ggs.checkpoint
REPLICAT added.
GGSCI (terry) 7> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT STOPPED TEST_R 00:00:00 00:00:03
四、查詢源scn,將源數據導入目標庫
1.源庫按照scn導入到目標庫
SQL> select * from t1;
ID
----------
1
2
3
4
5
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
1136851
[oracle@terry dump]$ expdp system/oracle directory=dump dumpfile=test.dmp schemas=test flashback_scn=1136851 version=10.2

Export: Release 11.2.0.4.0 - Production on Tue Jun 17 13:30:09 2014 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options FLASHBACK automatically enabled to preserve database integrity. Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01": system/******** directory=dump dumpfile=test.dmp schemas=test flashback_scn=1136851 version=10.2 Estimate in progress using BLOCKS method... Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA Total estimation using BLOCKS method: 64 KB Processing object type SCHEMA_EXPORT/USER Processing object type SCHEMA_EXPORT/SYSTEM_GRANT Processing object type SCHEMA_EXPORT/ROLE_GRANT Processing object type SCHEMA_EXPORT/DEFAULT_ROLE Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Processing object type SCHEMA_EXPORT/TABLE/TABLE Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS . . exported "TEST"."T1" 4.968 KB 5 rows Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is: /dump/test.dmp Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at Tue Jun 17 13:30:20 2014 elapsed 0 00:00:10
[oracle@terry dump]$ exit
logout
[root@terry 桌面]# su - ora10g
[ora10g@terry ~]$ cd /dump
[ora10g@terry dump]$ impdp system/oracle directory=dump dumpfile=test.dmp

Import: Release 10.2.0.5.0 - 64bit Production on Tuesday, 17 June, 2014 13:30:57 Copyright (c) 2003, 2007, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded Starting "SYSTEM"."SYS_IMPORT_FULL_01": system/******** directory=dump dumpfile=test.dmp Processing object type SCHEMA_EXPORT/USER Processing object type SCHEMA_EXPORT/SYSTEM_GRANT Processing object type SCHEMA_EXPORT/ROLE_GRANT Processing object type SCHEMA_EXPORT/DEFAULT_ROLE Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Processing object type SCHEMA_EXPORT/TABLE/TABLE Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA . . imported "TEST"."T1" 4.968 KB 5 rows Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Job "SYSTEM"."SYS_IMPORT_FULL_01" successfully completed at 13:31:00
2.驗證目標庫數據
SQL> conn test/test
Connected.
SQL> select * from t1;
ID
----------
1
2
3
4
5
3.源庫做出交易
SQL> insert into t1 values(6);
1 row created.
SQL> insert into t1 values(7);
1 row created.
SQL> commit;
Commit complete.
此時原庫的trail文件te和目標庫的trail文件tp應當都出現了贈長:
[ggsmb@terry dirdat]$ ll
總用量 4
-rw-rw-rw- 1 ggsmb oinstall 1383 6月 17 13:35 te000000
[ggs@terry dirdat]$ ll
總用量 4
-rw-rw-rw- 1 ggs oinstall 1303 6月 17 13:31 tp000000
3.啟動replicat(aftercsn)
GGSCI (terry) 2> start replicat test_r,aftercsn 1136851
Sending START request to MANAGER ...
REPLICAT TEST_R starting
GGSCI (terry) 3> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING TEST_R 00:00:00 00:00:01
5.驗證目標庫數據
SQL> /
ID
----------
1
2
3
4
5
6
7
7 rows selected.
至此就完成了。