goldengate同步sql server to oracle

准备工作,在sql server机器上建立odbc连接
一、初始化加载数据
1、source端
1)添加extract进程

ADD EXTRACT einito, SOURCEISTABLE
edit param einito
--以下添加到einito.prm文件中
EXTRACT einito
SOURCEDB mssql_test
RMTHOST 127.0.0.1, MGRPORT 7815
RMTTASK REPLICAT, GROUP rinitm
TABLE dbo.t1;

2)生成defgen文件

edit params defgen
---以下为defgen.prm中内容
defsfile F:\ogg\mssql\dirdef\t1.def
sourcedb mssql_test
table dbo.t1;

--退出ggsci(ogg安装目录dos下)
exit
defgen paramfile F:\ogg\mssql\dirprm\defgen.prm

2、target端
1)replicat 进程

ADD REPLICAT rinitm, SPECIALRUN
edit params rinitm
--以下内容在rinitm.prm文件中
replicat rinitm
sourcedefs F:\ogg\oracle\dirdef\t1.def
SETENV (NLS_LANG =AMERICAN_AMERICA.ZHS16GBK)
USERID chf, PASSWORD xifenfei
DISCARDFILE F:\ogg\oracle\dirrpt\RINItm.dsc, append
MAP "dbo.t1", TARGET CHF.T1_1;

二、数据同步
1、source端
1)添加附件日志

dblogin sourcedb mssql_test
add trandata dbo.t1

2)摄取进程(extract)

add extract extm,tranlog,begin now
ADD EXTTRAIL F:\ogg\mssql\dirdat\ms, EXTRACT EXTM
edit param extm
--以下为extm.prm内容
extract extm
SOURCEDB mssql_test
exttrail F:\ogg\mssql\dirdat\ms
dynamicresolution
gettruncates
tranlogoptions managesecondarytruncationpoint
TABLE dbo.t1;

3)传递进程(data pump extract )

ADD EXTRACT pump1, EXTTRAILSOURCE F:\ogg\mssql\dirdat\ms, BEGIN now
add rmttrail F:\ogg\oracle\dirdat\or extract pump1
edit params pump1
--以下为pump1.prm内容
extract pump1
SOURCEDB mssql_test  --需要,不然不能获得数据
rmthost 127.0.0.1, mgrport 7815
rmttrail F:\ogg\oracle\dirdat\or
PASSTHRU
gettruncates
TABLE dbo.t1;

2、target端
1)设置检查点表

edit params ./GLOBALS
--下面一句为GLOBALS文件中内容
CHECKPOINTTABLE ogg.chkpoint

dblogin userid ogg,password xifenfei 
ADD CHECKPOINTTABLE ogg.chkpoint

2)replicat进程

add replicat repl exttrail F:\ogg\oracle\dirdat\or,begin now,checkpointtable ogg.chkpoint 
edit  params repl
--以下为repl.prm中内容
replicat repl          
SETENV (NLS_LANG =AMERICAN_AMERICA.ZHS16GBK)                     
userid ogg,password xifenfei                    
sourcedefs F:\ogg\oracle\dirdef\t1.def                         
reperror default,discard                      
discardfile F:\ogg\oracle\dirtmp\repsz.dsc,append,megabytes 100   
gettruncates                                                      
MAP "dbo.t1", TARGET CHF.T1_1;

note:
因为defgen中的表名为小写,所以在replicat相关进程中,map表需要使用双引号小写

goldengate 异常处理

异常处理一(异常表通用型)
新建异常处理表

create table ogg.exception_log
    ( replicat_name varchar2(10),
      table_name varchar2(100),
      errno number,
      dberrmsg varchar2(4000),
      optype varchar2(20),
      errtype varchar2(20),
      logrba number,
      logposition number,
     committimestamp timestamp,
     primary key(logrba,logposition,committimestamp)
);

REPLICAT添加异常处理

REPERROR (DEFAULT, EXCEPTION)
REPERROR (DEFAULT2,discard)---abend根据需求
map chf.a_t_1, target chf.a_t_1;
map chf.a_t_1, target ogg.exception_log,
EXCEPTIONSONLY,
INSERTALLRECORDS,
COLMAP (   replicat_name = "repl"
, table_name = @GETENV ("GGHEADER", "TABLENAME")
, errno = @GETENV ("LASTERR", "DBERRNUM")
, dberrmsg = @GETENV ("LASTERR", "DBERRMSG")
, optype = @GETENV ("LASTERR", "OPTYPE")
, errtype = @GETENV ("LASTERR", "ERRTYPE")
, logrba = @GETENV ("GGHEADER", "LOGRBA")
, logposition = @GETENV ("GGHEADER", "LOGPOSITION")
, committimestamp = @GETENV ("GGHEADER", "COMMITTIMESTAMP"));
--实例中只处理chf.a_t_1表

