第50期 OGG在现有进程中新增一个同步表的流程

来源:这里教程网 时间:2026-03-03 22:48:47 作者:

    在很多业务场景中,在使用 OGG (Oracle GoldenGate) 进行数据同步时,为已有的同步进程新增需要同步的表。这是一个非常常见的运维操作。    在原有同步进程里新增同步表的时候,考虑到源端表上可能会有事务,数据是实时变化的,不能单纯的使用expdp直接导出再导入,这样可能会导致丢失数据或者数据重复冲突。针对这种情况,有两种方法可以实现在原有同步进程里添加新表并且可以保证数据一致性。

    一种是基于SCN的expdp导出。

    另一种是基于SCN的flashback query和dblink远程插入(适用于表数据量不大的情况)。

    下面我将为您提供一个详细、规范的步骤指南。    整个过程的核心思想是:先添加抽取进程的配置,确保新表有增量日志被捕获,然后再在投递进程中配置投递规则,最后在目标端复制进程中配置应用规则。为了清晰起见,我们假设一个典型的单向同步环境:源端: EXTRACT(抽取进程) -> DATAPUMP(投递进程)目标端: REPLICAT(复制进程)新增的表名为 SCOTT.TESTOGG。整体操作流程概览: 1.准备阶段: 在源库和目标库创建新表,并获取初始数据。 2.配置修改阶段: 依次停止相关进程,修改 OGG 参数文件。 3.初始化阶段: 使用初始数据装载工具(如 Data Pump, Oracle Streams, 或 OGG 本身)初始化目标表。 4.启动与验证阶段: 按正确顺序启动 OGG 进程,并验证同步是否正常。 案例流程:     1.使用基于SCN的expdp导出方法新增表的同步:     1.1 登录主库,添加该表的附加日志

GGSCI (pxbogg) 1> dblogin USERID username@tnsstr PASSWORD userpw
Successfully logged into database.
GGSCI (pxbogg) 2> ADD TRANDATA,SCOTT.TESTOGG;
查看附加日志是否添加成功:
GGSCI (pxbogg) 3> INFO TRANDATA,SCOTT.TESTOGG
2025-10-30 10:24:31  INFO    OGG-26035  Logical replication for table SCOTT.TESTOGG is ENABLED.
2025-10-30 10:24:32  INFO    OGG-06480  Schema level supplemental logging, excluding non-validated keys, is enabled on schema "TEST".
2025-10-30 10:24:32  INFO    OGG-10471  ***** Oracle Goldengate support information on table SCOTT.TESTOGG ***** 
Oracle Goldengate support native capture on table SCOTT.TESTOGG.
Oracle Goldengate marked following column as key columns on table SCOTT.TESTOGG: NAME.
Logging of supplemental redo log data is enabled for table SCOTT.TESTOGG.
Columns supplementally logged for table SCOTT.TESTOGG: "NAME".
Prepared CSN for table SCOTT.TESTOGG: 6129208295301
GGSCI (pxbogg) 4>

    1.2 编辑抽取进程添加该表,重启抽取进程

GGSCI (pxbogg) 5> edit params ext1
EXTRACT ext1
setenv (NLS_LANG = AMERICAN_AMERICA.ZHS16GBK)
USERID user@tnsstr PASSWORD userpw
TRANLOGOPTIONS MININGUSER user MININGPASSWORD userpw
TRANLOGOPTIONS INTEGRATEDPARAMS (downstream_real_time_mine Y)
TRANLOGOPTIONS INTEGRATEDPARAMS (max_sga_size 3072)
DISCARDFILE ./dirrpt/ext1.dsc, APPEND, MEGABYTES 1024
LOGALLSUPCOLS
UPDATERECORDFORMAT FULL
DBOPTIONS ALLOWUNUSEDCOLUMN
REPORTCOUNT EVERY 1 MINUTES, RATE
WARNLONGTRANS 2h,CHECKINTERVAL 300
DDL INCLUDE MAPPED, EXCLUDE OBJTYPE 'tablespace',EXCLUDE OBJTYPE 'JOB', EXCLUDE OBJTYPE 'TRIGGER', EXCLUDE OBJTYPE 'SNAPSHOT', EXCLUDE OBJTYPE 'SNAPSHOT LOG', 
EXCLUDE INSTR 'shrink space CHECK' 
DDLOPTIONS ADDTRANDATA
TRANLOGOPTIONS FETCHPARTIALLOB
getUpdateBefores
NOCOMPRESSDELETES
EXTTRAIL ./dirdat/lt
TABLE SCOTT.TEST1;
-- 新增加的表
TABLE SCOTT.TESTOGG;
停止抽取进程
GGSCI (pxbogg) 6> stop ext1
Sending STOP request to EXTRACT ext1 ...
STOP request pending end-of-transaction (1 records so far)..
启动抽取进程
GGSCI (pxbogg) 7> start ext1
Sending START request to MANAGER ...
EXTRACT ext1 starting

 1.3编辑pump进程,添加该表

GGSCI (pxbogg) 9> edit param pscott
EXTRACT PSCOTT
setenv (NLS_LANG = AMERICAN_AMERICA.ZHS16GBK)
PASSTHRU
RMTHOST 192.168.16.3, MGRPORT 7809
RMTTRAIL /oradata/ggs_data/dirdat/cs
DYNAMICRESOLUTION
TABLE SCOTT.TEST1;
-- 新增加的表
TABLE SCOTT.TESTOGG;
停止pump进程 
GGSCI (ngppdg as ogg@ngpdb2) 14> stop pscott
Sending STOP request to EXTRACT PSCOTT ...
Request processed.
GGSCI (ngppdg as ogg@ngpdb2) 15> start pscott
Sending START request to MANAGER ...
EXTRACT PSCOTT starting

