资讯专栏INFORMATION COLUMN

SQLServer到Oracle通过OGG初始化并通过基于时间的方式开启复制进程

IT那活儿 / 2162人阅读
SQLServer到Oracle通过OGG初始化并通过基于时间的方式开启复制进程
环境介绍

源端:

操作系统版本:

Windows Server 2008 R2 Enterprise

数据库版本:

Microsoft SQL Server 2008

OGG版本:

Oracle GoldenGate Command Interpreter for SQL Server

Version 12.1.2.1.10 21604177 OGGCORE_12.1.2.1.0OGGBP_PLATFORMS_150902.1337

Windows x64 (optimized), Microsoft SQL Server on Sep 2

Operating system character set identified as GBK.

目标端:

目标端操作系统内核版本:

CentOS Linux release 7.4.1708 (Core)

数据库版本:

11.2.0.4.0

OGG版本:

Oracle GoldenGate Command Interpreter for Oracle

Version 12.1.2.1.10 21604177 OGGCORE_12.1.2.1.0OGGBP_PLATFORMS_150902.1337_FBO

Linux, x64, 64bit (optimized), Oracle 11g on Sep  2

Operating system character set identified as UTF-8.


方案介绍

当前项目上sqlserver到oracle想要初始化一张新表,需要依赖中间库,


原始方案

  1. 目标库sqlserver全部备库

  2. 中间库sqlserver全库恢复

  3. 中间库通过ogg原有的初始化功能初始化此表数据到目标库

  4. 初始化完成,源库和目标库建立复制关系,基于备份点启动复制进程

优化后的方案

  1. 源库直接初始化数据到目标库

  2. 目标库搭建复制进程基于初始化时间点之前启动复制进程

  3. 添加reperror (-1, discard)参数针对主机冲突异常处理

基于时间的优点

sqlserver初始化少量表到oracle,我们这边项目同步需求相对较多,以前保留的初始化方案是采用第一种原始方案,这就导致这类需要初始化的需求每次提交都要预留一周的操作时间,毕竟备份恢复600G的数据库耗时和对生产系统的性能影响还是不小的,最后我们通过优化采用基于时间的开启复制进程方式,大大缩减了中间耗时的时间成本,工作效率提升95%。


操作方案


源库配置

MGR进程:

GGSCI (crmprddb) 2> view params mgr
PORT 7809
PURGEOLDEXTRACTS dirdatcm* USECHECKPOINTS, MINKEEPDAYS 3
AUTORESTART EXTRACT *, WAITMINUTES 6, RETRIES 5
LAGREPORTMINUTES 5
LAGCRITICALMINUTES 15

投递进程DPCRM

GGSCI (crmprddb) 3> view params DPCRM
EXTRACT dpcrm
DISCARDFILE dirrptdpcrm.dsc, PURGE
PASSTHRU
RMTHOST 192.168.***.***, MGRPORT 7809
RMTTRAIL dirdat/tr
TABLE *.*;

抽取进程EXTCRM:

GGSCI (crmprddb) 6> view param EXTCRM
EXTRACT extcrm
SOURCEDB ggsadmin, USERID 用户名, PASSWORD 密码
TRANLOGOPTIONS MANAGESECONDARYTRUNCATIONPOINT
DYNAMICRESOLUTION
REPORTCOUNT EVERY 30 MINUTES, RATE
DISCARDFILE dirrptextcrm.dsc, PURGE
EXTTRAIL dirdatcm
GETUPDATEBEFORES
NOCOMPRESSUPDATES
NOCOMPRESSDELETES
TABLE dbo.ACCOUNTBASE; --投递的表
TABLE MetaDataSchema.ENTITY;


源端操作


1. 增加test表表级附加日志

dblogin sourcedb test, userid test, password test

add trandata  dbo. test

--查看附加日志是否添加

info trandata  dbo. test

2. 将test表添加到抽取进程

edit params EXTCRM

table dbo. test;

3. 源端重启抽取进程

stop *

start *

4. 源端修改defgen配置文件,重新生成defgen文件,并传输到目标端