异常处理二(异常表需要定制)
新建表(正常表和异常表)

--正常表
create table fei_1_1(id number , name varchar2(1000));
--异常表
create table ogg.exception_fei_1
    ( id number,
      name varchar2(1000),
      table_name varchar2(100),
      errno number,
      dberrmsg varchar2(4000),
      optype varchar2(20),
      errtype varchar2(20),
      logrba number,
      logposition number,
     committimestamp timestamp,
     primary key(logrba,logposition,committimestamp)
);

异常处理程序

map chf.fei_1, target chf.fei_1_1;
map chf.fei_1, target ogg.exception_fei_1,
EXCEPTIONSONLY,
INSERTALLRECORDS,
COLMAP ( USEDEFAULTS
, table_name = @GETENV ("GGHEADER", "TABLENAME")
, errno = @GETENV ("LASTERR", "DBERRNUM")
, dberrmsg = @GETENV ("LASTERR", "DBERRMSG")
, optype = @GETENV ("LASTERR", "OPTYPE")
, errtype = @GETENV ("LASTERR", "ERRTYPE")
, logrba = @GETENV ("GGHEADER", "LOGRBA")
, logposition = @GETENV ("GGHEADER", "LOGPOSITION")
, committimestamp = @GETENV ("GGHEADER", "COMMITTIMESTAMP"));

异常处理三(通配符MAPEXCEPTION)
新建异常表

create table ogg.exception_fei_all
    ( replicat_name varchar2(10),
      table_name varchar2(100),
      errno number,
      dberrmsg varchar2(4000),
      optype varchar2(20),
      errtype varchar2(20),
      logrba number,
      logposition number,
     committimestamp timestamp,
     primary key(logrba,logposition,committimestamp)
);

异常处理程序

MAP chf.fei_*, TARGET chf.*,
MAPEXCEPTION (TARGET ogg.exception_fei_all,
COLMAP (   replicat_name = "repl"
, table_name = @GETENV ("GGHEADER", "TABLENAME")
, errno = @GETENV ("LASTERR", "DBERRNUM")
, dberrmsg = @GETENV ("LASTERR", "DBERRMSG")
, optype = @GETENV ("LASTERR", "OPTYPE")
, errtype = @GETENV ("LASTERR", "ERRTYPE")
, logrba = @GETENV ("GGHEADER", "LOGRBA")
, logposition = @GETENV ("GGHEADER", "LOGPOSITION")
, committimestamp = @GETENV ("GGHEADER", "COMMITTIMESTAMP")));

处理说明:
REPERROR参数用以控制Replicat进程如何响应映射过程中发生的错误
DEFAULT参数代表一种全局错误类型,即除去所有已明确指定的错误外的一切错误
DEFAULT2参数代表当DEFAULT错误以Exception方式响应时,所有MAP映射中未定义Exception部分出现的所有错误
EXCEPTIONSONLY只能用于确定表的异常处理
MAPEXCEPTION可以用于通配符的表异常处理

使用goldengate同步oracle

一、source端

add extract extl,tranlog,begin now
ADD EXTTRAIL /u01/ogg/dirdat/lr, EXTRACT EXTL
ADD TRANDATA chf.objce_t

edit params extl
extract extl
userid ogg,password xifenfei
exttrail /u01/ogg/dirdat/lr
dynamicresolution
gettruncates
table chf.objce_t;

ADD EXTRACT pump1, EXTTRAILSOURCE /u01/ogg/dirdat/lr, BEGIN now
add rmttrail /u01/ogg/dirdat/rl extract pump1

edit params pump1
extract pump1
userid ogg, password xifenfei
rmthost 192.168.1.111, mgrport 7809
rmttrail /u01/ogg/dirdat/rl
PASSTHRU
gettruncates
table chf.objce_t;

二、target端

edit params ./GLOBALS
CHECKPOINTTABLE ogg.chkpoint

dblogin userid ogg,password xifenfei
ADD CHECKPOINTTABLE ogg.chkpoint

add replicat repl exttrail /u01/ogg/dirdat/rl,begin now,checkpointtable ogg.chkpoint 

