暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

删除 OGG 集成抽取模式的小坑

数据最前线 2021-09-06
382

Oracle GoldenGate强大的异构数据复制能力,我们经常将其用于数据迁移项目中。但最近也遇到一些坑,导致生产事故的发生,这里总结下来,防止以后再掉进坑里。

Oracle GoldenGate抽取模式分为经典模式和集成模式,经典模式是最原始的抽取模式,其抽取原理简单来说就是反向解析数据库重做日志,生成SQL语句在目标端去执行,从而实现数据的异构复制。由于存在DDL复制等问题,所以在后续的版本中,Oracle引入了集成抽取模式,这种模式充分利用了数据库的自身特性,和数据库结合的更好,有效的规避了很多经典模式中的问题。因此,后续版本的实施过程中,基本都推荐使用集成模式。

和经典模式的添加和删除队列不同,由于集成模式需要利用数据库的自身特性,因此在部署的时候需要先注册一个capture进程到数据库中,然后再添加extract队列。Extract队列通过capture进程将源端的数据捕获出来,进行后续的处理。删除过程和添加过程相反,需要先删除extract队列,然后从数据库中取消capture进程的注册,才能完整的删除集成模式的抽取配置。如果没有取消capture进程的注册,会造成非常严重的后果!!!

 

    --添加抽取队列
    register extract etem database
    add extract etem, tranlog, begin now
    add exttrail ./dirdat/ei, extract etem

    --删除抽取队列
    stop etem
    delete extract etem
    unregister extract etem database

     

    注意,上述删除步骤中,最后一步非常重要,否则会导致rman中无法正常删除归档日志,最终会导致归档日志占满预留的空间,使得数据库因为无法写出归档而夯住,影响业务系统的正常使用!!!

    最近已经有因为这个原因导致严重生产事故的case,而我也差一点再次掉进同一个坑里。

    为什么没有取消capture进程的注册,会导致归档日志无法删除呢?我们来看这个视图。

     

      SQL> select capture_name, status, start_scn, start_time,STATUS_CHANGE_TIME,CAPTURED_SCN from dba_capture;

      CAPTURE_NAME STATUS START_SCNSTART_TIME STATUS_CHANGE_T CAPTURED_SCN
      --------------- -------- ------------------------------------------------------------ ---------------------------------------
      OGG$CAP_ETEM ENABLED 1251403300923602-SEP-21 11.38.41.000000 AM 02-SEP-21 12514033009240

       

      视图中记录了capture进程开始捕获的SCN和当前捕获的SCN,随着extract队列的持续工作,CAPTURED_SCN也会持续增进。可是如果我们删除了extract队列,意味着CAPTURED_SCN也不会增进。而rman在删除归档时会判断该归档日志是否被上游的抽取进程所需要,如果需要则不会删除该归档日志。从而导致我们前文所说的,最终因为归档日志没有被及时删除而耗尽了所有的归档空间。


      文章转载自数据最前线,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论