更新LOB字段会导致OGG的trail文件爆增

这个问题,很多年前就遇到过,当时比较懒,详细的过程也没记录下来,前几天又有同事遇到了相同的问题,简单记录一下。

 

1、同事在利用OGG进行数据迁移时,发现一天时间内产生了差不多1TB大小的Trail文件,而源端的归档日志才几十GB,这就非常不科学了,按理说,解析归档日志后,生成的Trail文件应该远远小于归档日志大小才对。

 

2、当时,同事随便挑了几个Trail文件,用logdump解析后,发现Trail文件内全部是一张表,这张表里有个LOB字段。为了解决这个问题, 他临时的解决办法就是在Exatract进程中直接屏蔽了这张表,然后一切就恢复正常了,还好, 这张表不大,在正式迁移的当晚,他重新初始化了这张表。(这种方式其实存在一个问题,如果存在LOB字段的这张表非常大,则正式迁移的当晚,是根本没有时间来重新初始化这张表的。)

 

3、其实,Trail文件暴增这个问题的真实原因是Oracle在更新lob字段时,DBMS_LOB.write会循环执行,最终OGG会将这些重复的信息都写入Trail文件中,所以导致了Trail文件暴增。我们可以在Exatract进程的配置文件中添加FETCHOPTIONS SUPPRESSDUPLICATES参数,也即只记录最后的一条DBMS_LOB.write操作。

 

4、在MOS上,有两篇文档说明了这个问题。Extract Generates a Large Volume of Trail Data for Lob Updates on Oracle (Doc ID 1206737.1) 和 Extract Capture Duplicate Lob Updates on Oracle (Doc ID 2679221.1)

 

posted @ 2021-11-11 10:52  石云华  阅读(220)  评论(0编辑  收藏  举报