背景:
Oracle GoldenGate (OGG) 是一种广泛使用的数据复制解决方案,能够在异构数据库平台之间实现实时数据集成和复制。然而,在日常运维中,可能因为各种原因导致OGG复制过程中断,如数据格式问题、网络问题或源数据库和目标数据库之间的不一致等。当复制中断发生时,快速定位并解决问题是恢复数据同步的关键。本文介绍如何使用GoldenGate提供的DISCARDFILE和Logdump工具找到并分析导致复制失败的原始数据。
DISCARDFILE方法
通过discard文件找到具体的sql(如果有的话,没有的话进行第二步)
通过prm文件找到discard文件
DISCARDFILE /oggbase/dirrpt/KIN_R01.dsc,append,megabytes 100
Aborting transaction on /oggbase/dirdat/K0 beginning at seqno 59 rba 13561791
error at seqno 59 rba 13561791
Problem replicating SCOTT.EMP to SCOTT.EMP
Mapping problem with delete record (target format)...
*
ID = 2222 # 找到唯一键ID
000000: 54 54 54 54 54 54 54 32 30 30 30 |2222 |
*
Process Abending : 2024-05-08 09:11:32
Logdump方法:
Logdump是GoldenGate提供的一个强大工具,用于分析和查看Trail文件中的记录。如果DISCARDFILE未能提供足够信息,可以使用Logdump进一步分析
通过日志找到具体的file S1000002925和 报错 RBA 377293536
2024-05-08 13:24:09 ERROR OGG-03533 Conversion from character set zhs16gbk of source column POST to character set UTF-8 of target column POST failed because the source column contains a character '84' at offset 72 that is n
ot available in the target character set.
*
* Run Time Statistics *
*
Reading /oggbase/dirdat/S1000002925, current RBA 377293536, 63 records, m_file_seqno = 2925, m_file_rba = 377293536
OGG目录 执行logdump
Logdump 40 >open /oggbase/dirdat/S1000002925
Current LogTrail is /oggbase/dirdat/S1000002925
Logdump 41 >detail on
Logdump 42 >ghdr on
Logdump 43 >detail data -- 显示每个字段对应具体数据
Logdump 44 >pos 377293536
Reading forward from RBA 377293536
Logdump 45 >n
___________________________________________________________________
Hdr-Ind : E (x45) Partition : . (x0c)
UndoFlag : . (x00) BeforeAfter: A (x41)
RecLength : 1438 (x059e) IO Time : 2022/02/08 13:19:58.091.213
IOType : 5 (x05) OrigNode : 255 (xff)
TransInd : . (x01) FormatType : R (x52)
SyskeyLen : 0 (x00) Incomplete : . (x00)
AuditRBA : 313394 AuditPos : 264303556
Continued : N (x00) RecCount : 1 (x01)
2024/05/08 13:19:58.091.213 Insert Len 1438 RBA 377293536
Name: SCOTT.EMP01 (TDR Index: 3)
After Image: Partition 12 GU m
0000 000c 0000 3030 3831 3537 3334 3039 0001 000c | ......0081573409....
0000 0008 3230 3232 3032 3038 0002 001f 0000 3230 | ....20240508......20
3232 2d30 322d 3038 3a31 333a 3139 3a33 322e 3538 | 24-05-08:13:19:32.58
3234 3535 3030 3000 0300 1000 0000 0c33 3231 3930 | 2455000........32190
3030 3030 3531 3900 0400 0500 0000 0120 0005 0004 | 0000519........ ....
ffff 0000 0006 0004 ffff 0000 0007 0004 ffff 0000 | ....................
0008 0004 ffff 0000 0009 0007 0000 0003 3638 3200 | ................682.
Column 0 (x0000), Len 12 (x000c)
0000 3030 3831 3537 3334 3039 | ..0081573409 -- 第一列的值
Column 1 (x0001), Len 12 (x000c)
0000 0008 3230 3232 3032 3038 | ....20240508 -- 第二列的值
Column 2 (x0002), Len 31 (x001f)
0000 3230 3232 2d30 322d 3038 3a31 333a 3139 3a33 | ..2024-05-08:13:19:3
322e 3538 3234 3535 3030 30 | 2.582455000
Column 3 (x0003), Len 16 (x0010)
0000 000c 3332 3139 3030 3030 3035 3139 | ....321900000519
select * from SCOTT.EMP01 w where w.sno='0081573409'
根据表结构对比字段数据,可以通过唯一键去上游找原始数据,找到乱码字符
修复问题并恢复复制:
一旦确定了问题原因(例如数据格式错误、缺失数据等),进行相应的修复。
解决办法1:
复制进行添加参数
REPLACEBADCHAR SUBSTITUTE '?' -- 将无法转换字符修改成问号
MAP SCOTT.EMP01, TARGET SCOTT.EMP01;
解决办法2:
将目标端varchar2修改为nvarchar2:
alter table SCOTT.EMP01 modify (POST nvarchar2(2000))
总结:
及时有效地处理OGG复制中断问题对于保持数据一致性和业务连续性至关重要。通过合理配置DISCARDFILE并有效利用Logdump工具,我们可以快速定位问题源头,进行针对性的问题解决。维持OGG复制的稳定性不仅需要技术手段的支持,还需要运维人员对GoldenGate工具的熟练掌握和经验积累。通过实时监控和及时响应,确保数据复制的高效和准确,是每一个数据库管理员的重要职责。
「欢迎关注我们的公众号,获取更多技术分享与经验交流。」
文章转载自数据库驾驶舱,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




