资讯专栏INFORMATION COLUMN

OGG数据同步异常问题总结

IT那活儿 / 1520人阅读
OGG数据同步异常问题总结
[
事件背景
]


大家应该还记得上次本大湿分享过一遍文章《OceanBase数据同步挖掘日志慢解决方案》该方案引入OracleGoldenGate(以下简称OGG)进行数据同步。完美地解决了因OB挖掘日志慢影响整个项目割接进度问题。本以为该事件可以告一段落了,谁知在后面的一次OGG数据初始化过程中问题频频爆发。本大湿也是一路披荆斩棘,节节击破。下面就带大家一起体验下丛林探险的整个心酸历程。


[
踩坑过程
]


踩坑之前先给大家介绍下业务流程:XXX系统XXX张配置表数据从Oracle端通过阿里OMS工具实时同步到OB端,其它约XXX张业务数据表需要通过阿里OMS工具从OB端实时同步到Oracle端。



坑位1:业务日志表从ORACLEADG端导出数据失败


某晚因集团版本需求生产端变更了表结构,因该方案中OGG部署于ADG环境无法自动同步DDL操作到目标端导致OGG同步失败,需要对OGG同步中的表进行数据初始化操作。目标库到源端ADG库创建DBLINK,通过IMPDP工具参数network_link方式不落地迁移数据。


Impdprating/******** directory=dumpdir network_link=lnk_orayjjf1flashback_scn=16827177429142 cluster=no schemas=ratinginclude=table:"in (select tname from rating.rating430 )"TABLE_EXISTS_ACTION=REPLACE logfile=rating430_imp.log


报错如下:

Connectedto: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bitProduction

Withthe Partitioning, Real Application Clusters, Automatic StorageManagement, OLAP,

DataMining and Real Application Testing options

FLASHBACKautomatically enabled to preserve database integrity.

Starting"RATING"."SYS_IMPORT_SCHEMA_02":  rating/********directory=dumpdir network_link=lnk_orayjjf1flashback_scn=16827177429142 cluster=no schemas=ratinginclude=table:"in (select tname from rating.rating430 )"TABLE_EXISTS_ACTION=REPLACE logfile=rating430_imp.log

Estimatein progress using BLOCKS method...

Processingobject type SCHEMA_EXPORT/TABLE/TABLE_DATA

Totalestimation using BLOCKS method: 57.07 GB

Processingobject type SCHEMA_EXPORT/TABLE/PROCACT_INSTANCE

Processingobject type SCHEMA_EXPORT/TABLE/TABLE

.. imported "RATING"."SET_XXX"                      328795472 rows

ORA-39014:One or more workers have prematurely exited.

ORA-39029:worker 1 with process name "DW00" prematurely terminated

ORA-31671:Worker process DW00 had an unhandled exception.

ORA-00600:internal error code, arguments: [ORA-00600: internal error code,arguments: [kksgaGetNoAlloc_Int0], [58], [5], [], [], [], [], [], [],[], [], []

],[], [], [], [], [], [], [], [], [], [], []

ORA-02063:preceding line from LNK_ORAYJJF1

ORA-06512:at "SYS.KUPW$WORKER", line 1887

ORA-06512:at line 2


处理方案:

查询MOS相关资料分析为触发OracleBug需要更新补丁,考虑到更新补丁时间较长,并且Oracle11g已不再提供补丁下载服务,因此决定从生产进行数据初始化操作,问题得以解决。

坑位2:OGG数据同步初始化完成后,出现抽取进程异常终止。



OGG运行日志ggserr.og出现如下错误:

2020-10-28T01:35:46.953BEIST WARNING OGG-01431  Oracle GoldenGate Delivery for Oracle,rrating.prm:  Aborted grouped transaction on RATXXX.SET_XXX, Mappingerror.

2020-10-28T01:35:46.953BEIST WARNING OGG-01003  Oracle GoldenGate Delivery for Oracle,rrating.prm:  Repositioning to rba 63598507 in seqno 27.

2020-10-28T01:35:46.953BEIST WARNING OGG-01151  Oracle GoldenGate Delivery for Oracle,rrating.prm:  Errormapping from RATXXX.SET_XXX to RATXXX.SET_XXX.

2020-10-28T01:35:46.955BEIST ERROR   OGG-01296  Oracle GoldenGate Delivery for Oracle,rrating.prm:  Errormapping from RATXXX.SET_XXX to RATXXX.SET_XXX.

2020-10-28T01:35:46.955BEIST INFO    OGG-02333  Oracle GoldenGate Delivery for Oracle,rrating.prm:  Reading /oracle_log/ogg/dirdat/rrating/re000000027,current RBA 63,598,507, 0 records, m_file_seqno = 27, m_file_rba =63,598,806.

2020-10-28T01:35:46.955BEIST ERROR   OGG-01668  Oracle GoldenGate Delivery for Oracle,rrating.prm:  PROCESSABENDING.


处理过程:

检查OGG同步表配置信息,Oracle源端对象结构


检查OGG同步表配置信息,Oracle目标端对象结构

发现目标端的表NOTNULL非空约束被DISABLE了,将表上的DISABLE非空约束改为ENABLE后,重启OGG抽取进程表同步恢复正常。


坑位2:OGG同步过程中长事务造成“Lagat Chkpt”延迟。

OGG是基于事务级的实时复制工具,也就是说OGG只复制已提交的事务,在遇到事务的commit或rollback之前,它会将每个事务的操作存储在称为cache的托管虚拟内存池中。内存再大也有不够用的时候,当事务数据超过一定的阈值或者当前空闲内存无法满足分配请求时,OGG进程会将最少使用的oldbuffer swap 到磁盘上的dirtmp中


  1. 监控ggserr.log 中的长事务警告,可以通过配置extract 进程参数warnlongtrans 调整警告频率 或者在抽取进程中配置参数:  
     edit params exta

 warnlongtrans5h,checkintervals 1h  

备注:此参数的含义是每隔1h检查一下长交易,如果超过5h的长交易就会记录在根目录的ggserr.log中


2、监控数据库中的长事务

 ---判断是否有大事务sql
selecta.sid,
a.serial#,
a.user#,
a.username,
b.addr,
b.USED_UBLK,
b.USED_UREC,
b.START_TIME,
b.xidusn,
b.XIDSLOT,
 b.xidsqn
fromv$transaction b, v$session a
where /*b.addr in (select a.taddrfrom v$session a where a.sid = ) and*/ b.addr=a.taddr order bystart_time


