一、GoldenGate實施環境
source database:oracle 11.2.0.3
target database:oracle 11.2.0.3
需要配置的進程如下:
source database:extract、data pump
target database:replicat
說明如下:
1、主提取進程首先將trail生成在本地,然后datapump讀取本地trail再發送到目標服務器,即便網絡故障,主提取進程仍然能隨着事務生成trail文件,而datapump則會暫時停止傳輸,等待網絡通暢后在將堆積的本地trail文件發送至目標服務器,從而實現了斷點傳輸的功能。在實際應用中,每一個同步流程都應該配置datapump以應對網絡問題。
2、配置進程檢查點(checkpoint):檢查點記錄了進程讀寫的位置信息用以數據恢復,目的是為了防止進程因系統、網絡崩潰而導致的數據丟失。oracle推薦將復制進程的檢查點信息存放到數據庫表中進行管理:
首先在./globals參數文件中加入:
CHECKPOINTTABLE [<owner>.<table>] --指定的檢查點記錄表
然后運行:
GGSCI> DBLOGIN USERID <db_user>, PASSWORD <pw>
GGSCI> ADD CHECKPOINTTABLE [<owner>.<table>] --生成這個檢查點記錄表
3、GoldenGate的DDL同步只支持兩邊一致的數據庫,限制條件較多(如不能進行字段映射、轉換等),具體可以參考官方文檔。DDL的抓取不是通過日志抓取來捕獲的,而是通過觸發器來實現,所以對源數據庫的性能影響要比單純的數據抓取要大很多,可謂屏棄了GoldenGate的優勢。盡量不要使用GoldenGate的DDL復制功能,在大多數業務系統中,實際上不會有頻繁的數據庫結構變動,完全可以通過手工的方式進行維護。確實有大量DDL操作的環境,如果可以,還是推薦物理DG之類的替換方案;確實要使用GoldenGate的DDL復制,請詳細參考官方文檔的限制和說明。
4、如果需要配置DDL支持,需運行如下幾個腳本:marker_setup.sql,ddl_setup.sql,role_setup.sql,grant GGS_GGSUSER_ROLE to <user>; ddl_enable.sql
5、配置source和target端tnsnames.ora
6、查詢是否有不支持的數據類型
7、是否有壓縮表和不支持的表類型
8、禁用容災端數據庫的外鍵,trigger和有DML操作的JOB
二、GoldenGate軟件安裝,
2.1 Unix下安裝 在source database 和 target database 都執行如下操作:
# su - oracle
/home/oracle> mkdir goldengate
在此goldengate下面解壓下載的安裝包
/home/oracle>cd goldengate
/home/oracle/goldengate> ldd ggsci
將列出所有需要的lib和當前缺少的
添加環境變量
在/home/oracle/. profile文件里添加如下內容:
export PATH=/home/oracle/goldengate:$PATH
export LIBPATH =/home/oracle/goldengate:$ORACLE_HOME/lib;
export GGATE=/home/oracle/goldengate
注:
IBM AIX:LIBPATH
HPUX: SHLIB_PATH
SOLARIS/LINUX:LD_LIBRARY_PATH
使環境變量生效
source /home/oracle/. profile
2.2創建目錄 使用ggsci工具,創建必要的目錄
/home/oracle/goldengate > ./ggsci
--調用ggsci 工具
GGSCI> create subdirs
Creating subdirectories under currentdirectory /home/oracle/goldengate
Parameter files /home/oracle/goldengate/dirprm: created
Report files /home/oracle/goldengate/dirrpt: created
Checkpoint files /home/oracle/goldengate/dirchk: created
Process status files /home/oracle/goldengate/dirpcs: created
SQL script files /home/oracle/goldengate/dirsql: created
Database definitions files /home/oracle/goldengate/dirdef: created
Extract data files /home/oracle/goldengate/dirdat: created
Temporary files /home/oracle/goldengate/dirtmp: created
Veridata files /home/oracle/goldengate/dirver: created
Veridata Lock files /home/oracle/goldengate/dirver/lock: created
Veridata Out-Of-Sync files /home/oracle/goldengate/dirver/oos: created
Veridata Out-Of-Sync XML files/home/oracle/goldengate/dirver/oosxml: created
Veridata Parameter files /home/oracle/goldengate/dirver/params: created
Veridata Report files /home/oracle/goldengate/dirver/report: created
Veridata Status files /home/oracle/goldengate/dirver/status: created
Veridata Trace files /home/oracle/goldengate/dirver/trace: created
Stdout files /home/oracle/goldengate/dirout: created
以上就是GG 的安裝,在source 和target database 都執行。
三、配置Source database
注意:只配置Source database,而非target database
歸檔模式、附加日志、強制日志
Oracle數據庫需要開啟歸檔日志,並開啟最小附加日志模式。
SQL>archive log list;(需要mount狀態,並重啟數據庫,步驟略)
SQL> select supplemental_log_data_min from v$database; --查看是否開啟了最小附加日志模式
SQL> alter database add supplemental log data; --開啟最小附加日志模式
實際生產應用中,最好同時打開ORACLE的強制日志模式, 以防止源數據庫因直接路徑加載忽略redo生成而導致這部分數據無法同步:
SQL> select force_logging from v$database;
SQL> Alter database force logging;
開啟最小附加日志模式還不夠,還需要打開表級的補全日志, 可以在GoldenGate中使用add trandata命令強制重做日志記錄主鍵值, 以保證在目標端能成功復制:
GGSCI> dblogin userid username,password pw --GoldenGate中登錄OARCLE數據庫
GGSCI>add trandata username.<tablename> --表名可以使用通配符
注:此方法必須要求表有主鍵值或者非空唯一索引鍵, 如果需要同步的只是一個用戶或者某幾個用戶下的某些表, 則推薦此方法即可,如下步驟則不需要。
GGSCI> add trandata coss3.per_test,nokey,cols(sampletime, objectid)
--無主鍵指定字段補全的示例
也可以在數據庫中打開:
SQL> alter table <tablename> add supplemental log data (primary key) columns;
千萬不要小看這步日志設置,其實在GoldenGate的配置中,這步是最容易出錯的環節。 如果開啟DDL復制做冗災備份,最好直接在數據庫級別打開補全日志:
SQL> alter database add supplemental log data (primary key,unique,foreign key) columns;
檢查一下,全是YES就OK了(整個數據庫級別補全)
SQL> select supplemental_log_data_min,
supplemental_log_data_pk,supplemental_log_data_ui
from v$database;
關於Oracle補全日志,如果表中無主鍵, 則補全一個非空唯一索引列, 如果非空唯一索引鍵也沒, 那么會補全除了LOB和LONG類型字段以外的所有列,更多信息請參考官方文檔。
四、golden gate進程配置
4.1 在Source和Target上配置Manager Source:
GGSCI>edit param mgr --配置GoldenGate主進程參數
port 7801 --GoldenGate主進程端口號
DYNAMICPORTLIST 7802-7810 -GoldenGate為進程間通訊動態分配的端口段,注意這里如果分配的端口端少於extract-replicat進程對的話,會導致部分進程因通訊失敗而出錯。
AUTOSTART EXTRACT *
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 7
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
target:
GGSCI>edit param mgr
port 7801
DYNAMICPORTLIST 7802-7810
AUTOSTART REPLICAT *
AUTORESTART REPLICAT *,RETRIES 5,WAITMINUTES 7
PURGEOLDREPLICAT S ./dirdat/*,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
保存,生成的參數文件保存在GG_HOME\ dirprm下
然后可以啟動GoldenGate主控制進程:
GGSCI>start mgr
GGSCI>info all --查看進程狀態
如果進程MANAGER狀態顯示為RUNNING則表示主進程已在運行
4.2 source端添加提取進程(extract process) 增加一個抽取:
GGSCI > add extract ext1,tranlog, begin now
GGSCI > edit params ext1
EXTRACT ext1
setenv (NLS_LANG="AMERICAN_AMERICA.ZHS16GBK")
userid tianch3,password tianch3
GETTRUNCATES
REPORTCOUNT EVERY 5 MINUTES, RATE
numfiles 50000
DISCARDFILE ./dirrpt/extsa.dsc,APPEND,MEGABYTES 50
WARNLONGTRANS 2h,CHECKINTERVAL 3m
EXTTRAIL ./dirdat/sa
DYNAMICRESOLUTION
table rme_eqp;
4.3 source端添加data pump進程 GGSCI> ADD EXTRACT dpext1, EXTTRAILSOURCE ./dirdat/sa, BEGIN now
GGSCI>view params dpext1
EXTRACT dpext1
RMTHOST 172.16.1.81, MGRPORT 7801
PASSTHRU --直通模式或普通模式
numfiles 50000
RMTTRAIL ./dirdat/ra
DYNAMICRESOLUTION
table rme_eqp;
GGSCI> add rmttrail ./dirdat/ra extract dpext1
4.4 target端創建表空間及授權
Create tablespace tianch datafile size 10240m;
CREATE USER sjcktb IDENTIFIED by oracle DEFAULT TABLESPACE tianch;
GRANT CONNECT TO sjcktb;
GRANT RESOURCE TO sjcktb;
GRANT CREATE SESSION to sjcktb;
GRANT ALTER SESSION to sjcktb;
GRANT CREATE TABLE TO sjcktb;
GRANT FLASHBACK ANY TABLE TO sjcktb;
GRANT SELECT ANY DICTIONARY TO sjcktb;
GRANT SELECT ANY TABLE TO sjcktb;
GRANT ALTER ANY TABLE TO sjcktb;
GRANT UPDATE ANY TABLE TO sjcktb;
GRANT DELETE ANY TABLE TO sjcktb;
授權比較繁瑣,有直接給dba權限的。
4.5 增加target進程檢查點 Add a Replicat checkpoint table
GGSCI >edit params ./globals
CHECKPOINTTABLE sjcktb.checkpoint
GGSCI > dblogin userid sjcktb, password sjcktb
Successfully logged into database.
GGSCI >add CHECKPOINTTABLE sjcktb.checkpoint
4.6 配置target同步隊列
GGSCI>add replicat rep1 exttrail ./dirdat/ra, checkpointtable sjcktb.checkpoint
GGSCI>view param rep1
REPLICAT rep1
USERID sjcktb,PASSWORD sjcktb
SETENV (NLS_LANG = "American_America.ZHS16GBK")
REPORT AT 01:59
REPORTCOUNT EVERY 30 MINUTES, RATE
REPERROR DEFAULT, ABEND
numfiles 50000
HANDLECOLLISIONS --去重
assumetargetdefs
DISCARDFILE ./dirrpt/repsa.dsc, APPEND, MEGABYTES 50
GETTRUNCATES
ALLOWNOOPUPDATES
map rme_eqp, target sjcktb.rme_eqp;
五、start源端進程,使用數據泵初始化加載
GGSCI>start mgr
GGSCI>start extract ext1
GGSCI>start extract dpext1
GGSCI>info all
確認進程全部running
實際部署時需要注意正確的執行順序,大致可以分為以下幾步:
(1) 源端和目標端創建配置各個同步進程。
(2) 開啟源端同步抓取進程,開始捕獲變化。
(3) 開啟初始化進程,開始數據初始化加載。
(4) 等初始化加載結束,開啟目標端復制應用進程,開始實時同步應用。
六、golden gate維護
1、啟動源端管理進程
GGSCI > start mgr // 啟動 manager進程
2、啟動所有進程
GGSCI > start ext * //啟動所有抽取進程
3、查看進程狀態是否為Running(表示已經啟動);
GGSCI > info ext * //查看所有進程信息
4、SCI > start rep * //啟動所有投遞進程
5、GGSCI>info extXX,showch //查詢extXX進程回滾檢查點
6、GGSCI > info all //查詢所有進程狀態
7、GGSCI > view report rep1 //查看復制進程報告
8、GGSCI > view ggsevt //就是我們在goldengate目錄下看到的ggserr.log