在GoldenGate的运维过程中,经常会因为某些原因,需要修改源端抽取进程的读取点,比如从指定时间开始解析日志。 操作命令如下:
GGSCI>alter extract ex2, begin 2020-04-22 10:00:00
以上命令即可将抽取进程的读取点改到2020.4.22 10点整,OGG会捕获这个时间之后启动的事务。
当然,上面语句能否修改成功,需要确认生产源库的日志文件是否存在,如果修改的读取点是很早之间,有可能归档日志已经被删除,则抽取进程会提示找不到日志文件而报错。
以上命令针对传统抽取进程,在日志文件具备的情况下是可以走通的。那么从OGG 11.2之后开始出现的集成抽取,能否也可以按相同的方式执行呢?答案是肯定的,但有一些限制条件,而且操作命令比针对传统抽取的修改更复杂。如果只是简单采用上面的语句修改读取时间点,事实上是不会生效,因为集成抽取的读取时间点存储在系统表里,只是修改抽取进程的检查点文件是不行的。针对集成抽取的读取时间点修改,正确的姿势是:
- 先查证系统上最早的能读取的SCN
- 根据SCN查证当时的时间点
- 根据SCN重新注册抽取进程
- 根据当时时间点,修改抽取进程的begin时间
下面为详细的操作过程
步骤1,系统允许的最早能读取的SCN
SQL>col scn for 99999999999999999999
SQL>SELECT first_change# scn FROM gv$archived_log WHERE dictionary_begin = 'YES' AND standby_dest = 'NO' AND name IS NOT NULL AND status = 'A';
9084298460
步骤2,基于SCN查询当时的时间点
SQL>SELECT SCN_TO_TIMESTAMP(89084298460) FROM DUAL;
2020-04-22 22.21.45
根据上述返回的结果,能修改的读取时间,不能早于2020-04-22 22.21.45
否则修改读取点时会提示如下错误:
2020-04-23 12:30:38 ERROR OGG-02085 The logmining server failed to locate a dictionary at scn 89,079,565,000.
步骤3,重新注册
register extract exora database container(pdb1) scn 89084298460
步骤4,修改begin时间
alter exora begin 2020-04-22 22.21.45
经过以上步骤,即可修改集成抽取的读取点。
需要注意的是,在生产环境上,在未确认能修改的最早读取点之前,不要轻易stop抽取进程和unregister,除非已经做了读取点和日志备份,否则在重新register时,可能会无法从停止点继续解析日志,从而造成漏数。