【Oracle篇】基于OGG 21c全程图形化实现9TB数据从Oracle 11g到19c的不停机迁移(中):源端与目标端配置,及全量和增量同步配置详解(第二篇,总共三篇)

张开发
2026/4/12 21:40:56 15 分钟阅读

分享文章

【Oracle篇】基于OGG 21c全程图形化实现9TB数据从Oracle 11g到19c的不停机迁移(中):源端与目标端配置,及全量和增量同步配置详解(第二篇,总共三篇)
《博主主页》CSDN主页奈斯DBIF Club社区主页奈斯、微信公众号奈斯DB《擅长领域》️数据库阿里云AnalyticDB (云原生分布式数据仓库)、Oracle、MySQL、SQLserver、NoSQL(Redis)️运维平台与工具Prometheus监控、DataX离线异构同步工具如果觉得文章对你有所帮助欢迎点赞收藏加关注这篇作为不停机迁移的第二篇我们来具体实现数据同步。将详细介绍OGG的配置与全量、增量同步设置涵盖以下关键步骤 源端与目标端数据库基础配置️ OGG微服务控制台操作连接数据库、设置检查点表、启用补充日志、查看参数文件、清理队列 OGG进程配置配置抽取进程与复制进程 9TB数据迁移实战通过数据泵expdp/impdp完成全量数据的导出与导入由于微服务架构与OGG 11经典架构差异显著因此迁移前博主先根据官方文档梳理OGG 21c微服务架构并完成部署以及整理一下迁移过程中遇到的所有问题。然后再配置源端与目标端的OGG环境完成数据泵全量与OGG增量的同步设置最后通过微服务图形化界面实时校验数据同步情况 ✅内容总计4.5万字。为避免阅读疲劳本系列将分为上、中、下三篇展开第一篇基于OGG 21c全程图形化实现9TB数据从Oracle 11g到19c的不停机迁移(上)微服务架构详解与微服务部署及同步问题总览第二篇基于OGG 21c全程图形化实现9TB数据从Oracle 11g到19c的不停机迁移(中)源端与目标端配置及全量和增量同步配置详解当前篇第三篇基于OGG 21c全程图形化实现9TB数据从Oracle 11g到19c的不停机迁移(下)图形化界面效验数据同步概述目录一、源生产库1.1 打开生产库的强日志写1.2 打开补充日志打开最小附加日志模式日志的记录按照最小颗粒记录1.3 确保归档打开1.4 启动ogg复制参数1.5 创建专用的ogguser用户用来同步数据rac库和ogg库要相同任意实例创建二、ogg库2.1 启动ogg复制参数2.2 创建专用的ogguser用户用来同步数据rac库和ogg库要相同任意实例创建2.3 非必要操作三、在ogg微服务页面配置连接数据库、检查点表、增加补充日志、查看所有的参数文件、以及清理队列3.1 配置ogg微服务连接数据库3.2 配置源和ogg库的检查点表3.3 配置源和ogg库的增加补充日志3.4 查看所有的参数文件3.5 清理队列线索四、在ogg微服务页面配置源生产库抽取进程4,1 源生产库的抽取进程五、数据初始化expdp/impdp方式以及配置DDL过程5.1 数据初始化① 源生产库使用expdp5.2 配置DDL过程以及模拟DDL操作的同步六、在ogg微服务页面配置ogg库复制进程微服务的复制进程不支持指定CSN复制数据6.1 配置ogg库的复制进程OGG 21c for Oracle微服务版安装和Oracle到Oracle之间的数据实时同步实现数据库版本ogg微服务版本IP地址主机名SIDOS源生产库DB 11g无110.120.100.17oracle11gliudbywcLinux7.6ogg库DB 19c无110.120.100.25oracle19cliudbywcLinux7.6ogg微服务服务器无OGG 21c110.120.100.20ogg21cogg21cLinux7.6一、源生产库注意采用的是微服务架构部署OGG微服务架构可以采用中心枢纽(Hub)部署模式。这是一个重要的改进可以将OGG微服务部署在独立于源端和目标端数据库的第三方服务器上。因此源生产库上关于经典架构OGG的操作都可以只在专属的OGG微服务服务器上操作。1.1 打开生产库的强日志写SQLselectFORCE_LOGGINGfromv$database;SQLalterdatabaseforcelogging;### 为了使所有表生产日志。因为可能生产上为了开发而关闭了记录redo日志的功能。1.2 打开补充日志打开最小附加日志模式日志的记录按照最小颗粒记录selectSUPPLEMENTAL_LOG_DATA_MINfromv$database;alterdatabaseaddsupplemental logdata;### 打开附加日志模式selectSUPPLEMENTAL_LOG_DATA_MINfromv$database;1.3 确保归档打开SYSorclarchive log list;1.4 启动ogg复制参数altersystemsetenable_goldengate_replicationtruescopeboth;### 解决ggsci配置增加补充日志时的ORA-26947: Oracle GoldenGate replication is not enabled.1.5 创建专用的ogguser用户用来同步数据rac库和ogg库要相同任意实例创建createtablespaceogg_tbs datafiledatasize200M autoextendon;createuserogguser identifiedby123456defaulttablespaceogg_tbs;grantconnecttoogguser;grantalteranytabletoogguser;grantaltersessiontoogguser;grantcreatesessiontoogguser;grantflashbackanytabletoogguser;grantselectanydictionarytoogguser;grantselectanytabletoogguser;grantresourcetoogguser;grantdropanytabletoogguser;grantdbatoogguser;---高权限二、ogg库注意采用的是微服务架构部署OGG微服务架构可以采用中心枢纽(Hub)部署模式。这是一个重要的改进可以将OGG微服务部署在独立于源端和目标端数据库的第三方服务器上。因此ogg库上关于经典架构OGG的操作都可以只在专属的OGG微服务服务器上操作。2.1 启动ogg复制参数altersystemsetenable_goldengate_replicationtruescopeboth;### 解决ggsci配置增加补充日志时的ORA-26947: Oracle GoldenGate replication is not enabled.2.2 创建专用的ogguser用户用来同步数据rac库和ogg库要相同任意实例创建createtablespaceogg_tbs datafiledatasize200M autoextendon;createuserogguser identifiedby123456defaulttablespaceogg_tbs;grantconnecttoogguser;grantalteranytabletoogguser;grantaltersessiontoogguser;grantcreatesessiontoogguser;grantflashbackanytabletoogguser;grantselectanydictionarytoogguser;grantselectanytabletoogguser;grantresourcetoogguser;grantdropanytabletoogguser;grantdbatoogguser;---高权限2.3 非必要操作需要注意如下操作是只在ogg库回同步至源生产库或者同步至其他库时才需要配置的因为同步来自ogg库上的DML和DDL操作同样是需要打开强日志写、补充日志等一系列操作的。反之如果不需要同步至源生产库或者同步至其他库则不需要配置如下操作。打开生产库的强日志写SQLselectFORCE_LOGGINGfromv$database;SQLalterdatabaseforcelogging;### 为了使所有表生产日志。因为可能生产上为了开发而关闭了记录redo日志的功能。打开补充日志打开最小附加日志模式日志的记录按照最小颗粒记录selectSUPPLEMENTAL_LOG_DATA_MINfromv$database;alterdatabaseaddsupplemental logdata;---打开附加日志模式selectSUPPLEMENTAL_LOG_DATA_MINfromv$database;确保归档打开SYSorclarchive log list;关闭回收站功能非必要操作可以不关重启生效。ogg会同步回收站的内容但没必要altersystemsetrecyclebinoffscopespfile;purgedba_recyclebin;三、在ogg微服务页面配置连接数据库、检查点表、增加补充日志、查看所有的参数文件、以及清理队列3.1 配置ogg微服务连接数据库Oracle Goldengate MA微服务架构的组成部分有五个主要组成部分服务管理器(Service Manager)7809管理服务器(Administration Service)8001分发服务器(Distribution Service)8002接收器服务器(Receiver Service)8003性能指标服务器(Performance Metrics Service)8004—8005登录管理服务URL页面服务器IP地址:8001① 配置源生产库点击左上角菜单按钮点击左边“配置” 选择“数据库”点击“身份证明”旁边的 - 建立数据库信任用户ID格式为ogg专属数据库用户数据库ip地址/服务名点击“提交”②配置ogg库点击左上角菜单按钮点击左边“配置” 选择“数据库”点击“身份证明”旁边的 - 建立数据库信任用户ID格式为ogg专属数据库用户数据库ip地址/服务名点击“提交”3.2 配置源和ogg库的检查点表检查点表是Oracle GoldenGate用于确保Extract抓取进程和Replicat复制进程在分布式环境下实现高可用和自动故障恢复的核心机制。作用如下核心作用持久化进程状态它的首要作用是持久化地记录进程的读取和写入位置。对于Extract进程检查点表记录了它已经从源数据库的哪些事务日志中读取了数据。这通常对应着SCN系统变更号或日志序列号。对于Replicat进程检查点表记录了它已经成功地将哪些事务应用到了目标数据库。这同样通过SCN或事务标识来记录。没有检查点表会怎样在传统架构或未配置检查点表时进程的状态信息默认存储在本地的一个文件dirchk目录下中。这在单机部署时没问题但在微服务架构和容器化环境中如果进程发生故障并在另一个节点上重启它将无法访问原节点的本地文件从而不知道从哪里开始继续工作导致数据同步中断。在微服务架构中的关键价值实现高可用和弹性伸缩这是检查点表最重要的意义所在。微服务架构强调服务的无状态化和可迁移性。高可用当运行Extract或Replicat的Pod在Kubernetes中或Docker容器因故崩溃编排工具如Kubernetes会尝试在集群内的另一个健康节点上重新启动这个进程。由于检查点表存储在共享的、集中的数据库表中新启动的进程可以立即从表中查询到自己上次成功处理到的位置并从中断点继续工作实现了无缝的故障转移对业务几乎无感知。弹性伸缩与滚动升级在进行系统维护、版本升级或资源伸缩时需要主动停止进程。检查点表确保了进程可以安全地停止和启动而不会造成数据丢失或重复。具体工作原理①创建表DBA或运维人员需要在源端和目标端的专属ogg用户上分别创建一个专用的表例如 chkpoint 。②配置进程在创建Extract或Replicat进程时在其参数文件./GLOBALS中通过 CHECKPOINTTABLE 参数指定这个表的位置如 checkpointtable ogguser.chkpoint 。③定期写入进程在运行期间会定期例如在事务边界向这个表写入当前的读取或提交位置。④故障恢复当进程重启时它首先连接到数据库查询检查点表获取上一次持久化的位置然后从这个位置开始继续处理数据。登录管理服务URL页面服务器IP地址:8001①配置源生产库上述配置完成后点击右侧的“数据库连接”按钮在出现如下连接数据库成功后点击“检查点”旁边的 - 添加检查点在源生产库的专属ogg用户ogguser上创建一个专用的检查点表ogguser.chkpoint②配置ogg库上述配置完成后点击右侧的“数据库连接”按钮在出现如下连接数据库成功后点击“检查点”旁边的 - 添加检查点在源生产库的专属ogg用户ogguser上创建一个专用的检查点表ogguser.chkpoint3.3 配置源和ogg库的增加补充日志增加补充日志的原因即使已经执行了alter database force logging;强日志写和alter database add supplemental log data;打开补充日志这两个数据库级别的命令仍然需要为每个需要复制的表单独执行ADD TRANDATA如果是整个用户都需要复制那么就需要在用户级别下执行ADD SCHEMATRANDATA这是OGG提供的批量操作命令用于为整个模式下的所有现有表一次性启用表级补充日志。原因解析层级和粒度不同ALTER DATABASE FORCE LOGGING;作用确保数据库所有操作包括直接路径加载等都被记录到重做日志中。解决的问题防止因 NOLOGGING 操作导致的数据变更丢失从而使得备库或OGG无法捕获到这部分数据。层级数据库级ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;作用在数据库级别启用补充日志功能。这是一个总开关。解决的问题为后续更细粒度的补充日志设置打开可能性。单靠这个命令本身并不能为任何表提供足够的补充日志信息。层级数据库级ADD SCHEMATRANDATA [schema_name] 或者 ADD TRANDATA schema.table作用为指定的整个用户或者单个表启用足够强度和粒度的补充日志。补充日志不是OGG的功能而是数据库本身的一项功能。它的作用是确保日志文件不仅记录数据发生了什么变化INSERT, UPDATE, DELETE还能记录足够的信息来唯一标识被修改的行的前后映像。为什么需要补充日志默认的日志不够用数据库重做日志默认只为保证数据库自身恢复而设计。例如对于一个UPDATE操作它可能只记录被修改的字段而不是整行数据。OGG的特殊需求OGG需要从日志中重建SQL语句在目标端执行。如果没有补充日志可能会遇到①无法识别唯一行如果表没有主键OGG无法在目标数据库找到对应的行进行update更新或delete删除。②数据不一致在UPDATE操作中如果只记录了变更字段目标端将无法完整复制“修改前”和“修改后”的整行数据。登录管理服务URL页面服务器IP地址:8001①配置源生产库同步的整个liudbywcs用户到ogg库在“TRANDATA信息”处选择“方案”然后 - 添加点击“搜索”图标搜索添加的用户liudbywcs②配置ogg库需要注意增加补充日志操作是只在ogg库回同步至源生产库或者同步至其他库时才需要配置的因为同步来自ogg库上的DML和DDL操作同样是需要打开强日志写、补充日志等一系列操作的。反之如果不需要同步至源生产库或者同步至其他库则不需要配置增加补充日志操作。3.4 查看所有的参数文件这里可以看到所有的全局参数文件GLOBALS、抽取进程文件EXTRACT、复制进程文件REPLICAT等所有的参数文件这里可以进行删除。3.5 清理队列线索指定“线索名称”指定保留规则或者清理频率。保留规则规则可以为小时、天、文件数。清理频率天频率可以为小时、天四、在ogg微服务页面配置源生产库抽取进程4,1 源生产库的抽取进程登录管理服务URL页面服务器IP地址:8001回到“概述”界面点击“提取”旁边的 - 添加提取进程选择提取类型此处选择默认的“集成的抽取”抽取进程的添加内容如下①进程名称 — 抽取进程的名称一般以ext开头命名8位字符以内②说明 — 对个抽取进程的补充说明③开始时间 — 选择“SCN”需要先配置数据初始化然后配置抽取进程。因为需要先获取导出时的SCN然后配置抽取进程时指定这个CSN让抽取进程只复制这个SCN之后的数据以便可以清楚观察到导出之后操作了多少数据也就是抽取进程抽取了多少数据那么复制进程就完全复制这样就可以在微服务的统计信息界面对复制进程和抽取进程进行核对。如果先配置了抽取进程这时不清楚需要从那个SCN开始抽取数据就只能选择从“现在”开始抽取数据那么抽取中的统计信息就会比导出时的那个点的SCN数据要多就不能对比抽取进程和复制进程的统计信息了因为抽取进程比导出时的SCN要小抽取进程抽取的数据要多。抽取进程支持从现在、定制时间、CSN抽取数据④提取开始时间 CSN — 导出时的CSN 号⑤线索名称 — 它明确指定了哪个源端的 Extract抓取进程 产生的数据应该发送给哪个目标端的 Receiver Service接收服务 和 Replicat复制进程。详解介绍一下线索名称集中管理在微服务架构中您不再需要像经典架构那样在多个配置文件中手动配置Extract的传输参数和Replicat的源定义。所有这些连接信息都通过Web界面在一个统一的“线索”中进行可视化的创建和管理。⑥共享 — 选择“无”解决“0GG-08238|错误: 此数据库缺少必需的补丁程序不能支持 SHARE 子句。删除 SHARE 子句”报错⑦身份证明域 — 只有一个选项选择“OracleGoldenGate”⑧身份证明别名 — 配置ogg微服务连接数据库时的别名这里就是源生产库抽取进程的参数配置如下然后创建并运行EXTRACT ext1_liu USERIDALIAS oracle11g_10017 DOMAIN OracleGoldenGate EXTTRAIL e1-- 启用只包含捕获SCHEMA(用户)的DDL操作。如果这里写包含实例上所有的DDL操作DDL INCLUDE ALL在单复制单抽取下没有什么问题但是在多抽取多复制就会出现问题。比如下图配置的7个抽取进程7个复制进程都为DDL INCLUDE ALL其中的6个抽取进程和6个复制进程都是理赔库的在理赔实例上操作了一个create table那么所有的抽取进程都会捕获这个DDL操作所有的复制进程也都会复制这个DDL操作先执行的复制进程随机的1个就正常执行create table了其他5复制进程也都会执行先执行的1个复制进程正常但其他5个复制进程直接报错ORA-00955: 名称已由现有对象使用这个问题亲测DDL INCLUDE OBJNAME LIUDBYWCS.*### 如果还有多个用户需要捕获使用逗号分隔示例DDL INCLUDE OBJNAME LIUDBYWCS.*,INCLUDE OBJNAME LIUDBYWCS2.* 需要注意不能换行换行会报错-- 指定要捕获的SCHEMA(用户)TABLELIUDBYWCS.*;查看到抽取进程正常运行五、数据初始化expdp/impdp方式以及配置DDL过程5.1 数据初始化配置生产数据的初始化。上面的操作只是配置ogg相关参数并且测试的数据是因为配置了ogg功能之后才同步的所以生产数据的初始化需要另行配置 【并且ogg库需要有原库表的结构才能同步不然报ERROR OGG-00199 Table itpux.ITPUX_M5 does not exist in target database配置了DDL功能除外】采用impdp方式初始化ogg数据适用于TB级的不同操作系统数据库版本之间的数据初始化。注意需要先配置数据初始化然后配置抽取进程。因为需要先获取导出时的SCN然后配置抽取进程时指定这个CSN让抽取进程只复制这个SCN之后的数据以便可以清楚观察到导出之后操作了多少数据也就是抽取进程抽取了多少数据那么复制进程就完全复制这样就可以在微服务的统计信息界面对复制进程和抽取进程进行核对。如果先配置了抽取进程这时不清楚需要从那个SCN开始抽取数据就只能选择从“现在”开始抽取数据那么抽取中的统计信息就会比导出时的那个点的SCN数据要多就不能对比抽取进程和复制进程的统计信息了因为抽取进程比导出时的SCN要小抽取进程抽取的数据要多。① 源生产库使用expdp统计10个用户的数据量总计8.8TB对10个用户进行数据导出expdp \/assysdba\ directoryexpdpdumpfileexpdp_jiage_full_%U.dmp logfileexpdp_jiage_full.log schemasPART_CLOUD_PRICE,PRICE_FACTORY,PJ_VIEW,PJBJ_JY,ORACLE_EXPORTER,SYS_ADMIN,AUDIT_ADMIN,SECURITY_ADMIN,OGG_PRO,OGGUSER parallel8COMPRESSIONall总计需要导出5.6TB的数据量上面统计的是8.8TB因为此库运行了多年进行了大量的DML操作因此有非常高的高水位通过expdp/impdp逻辑导出导入可以解决高水位的问题5.6TB的数据导出耗时6小时半因此通过数据泵导出TB级别的实例还是非常快的3查看导出文件的大小5.6TB的数据量使用压缩参数压缩成了800GB压缩比较还是非常高的4导入异机之前创建表空间impdp导入之前需要在目标数据库上创建相应表空间对象即可而对于imp导入时需要在目标数据库上创建相应的用户、权限、表空间等对象。5impdp导入ogg库小提示源生产库的数据库版本为oracle11gogg库是oracle19c使用数据泵时可以直接进行导入。impdp \/assysdba\ directoryEXPDPdumpfileexpdp_jiage_full_01.dmp,expdp_jiage_full_02.dmp,expdp_jiage_full_03.dmp,expdp_jiage_full_04.dmp,expdp_jiage_full_05.dmp,expdp_jiage_full_06.dmp,expdp_jiage_full_07.dmp,expdp_jiage_full_08.dmp logfileimpdp_jiage_full.logfully parallel8###导入详情查看impdp_jiage_full.log日志5.6TB的数据量导入总计耗时1天23小时整体还是很快的5.2 配置DDL过程以及模拟DDL操作的同步ogg默认是不支持同步DDL操作这也是为什么要在ogg库手动创建表的原因。但通过ogg 21c同步oracle 11g到oracle 11g中不需要执行多个相关DDL sql脚本只需要在抽取进程和复制进程中配置同步DDL操作的参数如下是抽取进程和复制进程配置同步DDL参数的简要介绍DDL INCLUDEALL---包含所有的DDL操作--DDL INCLUDE OBJNAME LIUDBYWCS.* ---包含LIUDBYWCS.*所有的对象和DDL INCLUDE ALL使用任意一个即可DDLOPTIONS ADDTRANDATA,REPORT---DDLOPTIONS ADDTRANDATA: 有新表加入时自动加入附加日志 REPORT: 生成附件日志报告模拟12种DDL操作的同步如下前提是已经配置了抽取进程、复制进程、并配置DDL功能① 重启抽取进程和复制进程因为对进程进行了停止并启动的操作详细信息中的内容都会被清空便于通过页面观察DDL操作是否被完全同步② 生产库模拟12种DDL操作的同步01.create table、insert、update、deleteDDL配置后可以同步操作六、在ogg微服务页面配置ogg库复制进程微服务的复制进程不支持指定CSN复制数据注意需要等到impdp导入完成之后再进行ogg库复制进程的配置因为如果impdp没有导入完成就开始进行ogg数据复制可能会导致数据顺序不一致。6.1 配置ogg库的复制进程登录管理服务URL页面服务器IP地址:8001回到“概述”界面点击“复制”旁边的 - 添加进程选择复制类型此处选择的“非集成的复制”复制进程的添加内容如下①进程名称 — 抽取进程的名称一般以rep开头命名8位字符以内②说明 — 对个复制进程的补充说明③身份证明域 — 只有一个选项选择“OracleGoldenGate”④身份证明别名 — 配置ogg微服务连接数据库时的别名这里就是ogg库⑤源 — 选择“线索”⑥线索名称 — 要复制那个线索就填入那个线索抽取进程到e1那么这里就从e1复制⑦开始时间 — 正常要选择scn的但是没有。只能选择“日志中的位置”在上面抽取进程是新创建的所以“线索文件”也是从零开始进行生成的因此从默认的事务处理日志序号 0、事务处理日志 RBA 偏移量 0开始复制抽取的数据就可以完全复制抽取的数据了。如果选择了“现在”,也就是从添加好复制进程后立刻开始复制抽取进程中定义的对象数据这样就会有一个问题复制是添加好复制进程后开始的但抽取进程已经运行一段时间了导致复制的数据比抽取的要少发生了数据不一致亲测因此不要选择“现在”。复制进程支持从日志中的位置、现在、定制时间不支持指定CSN复制数据需要注意参数文件也不支持配置scn相关参数如果加上参数会报错“OGG-10144 (REP1_LIU.prm) line 4: Parameter [aftercsn] is not valid for this configuration.”⑧检查点表 — 选择检查点表复制进程的参数配置如下然后创建并运行REPLICAT rep1_liu USERIDALIAS oracle19c_10025 DOMAIN OracleGoldenGate-- 自动过滤重复时间内的数据冲突用于不能停机执行初始化。这加上参数是因为采用了“先采用配置抽取进程无法指定scn然后直接通过expdp/impdp导出数据无需指定scn相关参数【配置抽取进程和expdp操作尽可能的近这样会让多的数据尽可能的少】”的方式而没有按照标准的第五、六步采用这样的话不清楚需要从那个SCN开始抽取数据选择从“现在”开始抽取数据那么抽取中的统计信息就会比expdp导出时的那个点的SCN数据要多因此复制进程也会多数据多的数据通过handlecollisions参数忽略掉。注意此参数解决的是抽取多了的数据自动过滤而不让报错的问题因为不配置的话一启动复制进程就会报错配置上的话对于重复数据而言会重复执行并不会忽略然后等数据复制稳定之后就必须将这个参数去掉因为不能一直让冲突的数据去忽略而是解决问题【需要注意在页面可以直接将参数删掉但是运行中的复制进程并不会生效因此需要重启一下复制进程才能生效亲测】去掉参数需要重启进程参考下面的第八步2、去掉handlecollisions参数handlecollisions-- 启用只包含复制SCHEMA(用户)的DDL操作DDL INCLUDE OBJNAME LIUDBYWCS.*### 如果还有多个用户需要捕获使用逗号分隔示例DDL INCLUDE OBJNAME LIUDBYWCS.*,INCLUDE OBJNAME LIUDBYWCS2.* 需要注意不能换行换行会报错-- 指定要复制的SCHEMA(用户)MAP LIUDBYWCS.*,TARGET LIUDBYWCS.*;查看到复制进程正常运行完结

更多文章