edit  params repl
replicat repl                               
userid ogg,password xifenfei                    
assumetargetdefs                          
reperror default,discard                      
discardfile /tmp/repsz.dsc,append,megabytes 100   
gettruncates                                                      
map chf.objce_t, target chf.objce_t;   

使用goldengate同步mysql

一、source端

add extract extl,vam,begin now
ADD EXTTRAIL F:\ogg\mysql\dirdat\rl, EXTRACT EXTL

edit params extl
extract extl
sourcedb test@localhost:3306,userid root,password xifenfei
exttrail F:\ogg\mysql\dirdat\rl
dynamicresolution
gettruncates
table test.t_1;

add EXTRACT pump1, EXTTRAILSOURCE F:\ogg\mysql\dirdat\rl, BEGIN now
add rmttrail /ogg/mysql/dirdat/rl extract pump1

edit params pump1
extract pump1
rmthost 192.168.1.111,mgrport 7808
rmttrail /ogg/mysql/dirdat/rl
PASSTHRU
gettruncates
table test.t_1;

二、target端

edit params ./GLOBALS
dblogin sourcedb test@localhost:3306,userid root,password xifenfei
CHECKPOINTTABLE ogg.chkpoint

ADD CHECKPOINTTABLE ogg.chkpoint

add replicat repl exttrail /ogg/mysql/dirdat/rl,begin now,checkpointtable ogg.chkpoint 

edit params repl
replicat repl
DBOPTIONS HOST 127.0.0.1, CONNECTIONPORT 3306
TARGETDB test,userid root,password xifenfei
assumetargetdefs
reperror default,discard
discardfile /tmp/mysql.dsc,append,megabytes 100
gettruncates
map TEST.T_1, target "test.t_1";     

三、说明
本实例是win 中的mysql同步到linux中的mysql
有个注意点:
1、add extract extl,vam,begin now 不像oracle中的tranlog
2、注意各个参数中schema.tablename大小写问题
1)win中不区分,全部使用小写会自动转换为大写
2)在replicate参数中,因为map是从win中的data pump中得到,所以map后面的schema.tablename需要大写
3)在replicate参数中,因为table是linux中的对应linux中的数据库名和表名(mysql是以文件形式存储,一般均为小写),所以map后面的schema.tablename需要小写+双引号,防止转为大写
3、注意mysql数据库编码
四、与oracle不同之处
1、登录
dblogin sourcedb dbname@localhost:3306,userid root,password xifenfei

2、Extract中访问mysql
sourcedb dbname@localhost:3306,userid root,password xifenfei

3、Replicat中访问mysql
DBOPTIONS HOST 127.0.0.1, CONNECTIONPORT 3306
TARGETDB dbname,userid root,password xifenfei

goldedgate 初始化数据

一、mysql数据库初始化
1、source端配置

ADD EXTRACT EINI1, SOURCEISTABLE
EDIT PARAMS EINI1

EXTRACT EINI1
sourcedb test@localhost:3306,USERID root, PASSWORD xifenfei
RMTHOST 192.168.1.111, MGRPORT 7808
RMTTASK REPLICAT, GROUP RINI1
TABLE "test.web_statistics";

3、target端配置

ADD REPLICAT RINI1, SPECIALRUN
EDIT PARAMS RINI1

REPLICAT RINI1
ASSUMETARGETDEFS
DBOPTIONS HOST 127.0.0.1, CONNECTIONPORT 3306
TARGETDB test,userid root,password xifenfei 
DISCARDFILE ./dirrpt/RINI2.dsc, PURGE
MAP "test.web_statistics", TARGET "test.web_statistics";

3、开启复制
start extract eini1

二、oracle数据库
1、source端配置

ADD EXTRACT EINI1, SOURCEISTABLE
EDIT PARAMS EINI1

EXTRACT EINI1
SETENV (NLS_LANG =AMERICAN_AMERICA.UTF8)
USERID ogg, PASSWORD "xifenfei"
RMTHOST 192.168.1.111, MGRPORT 7809
RMTTASK REPLICAT, GROUP RINI1
TABLE chf.init_obj;

2、target端配置

ADD REPLICAT RINI1, SPECIALRUN
EDIT PARAMS RINI1

REPLICAT RINI1
ASSUMETARGETDEFS
SETENV (NLS_LANG =AMERICAN_AMERICA.UTF8)
USERID ogg, PASSWORD xifenfei
DISCARDFILE ./dirrpt/RINI1.dsc, PURGE
MAP chf.init_obj, TARGET chf.init_obj;

3、开启复制
start extract eini1