Oracle GoldenGate强大的异构数据复制能力,我们经常将其用于数据迁移项目中。但最近也遇到一些坑,导致生产事故的发生,这里总结下来,防止以后再掉进坑里。
Oracle GoldenGate抽取模式分为经典模式和集成模式,经典模式是最原始的抽取模式,其抽取原理简单来说就是反向解析数据库重做日志,生成SQL语句在目标端去执行,从而实现数据的异构复制。由于存在DDL复制等问题,所以在后续的版本中,Oracle引入了集成抽取模式,这种模式充分利用了数据库的自身特性,和数据库结合的更好,有效的规避了很多经典模式中的问题。因此,后续版本的实施过程中,基本都推荐使用集成模式。
和经典模式的添加和删除队列不同,由于集成模式需要利用数据库的自身特性,因此在部署的时候需要先注册一个capture进程到数据库中,然后再添加extract队列。Extract队列通过capture进程将源端的数据捕获出来,进行后续的处理。删除过程和添加过程相反,需要先删除extract队列,然后从数据库中取消capture进程的注册,才能完整的删除集成模式的抽取配置。如果没有取消capture进程的注册,会造成非常严重的后果!!!
--添加抽取队列register extract etem databaseadd extract etem, tranlog, begin nowadd exttrail ./dirdat/ei, extract etem--删除抽取队列stop etemdelete extract etemunregister 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在删除归档时会判断该归档日志是否被上游的抽取进程所需要,如果需要则不会删除该归档日志。从而导致我们前文所说的,最终因为归档日志没有被及时删除而耗尽了所有的归档空间。




