自我反省系列

粗心导致GG同步失效

熊熊最近刚刚加入了一家新公司,与一个同样有着OCM水平的哥们一起搭档DBA,由于对GoldenGate操作不是很熟悉,因此在昨天的操作中有了一个小错误,特写此文用以警示自己~

昨天一共收到了3封开发部发过来的数据变更的需求单,由于已经审核通过,因此由熊熊来一一操作。

每次收到邮件以后,一定首先要仔细的查阅发来的SQLPL/SQL是否合理,检查每个对象,每个表是否有主键,有索引,索引是否合适等等,确定无误才可以进行操作。

前不久一个开发人员发来一个存储过程的PL/SQL,简单的一个主键问题,居然改了四五回,我都替他觉得他回复的邮件不好看了,所以说,在日常工作中,技术能力只占一小部分,更多的是态度问题,和谨慎操作~

说别人容易,到自己这里又马虎了,唉~

第一个请求所涉及的用户无需同步到查询库,因此直接在核心库里审核SQL没有问题后,进行操作即可,对线上业务没有影响。很快就搞定了

第二个请求涉及GG同步,因为安全性考虑,我们的GG没有开启DDL自动变更同步,因此每次涉及数据架构变更的时候,需要先关闭GG上相应的模块,查看两边同步的对象是否存在,然后分别对主库和查询库进行数据变更操作,确定无误后重新开启GG相应的模块。

第三个请求有两个步骤,都分别涉及了GG同步,第一个请求需要停止GG上相应的模块,然后由开发人员在页面上做好表的数据变更后,通知熊熊,收到通知后,熊熊desc两边的表,将增加的对象在查询库相应表下用命令一一增加(alter table table_name add column column_name type),严格注意增加列的顺序,操作确认无误后,重新开启两边的GG模块。

一直到这里都没有问题,第二个请求同样涉及GG同步,由于是新对象,需要在相应模块里增加表,并且需要执行(add trandata user.table)来进行确定表传递(此步骤需要dblogin),在配置相应模块里增加该表名称的时候,熊熊一开始少增加了标点符号(MAP USER.TABLE_NAME, TARGET USER.TABLE_NAME),结果熊熊少增加了逗号和分号,导致查询库模块启动时候报错,修改以后OK了,但是主库的相关模块同样少了分号(TABLE USER.TABLE_NAME;),但是GG启动并不会报错在此时,因此熊熊就没在意。

一直到下班的时候,开发查看同步的表,发现数据没有同步,给那个DBA哥们打电话,此时GG对这张表的同步已经失效了一个小时。那兄弟很快远程登录服务器解决了该问题,并重新抽取了数据,熊熊上线后看到了他的留言,感觉特别不好意思,唉~

所以,DBA是个非常谨慎的工作,每一步操作都要特别的仔细,这次仅仅是因为一个标点符号,就导致了一张表一个小时的数据没有同步,幸亏发现的早,熊熊一直认为在这行做这么久了,结果还是粗心马虎了,实在是不该,特做此文,警示自己,也是提醒各位DBA朋友~