某天,****库迁移完成之后,美创运维中心工作人员在配置OGG反向同步作为回退措施。本文主要分享一下在配置OGG挖掘在添加附加日志中遇到的问题及处理方式。
小编对ZMY.TEST201922表执行add trandata的时候:
对表添加trandata的时候,显示已经添加附加日志。但在查询trandata信息的时候却显示附加日志未添加成功。这是什么情况?删掉附加日志再重新添加一遍~~~
咦,还是不行,看到这里大家是不是和小编一样也觉得有点疑惑呢?猜测它是Bug?哈哈,其实不是!
下面小编就为大家寻找发生这种不合理的情况真正的原因吧!
OGG在执行add trandata的时候做了什么呢?
至少执行了以下语句:
alter table [user_name].[table_name] add supplemental log group [log_group_name](column name);
tips:数据库通过ogg添加表级附加日志时,默认的log_group_name的命名规则为GGS_加上对应的object_id。
可以在oracle数据库的dba_log_groups视图中查看信息:
发现日志组已经存在,但是为什么ogg中识别不到这个日志组呢?
小编在查阅资料后发现,DBA_OBJECTS.OBJECT_ID和DBA_LOG_GROUPS.LOG_GROUP_NAME的后半截字段一致时,才会在info trandata中显示enable,数据才能正常同步。
于是赶紧查看该表的object_id,发现如下图所示:
在数据库中查询得到ZMY.TEST201922表的object_id为87483,而该表的日志组名字为GGS_87500,两者没有对应起来,问题就是出在这里了,只要能将id为87483的日志组加上就完事了。
那id为87483的日志组为什么加不上呢?
进一步查询id为87483的日志组,发现这个日志组已经被ZMY用户下的其他表占用了,怪不得加不上该组。
查询TEST1表相关信息,如下图所示:
发现ZMY.TEST1表它同时占用了两个日志组。排查到这一步,原因很明显了,是ZMY.TEST201922的日志组被ZMY.TEST1表错误的占用了,所以导致添加trandata显示已添加,实际上却并未添加!
出现这种情况比较常见的原因是,这些表是从其他环境通过expdp导过来的。原有的日志组未删除重建,在新环境上添加日志组的时候就会出现日志组被占用的情况。
为了验证GGS_87483是否是从源环境上导过来的,小编登录了源环境查询。果不其然ZMY.TEST1在源环境中的object_id就是87483。
处理方法也很简单,删除被错误占用的日志组,再重新添加即可。
有时候,存在几百上千张表附加日志被占用的情况,一个个找出被占用的日志组再删除是不现实的。
在这里小编向大家提供一种方法,通过以下sql语句查询拼接出批量删除附加日志组的语句。批量的删除附加日志组,再重新添加附加日志组。
参考文献
https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=527917808515638&id=2235636.1&displayIndex=3&_afrWindowMode=0&_adf.ctrl-state=2x5ty9olb_391#SYMPTOM
美创运维中心数据库服务团队拥有Oracle ACE 1人、OCM 10余人、数十名Oracle OCP、MySQL OCP、红帽RHCA、中间件weblogic、tuxedo认证、达梦工程师 ,著有《Oracle DBA实战攻略》,《Oracle数据库性能优化方法和最佳实践》,《Oracle内核技术揭秘》等多本数据运维优化书籍。目前运维各类数据库合计2000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、达梦等主流商业和开源数据库。并成为首批国内达梦战略合作伙伴之一,拥有海量经验和完善的人员培养体系。并同时提供超融合,私有云整体解决方案。
来源:freebuf.com 2020-06-08 15:07:35 by: database
请登录后发表评论
注册