MySQL to Oracle 屬於異質性平台的同步設定,資料的初始化必須使用 OGG 原生提供的方式來進行。
來源端 (Source) 版本 : MySQL 5.5.34 + OGG 12.2.0.1.1
目標端 (Target) 版本 : Oracle 11.2.0.4 + OGG 12.2.0.1.1
同步 Schema : HR
作業系統平台均為 Linux 。
OGG for MySQL 軟體的安裝只需要將其解壓縮即可 :
$ unzip ggs_Linux_x64_MySQL_64bit.tar $ ./ggsci GGSCI (nccdb2-p) 1> create subdirs |
OGG for Oracle 的安裝可參考章節 2 的說明。
Source 資料庫 (MySQL) 必須符合兩個要求才能進行 Extract , binlog_format 需為 ROW 且 Table 需使用 InnoDB 引擎創建 :
mysql> show variables like 'binlog_format'; +--------------------+-------------+ | Variable_name | Value | +--------------------+-------------+ | binlog_format | ROW | +--------------------+-------------+ 1 row in set (0.00 sec)
mysql> SELECT table_schema, table_name, engine FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='hr'; |
Target 資料庫 (Oracle) 建立 OGG 使用者並授予相關權限 :
SQL> create tablespace ogg datafile '/u01/oradata/ogg.dbf' size 500M; SQL> create user ogg identified by ogg default tablespace ogg; SQL> grant create any table to ogg; SQL> grant create any view to ogg; SQL> grant create any procedure to ogg; SQL> grant create any sequence to ogg; SQL> grant create any index to ogg; SQL> grant create any trigger to ogg; SQL> grant create any view to ogg; SQL> exec dbms_goldengate_auth.grant_admin_privilege('OGG'); (11g 執行) |
設定參數 enable_goldengate_replication 為 true :
SQL> alter system set enable_goldengate_replication=true; |
Target (Oracle) 設定 GLOBALS 參數如下 :
$ ./ggsci GGSCI> edit param ./GLOBALS |
GGSCHEMA OGG CHECKPOINTTABLE OGG.GGSCHKPT |
添加 Check Point Table :
$ ./ggsci GGSCI> dblogin userid ogg, password ogg GGSCI> add checkpointtable ogg.ggschkpt |
Source (MySQL) 與 Target (Oracle) 設定 MGR 參數如下 :
$ ./ggsci GGSCI> edit param mgr |
PORT 7809 AUTORESTART ER *, RETRIES 50, WAITMINUTES 4 PURGEOLDEXTRACTS ./dirdat/*, usecheckpoints, minkeepfiles 10 LAGREPORTHOURS 1 LAGINFOMINUTES 30 LAGCRITICALMINUTES 45 |
啟動 MGR 完成設定 :
$ ./ggsci GGSCI> start mgr |
由於 Source 與 Target 資料庫為不同平台,所以於 Source 必須建立 Define File ,並且將此檔複製到 Target 端,用意在於讓 Target OGG 同步時可以清楚的知道 Source 端的表格定義。
編輯 Define File 的參數 :
$ ./ggsci GGSCI> edit param mgr |
defsfile ./dirdef/defgen.def, purge sourcedb hrdb@localhost:3306, userid root,password root1234 table hr.*; |
於 OGG 目錄下執行 defgen 建立 Define File :
$ ./defgen paramfile ./dirprm/defgen.prm |
執行完畢後將 ./dirdef/defgen.def 檔案複製到 Target 端 OGG 的 ./dirdef 目錄下。
接下來建立 Extract 與 Pump ,首先編輯 Extract 參數 E_HR :
$ ./ggsci GGSCI> edit param E_HR |
EXTRACT E_HR SETENV (NLS_LANG="AMERICAN_AMERICA.UTF8") SETENV (MYSQL_HOME="/apps/mysql") TRANLOGOPTIONS ALTLOGDEST /apps/mysql/data/mysql-bin-9757.index SOURCEDB hrdb@localhost:3306,userid root,password root1234 EXTTRAIL ./dirdat/E1 DISCARDFILE ./dirrpt/E_HR.dsc, PURGE, MEGABYTES 100 GETUPDATEBEFORES NOCOMPRESSDELETES NOCOMPRESSUPDATES GETTRUNCATES FETCHOPTIONS FETCHPKUPDATECOLS EOFDELAYCSECS 10 TABLE hr.*; |
設定 Pump 參數 P_HR :
$ ./ggsci GGSCI> edit param P_HR |
EXTRACT P_HR SETENV (NLS_LANG="AMERICAN_AMERICA.UTF8") SETENV (MYSQL_HOME="/apps/mysql") RMTHOST 192.168.49.20 , MGRPORT 7809 RMTTRAIL ./dirdat/R1 PASSTHRU GETTRUNCATES TABLE hr.*; |
添加 Extract 與 Pump Group :
GGSCI> add extract e_hr, tranlog, begin now GGSCI> add exttrail ./dirdat/E1, extract e_hr, megabytes 100 GGSCI> add extract p_hr, exttrailsource ./dirdat/E1 GGSCI> add rmttrail ./dirdat/R1, extract p_hr, megabytes 100 |
啟動 Extract 與 Pump :
GGSCI> start extract e_hr GGSCI> start extract p_hr |
由於 Source (MySQL) 與 Target (Oracle) 為不同平台,所以必須使用 OGG 原生的 Initial Load 方式。 Target (Oracle) 端所有表格定義與資料型態的匹配需要先規劃好,然後在執行 Initial Load 之前將其事先建立完成。
於 Source (MySQL) 端編輯 Initial Load Extract 參數 E_INIT :
$ ./ggsci GGSCI> edit param E_INIT |
SOURCEISTABLE sourcedb hrdb@localhost:3306, userid root,password root1234 rmthost 192.168.49.20, mgrport 7809 rmtfile ./dirdat/ia, maxfiles 9999, megabytes 200 table hr.*; |
直接執行 extract 進行 Initial Load Extract 抽取 Source 端的資料:
$ cd $GG_HOME $ ./extract paramfile ./dirprm/E_INIT.prm |
接下來於 Target (Oracle) 端編輯 Initial Load Replicate 參數 R_INIT :
$ ./ggsci GGSCI> edit param R_INIT |
SPECIALRUN SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8") SETENV (ORACLE_SID="hrdb") SETENV (ORACLE_HOME="/oracle/app/oracle/product/11.2.0/db") userid ogg, password ogg sourcedefs ./dirdef/defgen.def EXTFILE ./dirdat/ia , MAXFILES 9999 , Megabytes 200 , append MAP HR.*, TARGET HR.*; |
直接執行 replicat 來 Apply 這些初始化的資料:
$ cd $GG_HOME $ ./replicat paramfile ./dirprm/R_INIT.prm |
在資料初始化結束之後,接下來就可以設定 Replicate 同步,編輯 Replicate 參數 R_HR :
$ ./ggsci GGSCI> edit param R_HR |
REPLICAT R_HR SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8") SETENV (ORACLE_SID="hrdb") SETENV (ORACLE_HOME="/oracle/app/oracle/product/11.2.0/db") USERID ogg, PASSWORD ogg ASSUMETARGETDEFS APPLYNOOPUPDATES HANDLECOLLISIONS END RUNTIME SOURCEDEFS ./dirdef/defgen.def DISCARDFILE ./dirrpt/R_HR.dsc, MEGABYTES 10, PURGE GETTRUNCATES MAP HR.*, TARGET HR.*; |
添加 Replicate Group :
$ ./ggsci GGSCI> add replicat r_hr, exttrail ./dirdat/R1 |
啟動 Replicate :
$ ./ggsci GGSCI> start replicat r_hr |
第一次啟動 Replicate 時,參數中必須有 HANDLECOLLISIONS 與 END RUNTIME 參數,待 Replicate 解決 Initial Load 過程中的衝突後會自動停止,此時再將參數 HANDLECOLLISIONS 與 END RUNTIME 移除 :
$ ./ggsci GGSCI> edit param R_HR |
REPLICAT R_HR SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8") SETENV (ORACLE_SID="hrdb") SETENV (ORACLE_HOME="/oracle/app/oracle/product/11.2.0/db") USERID ogg, PASSWORD ogg ASSUMETARGETDEFS APPLYNOOPUPDATES SOURCEDEFS ./dirdef/defgen.def DISCARDFILE ./dirrpt/R_HR.dsc, MEGABYTES 10, PURGE GETTRUNCATES MAP HR.*, TARGET HR.*; |
重新啟動 Replicate 開始差異資料的同步 :
$ ./ggsci GGSCI> start replicat r_hr |
完成設定後,接下來就只需要使用 info all 來觀察同步狀態即可。
沒有留言:
張貼留言