SQL SERVER2012同步Oracle数据

SQL SERVER2012同步Oracle数据,第1张

我理解的是,你的需求是将oracle中变化的数据同步到sqlserver中。

我提供的解决方案是使用oracle的ogg,就是goldengate来实现。

首先,这个需求是跨库跨平台的,一般sqlserver都装在win上,而oracle都装在linux上(当然,也有linux版的sqlserver,oracle也能装在win上,但是实现的方法和结果是一样的),但是对于ogg来讲无所谓,ogg的特点就是可以跨库跨平台跨版本来同步数据。

源端是oracle,目标端是sqlserver,可以使用11版本的ogg来同步数据,该版本功能够用,bug也相对少了,我做运维也经常用。

使用ogg的注意事项如下:

源端oracle库的同步表必须有主键。

源端oracle库必须是force logging,必须开附加日志。

初始化数据的时候,可以使用ogg自己的initload功能,省的还得用sqlserver的同步助手,费劲。

oracle和sqlserver支持的字段类型不要太特殊了,比如oracle的lob字段,sqlserver的各种text字段啥的,这些特有的字段,ogg支持不是很好,而对于int、varchar等通用的字段就没问题了。

最后,希望能帮到你,但是ogg这个东西对你来说可能是新的,所以你要用的话,得先学学,有问题可以问我。

针对ogg的P进程挂起的处理步骤(以内网为例,内网 *** 作步骤一致)查出问题表:

1、首先登陆ogg服务器

2、用命令 su - oracle却换到oracle用户

3、用命令 cd ogg进入到ogg目录

4、用命令 ./ggsci进入到ogg命令行界面

5、用命令 info all查看ogg进程运行情况

6、用命令 view report xxxx可以查看某个进入的运行信息日志 (如何那个进程挂起了就看那个的) 例如view report r_in7、从日志信息中查看报错的信息,如下所示:

2016-11-16 14:43:23 WARNING OGG-01004 Aborted grouped transaction on 'NEWGDLV.T_O_CERTIFICATEINFO', Database error 1403 (OCI Error ORA-01403: no data found, SQL <UPDATE "NEWGDLV"."T_O_CERTIFICATEINFO" SET "CFI_PRINTCERTDATE" = :a1,"CFI_PRINTSTATUS" = :a2,"CFI_SENDSTATUS" = :a3,"CFI_MODTIME" = :a4,"CFI_MODUSERID" = :a5,"CFI_MODUSER" = :a6 WHERE "CFI_ID" = :b0>).

2016-11-16 14:43:23 WARNING OGG-01003 Repositioning to rba 459579136 in seqno 31.

2016-11-16 14:43:23 WARNING OGG-01154 SQL error 1403 mapping NEWGDSFLV.T_O_CERTIFICATEINFO to NEWGDLV.T_O_CERTIFICATEINFO OCI Error ORA-01403: no data found, SQL <UPDATE "NEWGDLV"."T_O_CERTIFICATEINFO" SET "CFI_PRINTCERTDATE" = :a1,"CFI_PRINTSTATUS" = :a2,"CFI_SENDSTATUS" = :a3,"CFI_MODTIME" = :a4,"CFI_MODUSERID" = :a5,"CFI_MODUSER" = :a6 WHERE "CFI_ID" = :b0>.

8、这里我们可以看到NEWGDLV.T_O_CERTIFICATEINFO这个表有报错9、报错原因可能有:

a、该表没有主键

b、该表没有附加日志

10、我们通过数据库可以看到这个表是有主键的。那么原因就是没有附加日志造成的了在对应进程中排除问题表:

1、排除影响复制复制进程的表,用命令:edit param r_out 结果显示如下图:

然后用命令:edit param r_out 编辑这个参数配置文件按字母i进入编辑状态 在OBEY语句前面加上影响复制进程对应的目标表即NEWGDSFLV.T_O_CERTIFICATEINFO,加上的完整语句如下:

MAPEXCLUDE NEWGDSFLV.T_O_CERTIFICATEINFO按下esc键然后依次键入:wq保存退出

重启ogg:

1、停止所有ogg进程,用命令stop *

2、启动所有ogg进程,用命令start *

为问题表添加附加日志:

