1、源爲ORACLE 11g,目的 MYSQL 5.6mysql
2、從http://download.oracle.com/ 找到並下載相應安裝包,直接釋放到相應目錄。建設全用root,數據庫也用dba。由於可能要改系統參數。sql
3、ORACLE端配置數據庫
系統環境配置數據結構
#sqlplus /nologoracle
SQL>conn / as sysdbaapp
SQL>ARCHIVE LOG LIST 查看歸檔狀態nosql
SQL> ALTER DATABASE ARCHIVELOG; 設成歸檔模式ide
若是已啓動ORACLE,可能須要關閉再設置。工具
SQL>SHUTDOWN IMMEDIATE;測試
SQL>STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
打開輔助日誌
SQL> ALTER DATABASE ADD supplemental log data;
關閉回收站
SQL>alter system set recyclebin=off deferred;
--建立相應表空間
SQL>create tablespace oggtbs datafile '/u01/app/oracle/oradata/onimei1/oggtbs01.dbf' size 500M autoextend on;
--受權
SQL>create user ggs identified by ggs default tablespace oggtbs;
SQL>GRANT create table to ggs;
SQL>GRANT CONNECT TO ggs;
SQL>GRANT ALTER ANY TABLE TO ggs;
SQL>GRANT ALTER SESSION TO ggs;
SQL>GRANT CREATE SESSION TO ggs;
SQL>GRANT FLASHBACK ANY TABLE TO ggs;
SQL>GRANT SELECT ANY DICTIONARY TO ggs;
SQL>GRANT SELECT ANY TABLE TO ggs;
SQL>GRANT RESOURCE TO ggs;
SQL>GRANT DELETE ANY TABLE TO ggs;
SQL>GRANT INSERT ANY TABLE TO ggs;
SQL>GRANT UPDATE ANY TABLE TO ggs;
SQL>GRANT RESTRICTED SESSION TO ggs;
SQL> @sequence.sql
根據提示輸入(如下導入也是):ggs
SQL> @marker_setup.sql
SQL> @ddl_setup.sql
SQL>@role_setup.sql
SQL> grant GGS_GGSUSER_ROLE to ggs;
SQL> @ddl_enable.sql
10g須要安裝dbms_share_pool包:
SQL> @?/rdbms/admin/dbmspool.sql
SQL> @ddl_pin ggs;
SQL>QUIT;
#sqlplus /nolog
SQL>conn ggs/ggs
SQL>CREATE TABLE TEST (ID INT,NAME VARCHAR(50),TESTDATE DATE,PRIMARY KEY(ID));
SQL>QUIT;
GGS全局變量配置
#./ggsci
GGSCI (ora11g) >CREATE SUBDIRS
在源庫上執行:
GGSCI (ora11g) 2> EDIT PARAMS ./GLOBALS
在編輯模式下輸入並保存:ggschema ggs
GGSCI (ora11g) 1> dblogin userid ggs password ggs
Successfully logged into database.
GGSCI (ora11g) 3> edit param mgr
PORT 7809
DYNAMICPORTLIST 7810-7909
--AUTOSTART ER *
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
MANAGER進程參數配置說明:
PORT:指定服務監聽端口;這裏以7809爲例,默認端口爲7809
DYNAMICPORTLIST:動態端口:能夠制定最大256個可用端口的動態列表,當指定的端口不可用時,管理進程將會從列表中選擇一個可用的端口,源端和目標段的Collector、Replicat、GGSCI進程通訊也會使用這些端口;
COMMENT:註釋行,也能夠用--來代替;
AUTOSTART:指定在管理進程啓動時自動啓動哪些進程;
AUTORESTART:自動重啓參數設置:本處設置表示每3分鐘嘗試從新啓動全部EXTRACT進程,共嘗試5次;
PURGEOLDEXTRACTS:按期清理trail文件設置:本處設置表示對於超過3天的trail文件進行刪除。
LAGREPORT、LAGINFO、LAGCRITICAL:
定義數據延遲的預警機制:本處設置表示MGR進程每隔1小時檢查EXTRACT的延遲狀況,若是超過了30分鐘就把延遲做爲信息記錄到錯誤日誌中,若是延遲超過了45分鐘,則把它做爲警告寫到錯誤日誌中。
GGSCI (ora11g) 6> start mgr
Manager started.
GGSCI (ora11g) 7> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
添加並查看須要複製的表:
GGSCI (ora11g) 8> ADD TRANDATA ggs.test
GGSCI (ora11g) 9> info trandata ggs.*
配置抽取進程
GGSCI (ora11g) 11> edit params ext3
extract ext3
dynamicresolution
userid ggs,password ggs
exttrail /u01/ogg/11.2/dirdat/xs
table ggs.test;
--注意分號結尾
GGSCI (ora11g) 13> add extract ext3,tranlog,begin now
EXTRACT added.
GGSCI (ora11g) 14> add exttrail /u01/ogg/11.2/dirdat/xs,extract ext3
EXTTRAIL added.
ext的模板能夠是:
EXTRACT extmb
setenv (NLS_LANG = "AMERICAN_AMERICA.UTF8")
SETENV (ORACLE_HOME = "/u01/oracle/product/11.2.0/db_1")
SETENV (ORACLE_SID = "orcl")
USERID ggs, PASSWORD ggs
--GETTRUNCATES
REPORTCOUNT EVERY 1 MINUTES, RATE
DISCARDFILE ./dirrpt/extmb.dsc,APPEND,MEGABYTES 1024
--THREADOPTIONS MAXCOMMITPROPAGATIONDELAY 60000 IOLATENS 60000
DBOPTIONS ALLOWUNUSEDCOLUMN
WARNLONGTRANS 2h,CHECKINTERVAL 3m
EXTTRAIL ./dirdat/mb
--TRANLOGOPTIONS EXCLUDEUSER USERNAME
FETCHOPTIONS NOUSESNAPSHOT
TRANLOGOPTIONS CONVERTUCS2CLOBS
TABLE hr.emp;
SETENV:配置系統環境變量
USERID/ PASSWORD: 指定OGG鏈接數據庫的用戶名和密碼,這裏使用3.4部分中建立的數據庫用戶OGG;
COMMENT:註釋行,也能夠用--來代替;
TABLE:定義需複製的表,後面需以;結尾
TABLEEXCLUDE:定義須要排除的表,若是在TABLE參數中使用了通配符,可使用該參數指定排除掉得表。
GETUPDATEAFTERS|IGNOREUPDATEAFTERS:
是否在隊列中寫入後影像,缺省複製
GETUPDATEBEFORES| IGNOREUPDATEBEFORES:
是否在隊列中寫入前影像,缺省不復制
GETUPDATES|IGNOREUPDATES:
是否複製UPDATE操做,缺省複製
GETDELETES|IGNOREDELETES:
是否複製DELETE操做,缺省複製
GETINSERTS|IGNOREINSERTS:
是否複製INSERT操做,缺省複製
GETTRUNCATES|IGNORETRUNDATES:
是否複製TRUNCATE操做,缺省不復制;
配置投遞進程
GGSCI (ora11g) 17> edit params push3
extract push3
passthru
dynamicresolution
userid ggs,password ggs
rmthost 192.168.0.166,mgrport 7809
rmttrail /u01/ogg/11.2/dirdat/xs
table ggs.test;
push的模板:
EXTRACT pushmb
SETENV (NLS_LANG = "AMERICAN_AMERICA.UTF8")
USERID ggs, PASSWORD ggs
PASSTHRU
RMTHOST 192.168.0.165, MGRPORT 7809, compress
RMTTRAIL /u01/ogg/11.2/dirdat/xs
TABLE hr.ah4;
RMTHOST:指定目標系統及其Goldengate Manager進程的端口號,還用於定義是否使用壓縮進行傳輸,本例中的compress爲壓縮傳輸;
RMTTRAIL:指定寫入到目標斷的哪一個隊列;
EXTTRAIL:指定寫入到本地的哪一個隊列;
SQLEXEC:在extract進程運行時首先運行一個SQL語句;
PASSTHRU:禁止extract進程與數據庫交互,適用於Data Pump傳輸進程;
REPORT:定義自動定時報告;
STATOPTIONS:定義每次使用stat時統計數字是否須要重置;
REPORTCOUNT:報告已經處理的記錄條數統計數字;
TLTRACE:打開對於數據庫日誌的跟蹤日誌;
DISCARDFILE:定義discardfile文件位置,若是處理中油記錄出錯會寫入到此文件中;
DBOPTIONS:指定對於某種特定數據庫所須要的特殊參數;
TRANLOGOPTIONS:指定在解析數據庫日誌時所須要的特殊參數,例如:對於裸設備,可能須要加入如下參數 rawdeviceoggset 0
WARNLONGTRANS:指定對於超過必定時間的長交易能夠在gsserr.log裏面寫入警告信息,本處配置爲每隔3分鐘檢查一次場交易,對於超過2小時的進行警告;
配置define文件
GGSCI (ora11g) 21> edit params test
defsfile /u01/ogg/11.2/dirdef/test.prm
userid ggs,password ggs
table ggs.test;
去相應的目錄下生產define文件:
[oracle@ora11g 11.2]$ ./defgen paramfile dirprm/test.prm
拷貝到mysql相應位置
[root@ora11g ~]# scp /u01/ogg/11.2/dirdef/ah4.prm 192.168.0.166:/u01/ogg/11.2/dirdef/
GGSCI (ora11g) 18> add extract push3,exttrailsource /u01/ogg/11.2/dirdat/xs
EXTRACT added.
GGSCI (ora11g) 19> add rmttrail /u01/ogg/11.2/dirdat/xs,extract push3
RMTTRAIL added.
4、MYSQL目的端配置
#vi /etc/my.cnf
log-bin=master-bin
binlog-format=row
mysql -u root -p
mysql>CREATE DATABASE ggs;
mysql>use ggs;
mysql>CREATE TABLE test (ID INT,NAME VARCHAR(50),TESTDATE DATE,PRIMARY KEY(ID)) engine=innodb;
建立ogg的初始化目錄
#./ggsci
GGSCI (mysql) 1> create subdirs
配置mgr
GGSCI (mysql) 2> edit params mgr
PORT 7809
DYNAMICPORTLIST 7810-7909
--AUTOSTART ER *
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
GGSCI (mysql) 3> start mgr
Manager started.
GGSCI (mysql) 4> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
配置checkpoint table
GGSCI(mysql)>dblogin sourcedb ggs,userid root,password 123456
若有特別端口,可用以下命令
dblogin sourcedb ggs@10.142.78.54:8866 userid test,password test
GGSCI (mysql) 7> edit params ./GLOBALS
CHECKPOINTTABLE ggs.checkpoint
GGSCI (mysql) 8> add checkpointtable ggs.checkpointtab
Successfully created checkpoint table ggs.checkpointtab.
GGSCI (mysql) 9> info checkpointtable ggs.checkpointtab
在相應的mysql數據庫中,也能夠看到相應的表被添加了:
mysql> show tables;
+---------------+
| Tables_in_hr |
+---------------+
| test |
|checkpointtab_lox |
| checkpointtab |
+---------------+
配置應用進程
GGSCI (mysql) 10> edit params rep3
replicat rep3
sourcedefs /u01/ogg/11.2/dirdef/test.prm
TARGETDB ggs,userid root,password 123456
reperror default,discard
discardfile /u01/ogg/11.2/dirrpt/rep3.dsc,append,megabytes 50
map ggs.test, target ggs.test;
GGSCI (nosql2) 13> add replicat rep3,exttrail /u01/ogg/11.2/dirdat/xs,checkpointtable ggs.test
PS:
REPLICAT進程參數配置說明:
ASSUMETARGETDEFS:假定兩端數據結構一導致用此參數;
SOURCEDEFS:假定兩端數據結構不一致,使用此參數指定源端的數據結構定義文件,該文件須要由GlodenGate工具產生。
MAP:用於指定源端與目標端表的映射關係;
MAPEXCLUDE:用於使用在MAP中使用*匹配時排除掉指定的表;
REPERROR:定義出錯之後進程的響應,通常能夠定義爲兩種:
ABEND,即一旦出現錯誤即中止複製,此爲缺省配置;
DISCARD,出現錯誤後繼續複製,只是把錯誤的數據放到discard文件中。
DISCARDFILE:定義discardfile文件位置,若是處理中油記錄出錯會寫入到此文件中;
SQLEXEC:在進程運行時首先運行一個SQL語句;
GROUPTRANSOPS:將小交易合併成一個大的交易進行提交,減小提交次數,下降系統IO消耗。
MAXTRANSOPS:將大交易拆分,每XX條記錄提交一次。
5、測試和排錯
在源端
GGSCI>START ext3
GGSCI>START push3
經過info all
應該能夠看到 mgr,ext3,push3被啓動,觀察一下子,會不會掉下來。
在目的端
GGSCI>START rep3
經過 info all
能夠看到mgr,rep3
若是不能正常啓動,能夠查看 ggserr.log。查找緣由。
常見可能的出錯緣由有:
一、因爲/tmp/mysql.sock不存在,致使dbloing失敗。在自定義的目錄,經過export MYSQL_UNIX_TCP= 來指向文件,或者經過ln -s創建軟連接。
二、因爲分號或其餘參數配置問題致使參數出錯。
三、因爲兩邊對應關係不一致,致使不能正常啓動相應進程。
四、字符集的問題,建議兩端都設成UTF8.
ORACLE端:
1). 關閉數據庫
SQL>SHUTDOWN IMMEDIATE
2) 啓動到Mount
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;
SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP
LINUX環境配置:
# export NLS_LANG='American_America.AL32UTF8'
#export LANG=en_US.UTF-8
LANG,NLS_LANG,客戶端OS 這3個字符集一致
(GB2312 ZHS16GBK)
(UTF-8 AL32UTF8)
MYSQL 端
CREATE DATABASE TEST DEFAULT CHARSET SET UTF-8
OGG 設置源端和目的端:
ggsci>edit params ./GLOBALS
在第一行加
CHARSET UTF-8
參考官方文檔
http://docs.oracle.com/goldengate/1212/gg-winux/GWURF/preface.htm#GWURF101