简介围绕Oracle GoldenGate跨Windows与Linux异构环境数据同步的部署文档面向Oracle DBA、数据复制运维人员及需要搭建灾备链路的技术人员重点解决源目标库准备、OGG安装配置与日常维护中的操作落地问题。内容从源库归档模式、强制日志、附加日志与goldengate用户授权讲起梳理目标库权限差异及enable_goldengate_replication设置并覆盖解压后图形化安装、Manager、Extractor、Replicat等组件配置以及监控、日志管理和故障排查思路。压缩包仅含1个PDF文件约496KB篇幅精炼便于按章节查阅关键SQL命令与参数配置。已有297人学习适合作为OGG 12.2跨平台同步的实操参考帮助读者厘清源端与目标端配置边界快速定位部署环节中的常见问题。1. 别急着点安装Windows 到 Linux 的 OGG 同步先卡在日志与权限把 oracle linux OGG 数据同步放到 Windows 到 Linux 的异构链路里最反直觉的一点是软件装完只算拿到入场券真正决定成败的是源库日志和两端检查点。源端少开一个附加日志后面 Extract 看着是 RunningReplicat 却可能因为缺少前镜像直接报错目标端检查点表没对齐初始化数据一导入就撞主键。这个场景适合已经能连上两端数据库、准备做跨操作系统增量复制的从业者也适合第一次接触 OGG 12.2.0.2 的新手照着排链路。下面按安装骨架、源库改造、进程参数、避坑排查、验证收口五段推进命令能直接抄参数按实际环境替换。2. 双端落地骨架从 12.2.0.2 安装包到 MGR 进程异构同步的第一步不是配 Extract而是把两端 OGG 的目录、检查点表和 MGR 进程先立起来。Windows 源端和 Linux 目标端在安装方式上不一样但进入 GGSCI 之后create subdirs、GLOBALS、add checkpointtable、start mgr这几步是对称的。很多翻车点就出在这里Linux 上解压安装包时用 root 用户操作后面 Oracle 用户写不了dirrptWindows 上安装目录带空格或中文DataPump 写 trail 文件时路径解析失败。先把安装和目录权限做干净后面参数才有意义。2.1 Linux 目标端解压安装与 Windows 源端安装差异Linux 目标端用 12.2.0.2 的 Linux x64 安装包上传后切到 oracle 用户解压再用图形化安装器选择对应数据库版本。不要用 root 解压后直接改权限常见做法是上传到/u01/app/这类 Oracle 用户可写的目录解压和安装都保持同一个用户省掉后面dirdat权限排查。# Linux 目标端上传安装包后切 oracle 用户执行 su - oracle unzip 122022_fbo_ggs_Linux_x64_shiphome.zip cd fbo_ggs_Linux_x64_shiphome/Disk1 ./runInstaller # 安装向导里选择与目标库匹配的 Oracle 版本 # 安装目录示例/u01/app/ogg这段命令做三件事解压安装包、进入 Disk1、启动图形化安装器。参数上重点看两个安装目录不要放在/root或/tmp下/u01/app/ogg这类目录后面要放dirdat、dirrpt、dirchk空间要预留安装向导里选择的数据库版本要和目标库一致版本选错后面 Replicat 连库会报库版本不匹配。Windows 源端用同版本 Windows 安装包走图形化向导安装路径尽量短不要带空格和中文安装完成后用 Oracle 用户或具备读日志权限的账户运行 GGSCI。两端安装完成后都先确认ggsci能正常进入再往下做。提示Linux 安装完成后先检查$OGG_HOME下目录属主dirrpt、dirdat必须让运行 OGG 的用户可写否则 MGR 起得来进程写报告时仍会失败。2.2 create subdirs 与 GLOBALS先把检查点目录规整进入 GGSCI 后第一件事是创建子目录。源端和目标端都要做不要只做目标端。create subdirs会生成参数、报告、检查点、SQL 脚本、定义文件、trail 数据、临时文件、凭证、钱包等目录如果提示 already exists说明之前已经初始化过不用重复建但要检查目录权限。# 源端和目标端都执行 cd /u01/app/ogg ./ggsci # GGSCI 内执行 create subdirscreate subdirs本身没有业务参数关键在运行位置必须在 OGG 安装目录下执行否则会在当前目录下建一套目录后面启动进程找不到dirprm。目录建完后编辑全局参数文件源端和目标端都写同一套 GGSCHEMA 和 CHECKPOINTTABLE表名按实际管理员 schema 调整。-- GGSCI 内edit params ./GLOBALS -- 源端、目标端保持一致 GGSCHEMA goldengate CHECKPOINTTABLE goldengate.ggschkpt SYSLOG NONEGGSCHEMA指定 OGG 管理员 schema后面检查点表、DDL 历史表都放在这个 schema 下CHECKPOINTTABLE指定检查点表名源端和目标端必须一致否则 Replicat 启动时读不到自己的检查点SYSLOG NONE表示不往系统日志重复写排查时统一看ggserr.log更清楚。这里最容易犯的错是源端写一个 schema、目标端写另一个 schema后面add checkpointtable建表成功但 Replicat 启动报检查点表不存在。2.3 checkpoint 表与 MGR端口、自动重启和清理策略全局参数写完后用 goldengate 用户登录数据库并创建检查点表。源端和目标端都要执行检查点表只建一次重复执行会报已存在。接着编辑 MGR 参数MGR 是两端 OGG 的管理进程DataPump 投递和 Replicat 读取都依赖它。# GGSCI 内源端和目标端都执行 dblogin userid goldengate password goldengate add CHECKPOINTTABLE goldengate.ggschkptdblogin用 OGG 管理员用户连库密码按实际替换add CHECKPOINTTABLE在GLOBALS指定的 schema 下建检查点表成功后 GGSCI 会提示 created。如果提示表已存在说明之前建过直接info checkpointtable goldengate.ggschkpt确认即可不要删表重建除非确认没有进程在使用。MGR 参数在源端和目标端都要配端口保持一致目标端的PORT要跟源端 DataPump 里的MGRPORT对上。-- GGSCI 内edit params mgr PORT 7809 DYNAMICPORTLIST 7800-7810 USERID goldengate,PASSWORD goldengate AUTORESTART ER *,RETRIES 3, WAITMINUTES 5, RESETMINUTES 60 LAGREPORTMINUTES 10 LAGCRITICALMINUTES 10 PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPHOURS 12 PURGEDDLHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 14, FREQUENCYHOURS 3 PURGEMARKERHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 14, FREQUENCYHOURS 3PORT 7809是 MGR 固定端口DataPump 的RMTHOST ... MGRPORT 7809必须跟它一致DYNAMICPORTLIST 7800-7810是动态端口范围Windows 防火墙和 Linux 防火墙都要放行这个范围否则 MGR 能连上数据传输阶段仍会断AUTORESTART ER *让异常进程按 5 分钟间隔重试 3 次60 分钟重置计数PURGEOLDEXTRACTS按检查点清理 trailMINKEEPHOURS 12不要设得太短长事务场景下 trail 被提前清掉Replicat 会直接找不到文件。配完后两端启动 MGR并用info mgr确认状态。# GGSCI 内源端和目标端都执行 start mgr info mgrstart mgr启动管理进程info mgr看MANAGER是否 Running、端口是否监听。Windows 源端如果以服务方式运行安装服务后从服务管理器启动命令行方式则保持 GGSCI 窗口不关。目标端 Linux 上可以用ps -ef | grep mgr辅助确认但最终以 GGSCI 的info mgr为准。3. 源库改造顺序归档、强制日志、附加日志与 trandata 怎么排源库配置是整条链路的地基顺序错了后面很难补。归档模式解决“日志能不能被读”强制日志解决“nologging 操作有没有记录”最小附加日志解决“有没有补充信息”表级 trandata 解决“具体表有没有开”。这四层不是一回事只开归档就上 Extract最常见的结果是插入能同步、更新和删除缺前镜像Replicat 报 missing row。目标库不需要开附加日志但用户、权限和enable_goldengate_replication要配齐否则 Replicat 连库就失败。3.1 归档、force logging、supplemental log 的最小闭环源库先确认归档模式。startup mount之前要安排窗口生产库不能直接重启。下面这组 SQL 把归档、强制日志、最小附加日志一次做完最后切一次日志让附加日志生效。-- 源库 sysdba 执行生产环境先安排停机窗口 shutdown immediate; startup mount; alter database archivelog; alter database open; alter database force logging; alter database add supplemental log data; select SUPPLEMENTAL_LOG_DATA_MIN, FORCE_LOGGING from v$database; alter system switch logfile;archivelog打开归档模式OGG Extract 读在线日志和归档日志都依赖它force logging强制 nologging 操作也写 redo避免直接路径加载的数据漏同步add supplemental log data是最小附加日志给 OGG 提供必要的补充信息switch logfile让附加日志尽快生效。查询结果里SUPPLEMENTAL_LOG_DATA_MIN应为 YESFORCE_LOGGING也应为 YES。如果只开归档没开强制日志后面用expdp做初始化时可能一切正常增量阶段才发现部分数据缺失。注意shutdown immediate会中断连接生产库先确认没有长事务和批处理在跑再走挂载和打开流程。3.2 goldengate 用户与 enable_goldengate_replication 参数源库和目标库都要建 OGG 管理员用户。源库多一个表空间路径按实际改目标库同样建用户但不执行add supplemental log data。下面这段源库脚本可以直接改路径后执行。-- 源库创建 OGG 管理员和表空间 create tablespace goldengate datafile /u01/app/oracle/oradata/test1/ogg01.dbf size 300m autoextend on; create user goldengate identified by goldengate default tablespace goldengate; grant connect,resource,create session,alter session to goldengate; grant flashback any table to goldengate; exec dbms_goldengate_auth.grant_admin_privilege(GOLDENGATE); alter system set enable_goldengate_replication true scopeboth;表空间路径、数据文件大小按实际调整grant_admin_privilege给 OGG 管理员授必要的系统权限enable_goldengate_replication在 12c 环境要打开scopeboth让参数重启后仍生效。目标库建用户时把最后一句保留但不要加add supplemental log data另外补 DML 权限。-- 目标库用户权限与源库基本一致额外补 DML 权限 create tablespace goldengate datafile /u01/app/oracle/oradata/test1/ogg01.dbf size 300m autoextend on; create user goldengate identified by goldengate default tablespace goldengate; grant connect,resource,create session,alter session to goldengate; grant flashback any table to goldengate; exec dbms_goldengate_auth.grant_admin_privilege(GOLDENGATE); grant insert any table,update any table,delete any table to goldengate; alter system set enable_goldengate_replication true scopeboth;目标库多出的insert any table,update any table,delete any table是 Replicat 写目标表需要的如果只给connect,resourceReplicat 启动后应用第一条 DML 就可能报权限不足。两端用户密码保持一致只是测试环境图省事实际部署建议按环境分开管理参数文件里不要长期写明文密码后续可以用凭证存储替换。配置项源库目标库作用归档模式必须开不要求Extract 读在线日志force logging必须开不要求防止 nologging 漏记最小附加日志必须开不要求补充 redo 信息OGG 管理员用户必须必须运行进程、存检查点DML any table 权限不需要必须Replicat 写目标表enable_goldengate_replication必须开必须开12c 复制参数3.3 DDL 支持脚本与表级 trandata 的边界如果只同步 DML表级 trandata 加完就能跑如果要同步 DDL源端还要跑 marker、ddl_setup、role_setup、ddl_enable 这一套脚本并给 OGG 用户授GGS_GGSUSER_ROLE。这些脚本用 sysdba 执行路径按 OGG 安装目录调整。# 源端 sysdba 执行/u01/app/ogg 按实际安装目录替换 sqlplus / as sysdba EOF grant execute on utl_file to goldengate; /u01/app/ogg/marker_setup /u01/app/ogg/ddl_setup /u01/app/ogg/role_setup GRANT GGS_GGSUSER_ROLE TO GOLDENGATE; /u01/app/ogg/ddl_enable ?/rdbms/admin/dbmspool.sql /u01/app/ogg/ddl_pin goldengate EOFmarker_setup建 DDL 标记表ddl_setup建 DDL 历史表role_setup建角色ddl_enable打开 DDL 捕获ddl_pin把 OGG 管理员 schema 固定住减少 DDL 同步时的性能开销。执行ddl_pin时传的 schema 名必须和GLOBALS里的GGSCHEMA一致大小写按数据库实际对象走。表级附加日志用add trandata加源端执行目标端不要加。表上有主键或唯一索引时直接加没有主键的表必须用KEYCOLS指定能唯一过滤重复数据的列否则 Replicat 应用更新时可能重复应用。# 源端 GGSCI给具体表加 trandata dblogin userid goldengate password goldengate add trandata TEST.T1 info trandata TEST.T1add trandata TEST.T1给表开补充日志info trandata看是否 enabled。表名大小写按数据库实际对象写Oracle 默认大写参数里写小写可能找不到表。没有主键的表用add trandata TEST.T1, KEYCOLS (col1,col2)这里的关键列要能唯一标识一行否则过滤重复数据时仍会出错。DDL 抽取开启后源端新增表不会自动同步需要重新add trandata并确认 Extract 参数里的DDL INCLUDE范围。4. 进程链路拆解Extract、DataPump、Replicat 的参数与启动顺序一条 OGG 链路至少三个进程源端 Extract 读 redo 写本地 trail源端 DataPump 把本地 trail 投递到目标端目标端 Replicat 读 trail 写目标库。三个进程的启动顺序是 MGR → Extract → DataPump → Replicat停的顺序反过来。参数文件里最容易混的是路径Extract 的EXTTRAIL是源端本地路径DataPump 的RMTTRAIL是目标端路径Replicat 的exttrail也是目标端路径。Windows 源端写.\dirdat\gsLinux 目标端写./dirdat/gs不要互相抄。4.1 Extract 参数从在线日志到本地 trailExtract 负责读源库在线日志把变更写到本地 trail。下面这份参数按源端 Linux 路径写Windows 源端把ORACLE_HOME、ORACLE_SID、EXTTRAIL换成 Windows 实际值路径分隔符用反斜杠。-- 源端 GGSCIedit param extgsxf EXTRACT extgsxf SETENV (ORACLE_HOME/u01/app/oracle/product/11.2.0/db_1) SETENV (ORACLE_SIDtest1) SETENV (NLS_LANGAMERICAN_AMERICA.AL32UTF8) USERID goldengate,PASSWORD goldengate EXTTRAIL ./dirdat/gs TRANLOGOPTIONS LOGRETENTION DISABLED BR BRINTERVAL 20M TRANLOGOPTIONS BUFSIZE 2048000 GETREPLICATES CACHEMGR CACHESIZE 2GB GETTRUNCATES DDL INCLUDE MAPPED, OBJTYPE TABLE INCLUDE MAPPED OBJTYPE INDEX DDLOPTIONS ADDTRANDATA RETRYOP RETRYDELAY 10 MAXRETRIES 10 DDLOPTIONS REPORT DISCARDFILE ./dirrpt/extgsxf.dsc,APPEND,MEGABYTES 1000 DISCARDROLLOVER AT 6:00 REPORTROLLOVER AT 6:00 REPORTCOUNT EVERY 1 HOURS,RATE FETCHOPTIONS FETCHPKUPDATECOLS FETCHOPTIONS MISSINGROW ABEND STATOPTIONS REPORT LONGTRANS 1H,CHECKINTERVAL 10m DYNAMICRESOLUTION TABLE TEST.*;SETENV里的ORACLE_HOME、ORACLE_SID必须是源库实际值Windows 源端写成D:\app\...这类路径EXTTRAIL ./dirdat/gs是源端本地 trail 前缀后面 DataPump 的exttrailsource要跟它一致TRANLOGOPTIONS LOGRETENTION DISABLED表示不让 Extract 管理日志保留日志保留交给数据库归档策略BR BRINTERVAL 20M控制有界恢复间隔BUFSIZE 2048000是读日志缓冲事务量大时可以再调CACHEMGR CACHESIZE 2GB给长事务缓存太小会频繁写临时文件GETTRUNCATES让 truncate 也同步目标端 Replicat 也要开DDL INCLUDE MAPPED只同步映射范围内的 DDLLONGTRANS 1H是长事务阈值超过后会告警TABLE TEST.*是同步范围按实际 schema 改。FETCHOPTIONS MISSINGROW ABEND让缺少行时直接中止避免静默丢数据。添加 Extract 时用begin now从当前时间开始add exttrail绑定 trail 文件大小。megabytes 1024是单个 trail 文件大小按日增量调太大恢复慢太小文件切换频繁。# 源端 GGSCI dblogin userid goldengate password goldengate add extract extgsxf tranlog, begin now add exttrail ./dirdat/gs, extract extgsxf, megabytes 1024 start extgsxf info extgsxfadd extract ... tranlog注册读在线日志的 Extractbegin now表示从当前时刻开始add exttrail把 trail 前缀和 Extract 绑定start启动后看info里的状态和 checkpoint。如果info显示STOPPED先去ggserr.log看是不是ORACLE_HOME、ORACLE_SID或数据库连接串写错。4.2 DataPump 参数RMTHOST 与 RMTTRAIL 的对应关系DataPump 不读数据库只把源端 trail 投递到目标端。PASSTHRU表示不做数据库映射直接传 trailRMTHOST写目标端 IP 和目标 MGR 端口RMTTRAIL写目标端 OGG 目录下的 trail 前缀。-- 源端 GGSCIedit param dpgskf EXTRACT dpgskf PASSTHRU DYNAMICRESOLUTION RMTHOST 10.0.100.141,MGRPORT 7809 RMTTRAIL ./dirdat/gs DISCARDFILE ./dirrpt/dpgskf.dsc,APPEND,MEGABYTES 100 DISCARDROLLOVER AT 6:00 REPORTROLLOVER AT 6:00 REPORTCOUNT EVERY 1 HOURS,RATE TABLE TEST.*;RMTHOST的 IP 换成目标 Linux 主机MGRPORT跟目标端 MGR 的PORT一致RMTTRAIL ./dirdat/gs是目标端路径不是源端路径写错会在目标端生成奇怪目录或直接报错TABLE TEST.*要和 Extract 的范围对齐范围不一致时 DataPump 会过滤掉部分表。Windows 源端如果开了防火墙出站和入站都要放行 7809 及动态端口范围常见现象是 DataPump 启动后info显示 Running但目标端dirdat一直没有新文件。# 源端 GGSCI add extract dpgskf, exttrailsource ./dirdat/gs add RMTTRAIL ./dirdat/gs, extract dpgskf, megabytes 1024 start dpgskf info dpgskfexttrailsource指向 Extract 写的本地 trailadd RMTTRAIL注册远端 trail 和文件大小。启动后看info dpgskf的RMTTRAIL和RMTHOST是否为目标端如果目标端没有文件先查目标 MGR 是否启动、端口是否通再查ggserr.log里的 TCP/IP 报错。4.3 Replicat 参数ASSUMETARGETDEFS、错误处理和批量提交Replicat 在目标端读 trail 写库。两端表结构一致时用ASSUMETARGETDEFS省掉定义文件表结构不一致时要用SOURCEDEFS和定义文件。DBOPTIONS DEFERREFCONST延迟约束检查SUPPRESSTRIGGERS避免触发器重复执行GROUPTRANSOPS 1000按 1000 个操作一组提交兼顾性能和回滚粒度。-- 目标端 GGSCIedit param repgs1 REPLICAT repgs1 SETENV (ORACLE_HOME /u01/app/oracle/product/11.2.0/db_1) SETENV (ORACLE_SID test1) SETENV (NLS_LANG AMERICAN_AMERICA.AL32UTF8) USERID goldengate password goldengate ASSUMETARGETDEFS DBOPTIONS DEFERREFCONST DBOPTIONS SUPPRESSTRIGGERS DISCARDFILE ./dirrpt/repgs1.dsc, APPEND, MEGABYTES 1000 DISCARDROLLOVER AT 6:00 REPERROR (DEFAULT, ABEND) DDL INCLUDE MAPPED, OBJTYPE TABLE p a hrefhttps://download.csdn.net/download/u010575833/88803231 stylecolor:#ec7500;font-size:14px; 本文还有配套的精品资源点击获取 /a img altmenu-r.4af5f7ec.gif srchttps://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif stylewidth:16px;margin-left:4px;vertical-align:text-bottom;cursor:text; /p