vi ./dirprm/defgen.prm

table dbo. test;

重新生产定义文件scp到目标端

defgen paramfile d:oggdirprmdefgen.prm

5. 目标端重启crm复制进程,让新defgen文件生效

scp ./dirdef/crm.def oracle@192.168.***.***:/oracle/ogg/dirdef/

stop *

start *

6. 源库配置初始化进程

initcrm1:源端初始化进程名

intcrm1:目标端初始化进程名

GGSCI> ADD EXTRACT initcrm1, SOURCEISTABLE
GGSCI> edit params initcrm1
EXTRACT initcrm1
SOURCEDB test, USERID test, PASSWORD test
RMTHOST 192.168.***.***, MGRPORT 7809
RMTTASK REPLICAT, GROUP intcrm1
table dbo.test;


目标端配置


新增初始化进程intcrm1


GGSCI> ADD replicat intcrm1, specialrun
GGSCI> edit params intcrm1
SETENV (ORACLE_HOME = "/oracle/product/11.2.0" )
SETENV (ORACLE_SID = "odsdb")
SETENV (NLS_LANG = "American_America.AL32UTF8")
REPLICAT intcrm1
USERID ggsadmin, PASSWORD ggsadmin
--BULKLOAD
SOURCEDEFS /oracle/ogg/dirdef/crm.def
MAP dbo.test, TARGET bi_ods. test


源端启动初始化进程

start initcrm1

查看初始化进程执行情况

info * , task

开启初始化进程后,通过info * , task查看同步状态,初始化进程同步完成后会自动断开


基于时间启动复制进程

新加复制进程CRMTEST,基于时间点:

ADD REPLICAT CRMTEST, EXTTRAIL dirdat/tr,BEGIN 2021-05-07 17:00:00

添加主键冲突异常处理参数:

reperror (-1, discard) 此参数针对ora-00001主键冲突报错,直接跳过

GGSCI> dblogin userid test,password test
GGSCI> ADD REPLICAT CRMTEST, EXTTRAIL dirdat/tr,BEGIN 2021-05-07 17:00:00
GGSCI> edit params CRMTEST
INCLUDE dirprm/upd.mac
SETENV (ORACLE_HOME = "/oracle/product/11.2.0")
SETENV (ORACLE_SID = "odsdb")
SETENV (NLS_LANG = "American_America.AL32UTF8")
REPLICAT CRMTEST
USERID ggsadmin, PASSWORD ggsadmin
DISCARDFILE ./dircrd/CRMTEST.dsc, PURGE
SOURCEDEFS /oracle/ogg/dirdef/crm.def
SQLEXEC "ALTER SESSION SET COMMIT_WAIT = NOWAIT"
BATCHSQL
DBOPTIONS DEFERREFCONST
DBOPTIONS SUPPRESSTRIGGERS
ALLOWDUPTARGETMAP
reperror (-1, discard)
MAP dbo.test, TARGET bi_ods.test;

启动复制进程

alter replicat CRMTEST, extseqno 022983, extrba 0
start CRMTEST

删除异常处理参数

通过 info CRMTEST 查看进程同步情况,当进程同步追上以后,删除reperror (-1, discard)

参数,至此基于时间的异构数据库ogg表同步配置完成。


END


更多精彩干货分享

点击下方名片关注

IT那活儿


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129878.html

相关文章

  • OGG Integrated Native DDL简单测试

    OGG Integrated Native DDL简单测试 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%;...

    IT那活儿 评论0 收藏1085
  • DBASK问答集萃第四期

    摘要:问题九库控制文件扩展报错库的扩展报错,用的是裸设备,和还是原来大小,主库的没有报错,并且大小没有变,求解释。专家解答从报错可以看出,控制文件从个块扩展到个块时报错,而裸设备最大只支持个块,无法扩展,可以尝试将参数改小,避免控制文件报错。 链接描述引言 近期我们在DBASK小程序新关联了运维之美、高端存储知识、一森咖记、运维咖啡吧等数据领域的公众号,欢迎大家阅读分享。 问答集萃 接下来,...

    SKYZACK 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<