目标端:  1.4 查看当前复制进程状态,确认无延迟后,停止复制进程,查询主库当前的SCN

GGSCI (pxbogg) 2> lag rscott
2025-10-30 10:45:50  INFO    OGG-14054  Lag from heartbeat table requires DBLOGIN.
Sending GETLAG request to REPLICAT RSCOTT ...
Last record lag 7 seconds.
--停止复制进程
GGSCI (pxbogg) 2> stop rscott
Sending STOP request to REPLICAT RSCOTT ...
STOP request pending end-of-transaction (196 records so far).

 1.5  查询主库当前的SCN

[oracle@pxboracle ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Oct 30 10:57:57 2025
Version 19.25.0.0.0
Copyright (c) 1982, 2024, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.25.0.0.0
SQL> select to_char(current_scn) from v$database;
TO_CHAR(CURRENT_SCN)
----------------------------------------
6131734467265
SQL>

    1.6 在主库执行基于SCN的expdp导出,并上传到目标数据库服务器上进行导入

expdp '"/ as sysdba"'  directory=DATA_PUMP_DIR dumpfile=scott20251030.dump  logfile=exp_20251030.log tables=scott.testogg flashback_scn=6131734467265
传输dump文件到目标服务器上
[oracle@pxboracle ~]$ scp -r /dbbackup/dumpbak/scott20251030.dump oracle@192.168.16.3:/oradata/dumpfile

 1.7 在目标服务器上导入数据

impdp '"/ as sysdba"'  directory=DATA_PUMP_DIR dumpfile=scott20251030.dump  logfile=imp_20251030.log

1.8编辑复制进程,添加同步表的映射关系

GGSCI (pxbogg) 13> edit param RSCOTT 
REPLICAT RSCOTT 
setenv (NLS_LANG = AMERICAN_AMERICA.ZHS16GBK)
setenv (ORACLE_SID=testogg)
DISCARDFILE ./dirrpt/newrlis.dsc, APPEND, MEGABYTES 2048
DBOPTIONS ENABLE_INSTANTIATION_FILTERING
ASSUMETARGETDEFS
ALLOWNOOPUPDATES
USERID user, PASSWORD userpw
REPERROR DEFAULT ABEND
REPERROR 942 DISCARD
DDL INCLUDE MAPPED,EXCLUDE OPTYPE GRANT,EXCLUDE OBJTYPE 'SYNONYM',EXCLUDE OBJTYPE 'PACKAGE',EXCLUDE OBJTYPE 'PACKAGE BODY'
DDLOPTIONS REPORT
MAP SCOTT.TEST1, TARGET SCOTT.TEST1;
--映射新增加的表
MAP SCOTT.TESTOGG, TARGET SCOTT.TESTOGG,FILTER ( @GETENV ('TRANSACTION', 'CSN') >6131734467265);

--添加如下内容,注意标红的部份,添加导出时的SCN号,这样启动进程后,该表会从该SCN往后应用trail日志,实现数据的一致性

MAP SCOTT.TESTOGG, TARGET SCOTT.TESTOGG,FILTER ( @GETENV ('TRANSACTION', 'CSN') >6131734467265);

 1.9 启动复制进程

GGSCI (pxbogg) 14> start  RSCOTT  
Sending START request to MANAGER ...
REPLICAT RSCOTT starting
GGSCI (pxbogg) 15> info *
REPLICAT   RSCOTT  Last Started 2025-10-30 10:55   Status RUNNING
Checkpoint Lag       00:00:00 (updated 00:00:01 ago)
Process ID           7647
Log Read Checkpoint  File /oradata/ggs_data/dirdat/cs000000867
                     2025-10-30 11:21:54.981081  RBA 171641182

验证同步状态:
  • 使用  INFO ALL检查所有进程状态是否为  RUNNING。
  • 使用  STATS EXTRACT EXT1,  STATS EXTRACT PSCOTT,  STATS REPLICAT RSCOTT查看进程统计信息,确认新表  SCOTT.TESTOGG有数据在处理。
  • 在源端对新表进行一些  INSERT,  UPDATE,  DELETE操作,然后在目标端查询,验证变更是否被实时同步。

    重要注意事项与最佳实践

  • 顺序至关重要: 停止和启动进程的顺序必须严格遵守,否则可能导致数据丢失或进程 abend。
  • 参数文件检查: 修改参数文件后,务必仔细检查语法,特别是表名和模式名是否正确。
  • 处理现有数据: 直接添加新表到运行中的 OGG 环境, 不会自动同步添加之前已存在的历史数据。必须通过第 3 步的初始化来完成历史数据的同步。
  • SCN 的重要性: 使用 Flashback SCN 初始化是保证数据一致性的最佳方法,它可以确保初始化数据的时间点与 OGG 开始应用增量数据的时间点精确衔接。
  • 通配符的使用: 如果未来会频繁添加表,可以考虑在参数文件中使用通配符,例如  MAP SCOTT.*, TARGET SCOTT.*;。但这需要谨慎,因为它会同步所有符合规则的表,包括可能不想同步的系统表。
  • 测试: 任何配置变更都应在测试环境充分验证后再应用到生产环境。
    按照以上步骤操作,您就可以安全、正确地为 OGG 同步环境添加新的同步表了。

  • 相关推荐