搭建一個Oracle到Oracle的GoldenGate雙向複製環境
目標:搭建一個Oracle到Oracle的Goldengate雙向複製環境(支援DDL+DML)。
環境:
OS:Red Hat Enterprise Linux Server release 5.5 (Tikanga)
DB:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
gg1和gg2互為source和target,所處OS和所安DB均一樣。
一、安裝GG
在gg1和gg2都執行如下操作:
(1)新增環境變數,在/home/oracle/.bash_profile
export PATH=/u01/ggate:$PATH
exportLD_LIBRARY_PATH=/u01/ggate:$LD_LIBRARY_PATH
export ggtest=/u01/ggate
這裡的GG 和Oracle 使用的是相同的使用者,所以把GG 的變數加上就可以了。載入剛剛設定的環境變數:
source/home/oracle/.bash_profile
(2)使用ggsci工具,建立必要的目錄
gg1:/u01/ggate> ggsci
--呼叫ggsci 工具
Oracle GoldenGate Command Interpreter forOracle
Version 11.1.1.1OGGCORE_11.1.1_PLATFORMS_110421.2040
Linux, x64, 64bit (optimized), Oracle 11gon Apr 21 2011 22:42:14
Copyright (C) 1995, 2011, Oracle and/or itsaffiliates. All rights reserved.
GGSCI (gg1) 1> create subdirs
--使用ggsci 工具建立目錄
Creating subdirectories under currentdirectory /u01/ggate
Parameter files /u01/ggate/dirprm: created
Report files /u01/ggate/dirrpt: created
Checkpoint files /u01/ggate/dirchk: created
Process status files /u01/ggate/dirpcs: created
SQL script files /u01/ggate/dirsql: created
Database definitions files /u01/ggate/dirdef: created
Extract data files /u01/ggate/dirdat: created
Temporary files /u01/ggate/dirtmp: created
Veridata files /u01/ggate/dirver: created
Veridata Lock files /u01/ggate/dirver/lock: created
Veridata Out-Of-Sync files /u01/ggate/dirver/oos: created
Veridata Out-Of-Sync XML files/u01/ggate/dirver/oosxml: created
Veridata Parameter files /u01/ggate/dirver/params: created
Veridata Report files /u01/ggate/dirver/report: created
Veridata Status files /u01/ggate/dirver/status: created
Veridata Trace files /u01/ggate/dirver/trace: created
Stdout files /u01/ggate/dirout: created
GGSCI (gg1) 2>
以上就是GG 的安裝,在source 和target database 都執行。
二、分別配置source和target
(1)GoldenGate通過抓取源端資料庫重做日誌進行分析,將獲取的資料應用到目標端,實現資料同步。因此,源資料庫需要必須處於歸檔模式,並啟用附加日誌和強制日誌。
歸檔模式、附加日誌、強制日誌
--檢視
SQL> select log_mode,supplemental_log_data_min,force_logging from v$database;
LOG_MODE SUPPLEME FOR
------------ -------- ---
ARCHIVELOG NO NO
--修改
(1)archivelog
SQL>shutdown immediate
SQL>startup mount
SQL>alter database archivelog;
SQL>alter database open;
(2)force logging
SQL>alterdatabase force logging;
(3)supplemental log data
SQL>alterdatabase add supplemental log data;
(2)禁用Recycle Bin
如果啟用DDL 支援,必須關閉recycle bin。官網的解釋如下:
If the recyclebin is enabled, the Oracle GoldenGate DDL trigger session receives implicitrecycle bin DDL operations that cause the trigger to fail.
Oracle 11g:
SQL> alter system set recyclebin=offscope=spfile;
System altered.
如果資料庫是10g,需要關閉recyclebin並重啟;或者手工purge recyclebin。
(3)建立存放DDL 資訊的user並賦權
SQL> create user ggtest identified by oracle default tablespace users temporary tablespace temp;
User created.
SQL> grant connect,resource to ggtest;
Grant succeeded.
SQL> grant execute on utl_file to ggtest;
Grant succeeded.
退出所有使用Oracle 的session,然後使用SYSDBA許可權的使用者執行如下指令碼:
gg1:/u01/ggate> echo $ggate
/u01/ggate
--進入GG的目錄,然後呼叫指令碼:
gg1:/home/oracle> cd $ggate
gg1:/u01/ggate> sqlplus / as sysdba;
SQL*Plus: Release 11.2.0.3.0 Production onTue Nov 8 19:41:58 2011
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise EditionRelease 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Miningand Real Application Testing options
--指令碼1:
SQL> @marker_setup.sql;
Marker setup script
You will be prompted for the name of aschema for the GoldenGate database objects.
NOTE: The schema must be created prior torunning this script.
NOTE: Stop all DDL replication beforestarting this installation.
--輸入我們之前建立的使用者名稱:
Enter GoldenGate schema name:ggtest
Marker setup table script complete, runningverification script...
Please enter the name of a schema for theGoldenGate database objects:
Setting schema name to ggtest
MARKER TABLE
-------------------------------
OK
MARKER SEQUENCE
-------------------------------
OK
Script complete.
--指令碼2:
SQL> @ddl_setup.sql;
GoldenGate DDL Replication setup script
Verifying that current user has privilegesto install DDL Replication...
You will be prompted for the name of aschema for the GoldenGate database objects.
NOTE: For an Oracle 10g source, the systemrecycle bin must be disabled. For Oracle 11g and later, it can be enabled.
--注意這裡提示我們在10g裡,必須關閉recycle bin,在11g以後的版本,可以不用關閉。
NOTE: The schema must be created prior torunning this script.
NOTE: Stop all DDL replication beforestarting this installation.
--提示輸入GG的使用者:
Enter GoldenGate schema name:ggtest
You will be prompted for the mode ofinstallation.
To install or reinstall DDL replication,enter INITIALSETUP
To upgrade DDL replication, enter NORMAL
--這裡讓我們選擇安裝模式: install 和 reinstall 選擇INITIALSETUP
Enter mode of installation:INITIALSETUP
Working, please wait ...
Spooling to file ddl_setup_spool.txt
Checking for sessions that are holdinglocks on Oracle Golden Gate metadata tables ...
Check complete.
Using ggtest as a GoldenGate schema name,INITIALSETUP as a mode of installation.
Working, please wait ...
DDL replication setup script complete,running verification script...
Please enter the name of a schema for theGoldenGate database objects:
Setting schema name to ggtest
DDLORA_GETTABLESPACESIZE STATUS:
……
STATUS OF DDL REPLICATION
-------------------------------------------------------------------------------------------------------
SUCCESSFUL installation of DDL Replicationsoftware components
Script complete.
--指令碼3:
SQL> @role_setup.sql;
GGS Role setup script
This script will drop and recreate the roleGGS_GGSUSER_ROLE
To use a different role name, quit thisscript and then edit the params.sql script to change the gg_role parameter tothe preferred name. (Do not run the script.)
You will be prompted for the name of aschema for the GoldenGate database objects.
NOTE: The schema must be created prior torunning this script.
NOTE: Stop all DDL replication beforestarting this installation.
--同樣輸入GG使用者名稱:
Enter GoldenGate schema name:ggtest
Wrote file role_setup_set.txt
PL/SQL procedure successfully completed.
Role setup script complete
Grant this role to each user assigned tothe Extract, GGSCI, and Manager processes, by using the following SQL command:
--這裡提示我們賦權給相關的使用者:
GRANT GGS_GGSUSER_ROLE TO<loggedUser>
where <loggedUser> is the userassigned to the GoldenGate processes.
--指令碼4:賦權
SQL> grant GGS_GGSUSER_ROLE to ggtest;
Grant succeeded.
--指令碼5:
SQL> @ddl_enable.sql;
Trigger altered.
注意這裡指令碼建立的table都是使用預設的名稱,當然也可以修改這些table的預設名。
三、測試
注意:
(1)目標庫的使用者名稱和物件名稱可以與源端不同,關鍵在於配置檔案中要能夠正確匹配。
(2)配置源和目標兩端tnsnames,保持互聯互通。(記得啟動lsnrctl)
gg1:
SQL> create user ssgg identified by Oracle default tablespace users temporary tablespace temp;
User created.
SQL> grant connect,resource,dba to ssgg;
Grant succeeded.
gg2:
SQL> create user ttgg identified by oracle default tablespace users temporary
tablespace temp;
User created.
SQL> grant connect,resource,dba to ttgg;
Grant succeeded.
引數設定
配置gg1,新增checkpoint表:
GGSCI (gg1) 1> dblogin userid ggtest,password oracle
Successfully logged into database.
GGSCI (gg1) 2> view params ./GLOBAL
ggschema ggtest
checkpointtable ggtest.checkpoint
GGSCI (gg1) 27> view params mgr
PORT 7809--指定管理埠
dynamicportlist 7810-7900 --動態埠列表,當指定埠不可用時,管理程序會自動選擇一個可用埠。最大可指定256個埠
autostart er *--mgr開啟時自動開啟所有的extract and replicat process
autorestart er *,retries 5,waitminutes 2 --extract and replicat processes fail mgr automatically start
引數每2分鐘重啟一次,重啟5次後放棄
1、 t o c o n f i g u r e t h e p r i m a r y e x t r a c t g o u p
GGSCI (gg1) 10> add extract ext01,tranlog,begin now
EXTRACT added.
GGSCI (gg1) 13> add exttrail /u01/ggate/dirdat/sd,extract ext01
EXTTRAIL added.
GGSCI (gg1) 28> view params ext01
extract ext01 --提取程序組的名字
userid ggtest, password oracle --同步使用者
exttrail /u01/ggate/dirdat/sd--trail 檔案目錄和標識(類似於sd*這樣檔案),命名只能是2個字元。
tranlogoptions excludeuser ggtest --避免迴圈複製的出現
DDL INCLUDE ALL
DDLOPTIONS ADDTRANDATA
table ssgg.*; --同步的表或使用者下所有的表
當你需要同步除Goldengate和Oracle資料庫自帶的使用者外所有使用者的DDL操作時,可在源端主抽取程序中加入下面的內容
ddl include all
然後再在目標端Replicat程序引數檔案中加入DDL錯誤的處理語句即可。
2、 t o c o n f i g u r e t h e d a t a p u m p
GGSCI (gg1) 19> add extract p01,exttrailsource /u01/ggate/dirdat/sd,begin now
EXTRACT added.
GGSCI (gg1) 20> add rmttrail /u01/ggate/dirdat/pd,extract p01
RMTTRAIL added.
GGSCI (gg1) 29> view params p01
extract p01
userid ggtest,password oracle
rmthost 192.168.50.231,mgrport 7809 --指定遠端IP和MGR埠
rmttrail /u01/ggate/dirdat/pd
table ssgg.*;
3、 t o c o n f i g u r e t h e r e p l i c a t g r o u p
GGSCI (gg1) 3> add replicat r02,exttrail /u01/ggate/dirdat/dp,begin now
ERROR: No checkpoint table specified for ADD REPLICAT.
GGSCI (gg1) 4> add replicat r02,exttrail /u01/ggate/dirdat/dp,checkpointtable ggtest.checkpoint
REPLICAT added.
GGSCI (gg1) 30> view params r02
replicat r02
assumetargetdefs --定義目標表和源表使用MAP語法有相同的列結構,當出現熱點時,不檢視源結構而直接從源定義檔案查
看
userid ggtest,password oracle
DISCARDFILE /u01/ggate/dirdat/sdisc.dsc,append,megabytes 100
DDL INCLUDE MAPPED
DDLERROR DEFAULT IGNORE RETRYOP
map ttgg.*, target ssgg.*;
啟動所有程序:
GGSCI (gg1) 3> start mgr
Manager started.
GGSCI (gg1) 4> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EXT01 00:00:00 00:00:07
EXTRACT RUNNING P01 00:00:00 00:00:01
REPLICAT RUNNING R02 00:00:00 00:00:08
配置gg2,新增checkpoint表:
GGSCI (gg2) 1> dblogin userid ggtest,password oracle
Successfully logged into database.
GGSCI (gg2) 25> view params ./GLOBAL
ggschema ggtest
checkpointtable ggtest.checkpoint
GGSCI (gg2) 29> view params mgr
PORT 7809
dynamicportlist 7810-7900
autostart er *
autorestart er *,retries 5,waitminutes 2
c o n f i g u r a t i o n f r o m s e c o u n d a r y s y s t e m t o p r i m a r y s y s t e m
1 、t o c o n f i g u r e t h e p r i m a r y e x t r a c t g r o u p
GGSCI (gg2) 12> add extract ext02,tranlog,begin now
EXTRACT added.
GGSCI (gg2) 13> add exttrail /u01/ggate/dirdat/td,extract ext02
EXTTRAIL added.
GGSCI (gg2) 2