GoldenGate實施步驟


一、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


免責聲明!

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



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