ORACLE OGG 异常处理 之 单表重新初始化 基于SCN修复

某天突然接到客户电话:丁工,我们OGG应用进程挂掉了,快帮我们处理一下,目标端有应用在使用的!不要慌,让我先查看查看原因。登录上一查看报错,原来是我的老朋友了:OGG-01296 Error mapping from xxx.xxx to xxx.xxx。

相信熟悉OGG的朋友都没少遇见过这个报错,这个报错可能的原因主要有以下几种:

1.   OGG源端目标端表数据不一致。

2.   OGG挖掘到的数据缺少主键无法应用。

此次客户遇到的情况就是由于两端数据库表数据不一致所导致的。此类问题有一个通用的解决方法,那就是重新初始化出现问题的表。

初始化单张表一般有两种方法:

单表初始化方法一

第一种:我们可以通过查询应用进程报错停止时的scn号。从源端导出数据导入到目标端。

1.查找scn号

2.根据scn号导出导入对应表数据。

expdp “‘”/ as sysdba”‘” directory=DUMPDIR tables=dxy.test1 dumpfile=ogg.dmp logfile=ogg_exp.log flashback_scn=5633566388758 exclude=job,trigger

impdp “‘”/ as sysdba”‘” directory=DPUMPDIR tables=dxy.test1 dumpfile=ogg.dmp logfile=ogg_imp.log

3.开启应用进程。

此方法无需改动原有OGG进程,方便快捷,但是缺点在于在完成出错表初始化之前,其他表也无法继续应用下去,如果表数据量较小的情况下,比较推荐此方法。

单表初始化方法二

第二种:我们可以通过从源端任意scn号处导出,导入目标端后,让应用进程从相应的scn号开始应用。

1.   从进程中排除出错的表,使其他表现应用起来不受影响。

2.   源端查询scn号,初始化导出报错表。

expdp “‘”/ as sysdba”‘” directory=DUMPDIR tables=dxy.test1 dumpfile=ogg.dmp logfile=ogg_exp.log flashback_scn=161244 exclude=job,trigger

3.导入数据后,新建OGG应用进程。

impdp “‘”/ as sysdba”‘” directory=DPUMPDIR tables=dxy.test1 dumpfile=ogg.dmp logfile=ogg_imp.log

新建OGG进程,根据scn号启动应用进程

start ogg_rep atscn 161244

至此该表即可正常同步

此方法不会影响其他表格的数据更新,比较适用于出错表数据量比较大或者OGG目标端对数据实时性要求较高的场景。

由于此次客户目标端有应用在运行,对数据实时性要求较高,所以斟酌之下我选择了第二种方法帮助客户重新初始化了出错的表。


数据运维技术 » ORACLE OGG 异常处理 之 单表重新初始化 基于SCN修复