1、在ogg的命令界面执行命令view param e_in显示如下信息:

extract E_IN

SETENV (ORACLE_SID="exdb")

SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)Userid ggs,PASSWORD AACAAAAAAAAAAAIAAGLHJDWAVIWIIBYE, BLOWFISH, ENCRYPTKEY DEFAULT--TRANLOGOPTIONS ASMUSER SYS@ASM, ASMPASSWORD oracleREPORT AT 01:59

REPORTROLLOVER AT 02:00

CACHEMGR, CACHESIZE 256MB

TRANLOGOPTIONS EXCLUDEUSER GGS

EXTTRAIL /ora_data/dirdat/in

NUMFILES 3000

EOFDELAYCSECS 30

GETTRUNCATES

TRANLOGOPTIONS DBLOGREADER

DYNAMICRESOLUTION

BR BRINTERVAL 2H , BRDIR BR

GETUPDATEBEFORES

NOCOMPRESSDELETES

WARNLONGTRANS 3H, CHECKINTERVAL 3M

OBEY /oracle/ogg/dirprm/e_in.txt

2、登录数据库 dblogin Userid ggs,PASSWORD AACAAAAAAAAAAAIAAGLHJDWAVIWIIBYE, BLOWFISH, ENCRYPTKEY DEFAULT(这行是从上面结果中复制过来的)Successfully logged into database.

3、查看目标表是否有附加日志 info trandata NEWGDSFLV.T_O_CERTIFICATEINFOLogging of supplemental redo log data is disabled for table NEWGDSFLV.T_O_CERTIFICATEINFO.

4、结果显示是没有附加日志的,用命令为该表添加附加日志add trandata NEWGDSFLV.T_O_CERTIFICATEINFO。删除附加日志用命令:delete trandata xxx.yyLogging of supplemental redo data enabled for table NEWGDSFLV.T_O_CERTIFICATEINFO.

5、查看附加日志是否添加成功,info trandata NEWGDSFLV.T_O_CERTIFICATEINFOLogging of supplemental redo log data is enabled for table NEWGDSFLV.T_O_CERTIFICATEINFO.

Columns supplementally logged for table NEWGDSFLV.T_O_CERTIFICATEINFO: CFI_ID.

6、显示附加日志添加成功了!

初始化数据:

1、初始化内外网对应问题的数据库数据,该表是以内网为准,所以我们备份内网对应的该表然后清空内网原始的表停止所有ogg进程:

1、停止所有ogg进程,用命令stop *

恢复被排除的表:

1、恢复被排除的表(删掉或注释之前排除表的那行语句即可)启动所有ogg进程:

1、启动所有ogg进程,用命令start *

2、外网也以同样的方式处理

导入数据:

1、从备份表导入数据到被清空的原始表,然后去外网查看数据是否有同步2、通过数据库查看,我们看到数据已经成功同步到外网了总结:

当ogg出现某一进程因某张表异常挂起之后总体处理步骤如下:

1、查出这张表

2、在对应进程的配置文件中排除问题表

3、重启ogg

4、为问题表添加附加日志或者主键

5、初始化数据

6、停止ogg所有进程

7、恢复被排除的问题表

8、启动ogg所有进程

9、导入数据,检查同步是否生效

针oggP进程挂起处理步骤(内网例内网 *** 作步骤致)查问题表:

1、首先登陆ogg服务器

2、用命令 su - oracle却换oracle用户

3、用命令 cd ogg进入ogg目录

4、用命令 ./ggsci进入ogg命令行界面

5、用命令 info all查看ogg进程运行情况

6、用命令 view report xxxx查看某进入运行信息志 (何进程挂起看) 例view report r_in7、志信息查看报错信息所示:

2016-11-16 14:43:23 WARNING OGG-01004 Aborted grouped transaction on 'NEWGDLV.T_O_CERTIFICATEINFO', Database error 1403 (OCI Error ORA-01403: no data found, SQL :a2,"CFI_SENDSTATUS" = :a3,"CFI_MODTIME" = :a4,"CFI_MODUSERID" = :a5,"CFI_MODUSER" = :a6 WHERE "CFI_ID" = :b0>).

2016-11-16 14:43:23 WARNING OGG-01003 Repositioning to rba 459579136 in seqno 31.

