系统环境
源、目标数据库版本:oracle11.2.0.4
OGG版本:12.2.0.1.1
遇到的问题
通过监控发现OGG某个复制进程同步延迟了4个小时,延迟时间还是在不断增加,其他8个复制进程正常同步完成。
问题分析
1、首先查看该复制进程同步到哪张表了
有哪些方式可以查看到目前复制进程同步到哪张表了呢?
A、view report rep_ps4没有找到目前正在执行复制的表
B、通过获取rep_ps4同步进程号与v$session关联,进一步获取sql_id,根据sql_id找到执行的sql语句
上面两步无法获取相应的表名,也无法知道现在复制进程是否在往前推进,通过info REP_PS4方式间隔几分钟执行,发现RBA 36990698的值没有改变
GGSCI (db-1) 2> info REP_PS4
REPLICAT REP_PS4 Last Started 2020-11-19 11:05 Status RUNNING
Checkpoint Lag 03:45:08 (updated 00:00:01 ago)
Process ID 43251
Log Read Checkpoint File ./dirdat/rs072591
2020-11-19 19:21:22.749478 RBA 36990698
后面通过send rep_ps4,status方式查看到了该复制进程正在执行事务,只是事务应用的特别慢。
GGSCI (db-1) 3> send rep_ps4,status
Sending STATUS request to REPLICAT REP_PS4 …
Current status: Processing data
Sequence #: 72591
RBA: 36990698
181104 records in current transaction
现在已经知道了是事务执行慢导致的,那是对一张表还是多张表执行事务操作慢呢?这里logdump工作就是闪亮登场了。
2、确定表上正在做什么操作
[oracle@db-1 ogg_12]$ ./logdump
Oracle GoldenGate Log File Dump Utility for Oracle
Version 12.2.0.1.1 OGGCORE_12.2.0.1.0_PLATFORMS_151211.1401
Copyright (C) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
打开trail文件
Logdump 124 >open dirdat/rs072591
Current LogTrail is /yjgk/yjgk2/ogg_12/dirdat/rs072591
从36990698开始读取信息
Logdump 125 >pos 36990698
Reading forward from RBA 36990698
Logdump 126 >ghdr on
Logdump 127 >n
_______
Hdr-Ind : E (x45) Partition : . (x04)
UndoFlag : . (x00) BeforeAfter: B (x42)
RecLength : 133 (x0085) IO Time : 2020/11/19 03:45:08.815.999
IOType : 3 (x03) OrigNode : 255 (xff)
***TransInd : . (x00)*** FormatType : R (x52)
SyskeyLen : 0 (x00) Incomplete : . (x00)
AuditRBA : 403824 AuditPos : 270522384
Continued : N (x00) RecCount : 1 (x01)
**2020/11/19 03:45:08.815.999 Delete Len 133 RBA 36990698**
Name: SCYW.T_PWGM_DKXZQL_LS_JLB
Before Image: Partition 4 G b
0000 0024 0000 0020 4233 3234 3643 4134 3538 3937 | ...$... B3246CA45897
3330 3738 4530 3533 3031 3032 4230 3041 4639 3042 | 3078E0530102B00AF90B
0001 000f 0000 000b 3139 444b 582d 3433 3331 3600 | ........19DKX-43316.
0200 1500 0032 3032 302d 3131 2d30 333a 3030 3a30 | .....2020-11-03:00:0
303a 3030 0003 0005 0000 0001 5400 0400 2400 0000 | 0:00........T...$...
2039 3662 6538 3866 3936 3130 6439 3766 3730 3136 | 96be88f9610d97f7016
3336 3263 6537 6436 3332 3334 35 | 362ce7d632345
从上面可以看到TransInd : . (x00)代表事务开始,于2020/11/19 03:45:08.815.999在在SCYW.T_PWGM_DKXZQL_LS_JLB做 Delete操作,这时的RBA为36990698
跳到事务执行结尾
Logdump 128 >sfet
End of Transaction found at RBA 93640490
___________________________________________________________________
Hdr-Ind : E (x45) Partition : . (x04)
UndoFlag : . (x00) BeforeAfter: B (x42)
RecLength : 133 (x0085) IO Time : 2020/11/19 03:45:08.815.377
IOType : 3 (x03) OrigNode : 255 (xff)
TransInd : . (x02) FormatType : R (x52)
SyskeyLen : 0 (x00) Incomplete : . (x00)
AuditRBA : 403824 AuditPos : 361597516
Continued : N (x00) RecCount : 1 (x01)
2020/11/19 03:45:08.815.377 Delete Len 133 RBA 93640490
Name: SCYW.T_PWGM_DKXZQL_LS_JLB
Before Image: Partition 4 G e
0000 0024 0000 0020 4233 3234 3643 4134 3539 3332 | ...$... B3246CA45932
3330 3738 4530 3533 3031 3032 4230 3041 4639 3042 | 3078E0530102B00AF90B
0001 000f 0000 000b 3139 444b 582d 3431 3139 3700 | ........19DKX-41197.
0200 1500 0032 3032 302d 3131 2d30 333a 3030 3a30 | .....2020-11-03:00:0
303a 3030 0003 0005 0000 0001 4600 0400 2400 0000 | 0:00........F...$...
2031 3646 3337 4643 4542 4633 3330 4544 3145 3035 | 16F37FCEBF330ED1E05
3330 3130 3030 3037 4632 4634 35 | 30100007F2F45
说明:TransInd : . (x02)代表事务的结束,可以看到还是在SCYW.T_PWGM_DKXZQL_LS_JLB表上做删除操作,这时的RBA为93640490
3、分析是什么原因导致操作该表慢
通过第2步,已经知道了是什么原因导到表操作慢了
问题处理
这张业务暂时没有使用,这里准备跳过该事务
GGSCI (yjgk-pms-db-1) 64> alter REPLICAT REP_PS4,extseqno 72591 ,extrba 93640490
ERROR: REPLICAT REP_PS4 is running and cannot be altered (1,11,Resource temporarily unavailable).
提示复制进程正在运行,先停止复制进程,通过stop rep_sp4无法正常停止,最后通过send replicat rep_ps4,forcestop强制停止复制进程
GGSCI (db-1) 2> alter REPLICAT REP_PS4,extseqno 72591 ,extrba 93640490
2020-11-19 11:04:21 INFO OGG-06594 Replicat REP_PS4 has been altered through GGSCI. Even the start up position might be updated, duplicate suppression remains active in next startup. To override duplicate suppression, start REP_PS4 with NOFILTERDUPTRANSACTIONS option.
REPLICAT altered.
GGSCI (db-1) 2> start REP_PS4
GGSCI (yjgk-pms-db-1) 2> info REP_PS4
REPLICAT REP_PS4 Last Started 2020-11-19 11:05 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:01 ago)
Process ID 43251
Log Read Checkpoint File ./dirdat/rs072770
2020-11-19 19:21:22.749478 RBA 87119030
通过 info REP_PS4发现trail文件已经向前应用了。
总结
1、通过info rep_ps4查看到同步进度不一定准确或同步进度不详细,可以通过send 进程名,status来实现。
2、通过alter replicat 跳过事务时,需要先停止复制进程再启动。通过stop方式停止复制进程可能失败,这里需要使用send replicat replicat_name,forcestop来停止
3、logdump工具分析trail很方面,应该专门写一篇logdump工具的详细介绍
4、应该进一步分析该表上执行delete方式删除记录这么慢,该表中只能18万条记录左右,是统计信息不准备导致执行计划错误还是其他原因?
发散思考
OGG同步延迟的原因有哪些?
参考资料
OGG/LOGDUMP:
https://www.ateam-oracle.com/loren-penton
logdump:
http://blog.itpub.net/25174901/viewspace-2121452/
https://blog.51cto.com/19880614/1294965
https://blog.csdn.net/lihuarongaini/article/details/101732724