3、ggsci提供了如下命令来处理长事务

Ggsci> sendextract ,showtrans查看正在处理的未提交事务。                                     

语法:sendextract <进程名>, showtrans [thread n] [count n]

备注:<进程名>为所要察看的进程名,如extsz/extxm/extjx等;Threadn是可选的,表示只查看其中一个节点上的未提交交易;Countn也是可选的,表示只显示n条记录。

跳过事务(不建议)                                                                  

Ggsci>sendextract ,skiptrans                                            

语法:SENDEXTRACT <进程名>,SKIPTRANS <5.17.27634> THREAD <2> //跳过交易

强制认为事务已经提交(不建议)  

Ggsci>send extract ,forcetrans                              

语法:SENDEXTRACT <进程名>,FORCETRANS <5.17.27634> THREAD <1> //强制认为该交易已经提交                                                                                     

建议所有的事务提交或回滚操作都在数据库中进行。 

样例:检查OGG同步日志ggserr.log发现存在长事务

2020-10-30T18:10:08.469BEIST WARNING OGG-01027  Oracle GoldenGate Capture for Oracle,erating.prm:  Long Running Transaction: XID 993.6.69598, Items 1,Extract ERATING, Redo Thread 1, SCN 3918.1906392113 (16829588257841),Redo Seq #631053, Redo RBA 506349584.


处理过程:

在抽取进程中添加参数BR参数:BRBrInterval 1H, BRDir ./dirtmp

说明:将OGG抽取进程每次做检查点时间有默认的4小时改为1小时,这样OGG将长事务状态及时写入到磁盘,确保抽取进程的捕获性能,减少Lagat Chkpt 延迟。


[
分析总结
]


基于OracleGoldenGate部署简单、运维比较方便并且可以灵活地在同类和异类系统(包括不同版本的OracleDatabase、不同的硬件平台)之间以及Oracle数据库和非Oracle数据库(包括MicrosoftSQL Server、用于开放系统和z/OS的IBMDB2、Sybase等等)之间移动数据。因此被广泛应用在日常运维中。今天的OGG故障分享到此结束,使用能够帮助大家在日常运维OGG的过程中少走一些弯路。

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

转载请注明本文地址:https://www.ucloud.cn/yun/130087.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元查看
<