2016-11-16 14:43:23 WARNING OGG-01154 SQL error 1403 mapping NEWGDSFLV.T_O_CERTIFICATEINFO to NEWGDLV.T_O_CERTIFICATEINFO OCI Error ORA-01403: no data found, SQL :a2,"CFI_SENDSTATUS" = :a3,"CFI_MODTIME" = :a4,"CFI_MODUSERID" = :a5,"CFI_MODUSER" = :a6 WHERE "CFI_ID" = :b0>.

8、我看NEWGDLV.T_O_CERTIFICATEINFO表报错9、报错原能:

a、该表没主键

b、该表没附加志

10、我通数据库看表主键原没附加志造应进程排除问题表:

1、排除影响复制复制进程表用命令:edit param r_out 结显示图:

用命令:edit param r_out 编辑参数配置文件按字母i进入编辑状态 OBEY语句前面加影响复制进程应目标表即NEWGDSFLV.T_O_CERTIFICATEINFO加完整语句:

MAPEXCLUDE NEWGDSFLV.T_O_CERTIFICATEINFO按esc键依键入:wq保存退

重启ogg:

1、停止所ogg进程用命令stop *

2、启所ogg进程用命令start *

问题表添加附加志:

1、ogg命令界面执行命令view param e_in显示信息:

extract E_IN

SETENV (ORACLE_SID="exdb")

SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)Userid ggs,PASSWORD AACAAAAAAAAAAAIAAGLHJDWAVIWIIBYE, BLOWFISH, ENCRYPTKEY DEFAULT--TRANLOGOPTIONS ASMUSER SYS@ASM, ASMPASSWORD oracleREPORT AT 01:59

REPORTROLLOVER AT 02:00

CACHEMGR, CACHESIZE 256MB

TRANLOGOPTIONS EXCLUDEUSER GGS

EXTTRAIL /ora_data/dirdat/in

NUMFILES 3000

EOFDELAYCSECS 30

GETTRUNCATES

TRANLOGOPTIONS DBLOGREADER

DYNAMICRESOLUTION

BR BRINTERVAL 2H , BRDIR BR

GETUPDATEBEFORES

NOCOMPRESSDELETES

WARNLONGTRANS 3H, CHECKINTERVAL 3M

OBEY /oracle/ogg/dirprm/e_in.txt

2、登录数据库 dblogin Userid ggs,PASSWORD AACAAAAAAAAAAAIAAGLHJDWAVIWIIBYE, BLOWFISH, ENCRYPTKEY DEFAULT(行面结复制)Successfully logged into database.

3、查看目标表否附加志 info trandata NEWGDSFLV.T_O_CERTIFICATEINFOLogging of supplemental redo log data is disabled for table NEWGDSFLV.T_O_CERTIFICATEINFO.

4、结显示没附加志用命令该表添加附加志add trandata NEWGDSFLV.T_O_CERTIFICATEINFO删除附加志用命令:delete trandata xxx.yyLogging of supplemental redo data enabled for table NEWGDSFLV.T_O_CERTIFICATEINFO.

5、查看附加志否添加功info trandata NEWGDSFLV.T_O_CERTIFICATEINFOLogging of supplemental redo log data is enabled for table NEWGDSFLV.T_O_CERTIFICATEINFO.

Columns supplementally logged for table NEWGDSFLV.T_O_CERTIFICATEINFO: CFI_ID.

6、显示附加志添加功

初始化数据:

1、初始化内外网应问题数据库数据该表内网准所我备份内网应该表清空内网原始表停止所ogg进程:

1、停止所ogg进程用命令stop *

恢复排除表:

1、恢复排除表(删掉或注释前排除表行语句即)启所ogg进程:

1、启所ogg进程用命令start *

2、外网同式处理

导入数据:

1、备份表导入数据清空原始表外网查看数据否同步2、通数据库查看我看数据已经功同步外网总结:

ogg现某进程某张表异挂起总体处理步骤:

1、查张表

2、应进程配置文件排除问题表

3、重启ogg

4、问题表添加附加志或者主键

5、初始化数据

6、停止ogg所进程

7、恢复排除问题表

8、启ogg所进程

9、导入数据检查同步否效

D


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/bake/11930171.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存