简介面向数据库运维与数据同步实施人员的实操指南聚焦于在Windows源端与Linux目标端之间通过Oracle GoldenGate完成甲骨文数据库的异构实时同步部署。资源为一份PDF格式文档总共1个文件压缩包大小496KB篇幅精简但流程齐全。文中依次讲解安装包解压、可视化安装、源端开启归档与强制日志、补充附加日志、建立同步专用用户并授权、目标端差异权限赋予以及管理器、抽取进程、复制进程的配置与监控维护同时区分源库与目标库的不同初始化要求补充检查点表、全局参数文件、命令行登录等容易被忽略的细节并附有可直接参考的数据库命令与同步命令示例。目前已有295人学习下载。适合需要快速上手跨平台数据同步的初中级运维和数据库工程师能有效减少环境搭建与排错时间。1. Oracle OGG从Windows同步到Linux你到底要部署什么在Windows上跑Oracle源库、在Linux上起Oracle目标库中间用OGGOracle GoldenGate做实时同步这套方案看着是标准安装流程实际做起来最让人头疼的不是OGG本身的命令而是两端环境的差异字符集、大小写习惯、文件系统规则、防火墙、归档日志策略每一个都能让同步进程悄悄卡住。OGG从这个标题拆开看就是两件事在Windows源端把数据库日志变成可传输的trail文件在Linux目标端把trail文件应用进目标库。它能解决的是Windows库向Linux库做实时迁移、读写分离、灾备复制这类需要“数据不停”的场景。适合手里有Oracle迁移项目、或者正在维护混合架构的DBA和运维工程师也适合刚接触OGG但需要马上落地一套跨平台复制的实施人员。2. 部署前的架构判断版本、字符集与同步拓扑怎么定2.1 源端Windows与目标端Linux的OGG版本选型先别急着解压安装包。OGG是一个强依赖数据库版本的中间件版本选错后面所有的进程都会在启动时报莫名其妙的问题。我一般会先做两件事第一确认源端和目标端Oracle数据库的小版本第二打开Oracle官方兼容矩阵看目标版本对应的OGG版本。常见组合下Oracle 19c配OGG 19.1是安全的但如果你源库还是11.2那就得找旧版OGG不能用最新的19c安装包去连。这里有个容易翻车的地方Windows和Linux的安装包虽然功能一样但内部二进制和库文件不通用不能图省事把Linux安装包拷到Windows上解压。目标端版本最好和源端保持同一OGG主版本因为trail文件的格式在不同大版本之间可能不兼容。跨版本混用不是不行但往往需要额外配置而且一旦trail由大版本降级写入OGG可能直接拒绝读取。我见过最费时间的排查就是两边OGG版本差了一代复制进程能起来但目标端一直收不到trail数据在传输层就断了。所以我的习惯是源端和目标端用同一个版本号安装前先记下两边的数据库版本、OS位数再对照兼容矩阵确认没问题再动手。这个过程不值钱但能省掉后面一整天的排查时间。版本的另一个隐藏问题在Windows端OGG的进程默认会占用系统资源在32位操作系统上日志量大时容易遇到句柄数和内存寻址的瓶颈。现在大多数环境都是64位但如果你碰到比较老的系统还是先在测试环境压一把别拿生产直接试。2.2 字符集与大小写敏感Windows配置里最容易埋雷的两个点从Windows同步到Linux数据内容本身通常没变变的是OS和数据库的字符集。Windows上的中文环境数据库字符集常见是ZHS16GBK而新建的Linux目标库很多人会沿用AL32UTF8。OGG在抽取、传输、应用三个阶段都涉及字符集转换。如果处理不好最直接的现象就是目标表里的中文变成一串问号。怎么规避首先在启动OGG进程前确认每个进程的NLS_LANG和所在数据库的字符集一致。比如源端数据库字符集是ZHS16GBK那么在源端Extract进程参数里最好显式加上SETENV (NLS_LANG AMERICAN_AMERICA.ZHS16GBK)目标端如果库是AL32UTF8Replicat进程里就写SETENV (NLS_LANG AMERICAN_AMERICA.AL32UTF8)注意这里的NLS_LANG不是随便写的要和你实际操作系统locale、数据库client字符集匹配。如果拿不准先在测试表插入几条中文同步过去对比观察再决定是否调整。第二个坑是大小写。Windows文件系统不区分大小写Linux区分。Windows上用惯了D:\OGG、DirDat这种写法到了Linux上写参数文件时路径和目录名都要精确匹配。更隐蔽的是表名Oracle数据字典里默认存的是大写但总有些库的表是用双引号建的小写表名。Windows上OGG参数里写TABLE hr.employees在Windows上可能能模糊匹配在Linux目标端Replicat的MAP直接按字面量去查数据字典找不到小写表就会报ORA-00942。遇到这种情况参数里必须给表名加双引号MAP HR.employees, TARGET HR.employees;这个细节在Windows迁移到Linux的场景里特别常见建议部署前先跑一个查询把源端目标表的大小写情况列出来再写进参数文件。2.3 单向还是双向同步拓扑决定进程数量OGG部署前还需要回答一个问题数据是单向流还是双向流。标题“Windows同步到Linux”绝大多数场景是单向比如把Windows库迁到Linux库或者让Linux库作为Windows库的只读副本。单向部署需要的进程最少源端一个Extract进程负责抓日志一个Data Pump进程负责传trail目标端一个Replicat进程负责应用加上两边的Manager一共5个常驻进程。如果要做双向复制进程数量直接翻倍而且还要面对数据冲突同一行数据两边都更新到底以谁为准OGG提供冲突解决和异常处理机制但配置复杂度高不少基础部署不建议一上来就上双向。拓扑也决定了初始化方式。如果允许业务停机最简单的做法是停应用、导出、导入、再启动OGG追平。如果完全不允许停机那就要用OGG的初始化加载方案先记录源库SCN配置Extract从该SCN开始抓取同时用数据泵导出源库全量目标端导入全量再启动Replicat追增量。这个过程里停机窗口可以压到很短因为全量导出不影响在线日志的抓取。具体步骤我会在第3章第5节展开。还有一个常见问题同步粒度。是按schema同步、按表同步还是带DDL同步只做DML同步最简单参数里写上需要同步的表清单就行如果要同步DDL比如建表、加列需要额外启用DDL同步配置并且源库要有对应的权限角色。我推荐第一版先只做DML把链路跑通观察一段时间确认稳定后再考虑是否纳入DDL。3. Windows源端安装与配置Extract和Pump是两条腿3.1 解压安装与目录规划Windows路径与数据库预检常见做法是到Oracle官网下载对应版本的OGG for Oracle Windows x64安装包解压到一个纯字母路径下比如D:\ogg。一定要避免中文目录、空格和过长路径否则后面启动进程时会出现文件句柄相关的怪异报错。解压完成后安装目录下会有一个ggsci.exe所有OGG操作都从这个命令行工具进入。在启动OGG之前先确认源库满足最基础的三个条件。第一数据库必须处于归档模式第二至少开启最小补充日志第三最好把FORCE LOGGING打开。如果库不是归档模式OGG在日志切换时可能漏抓而且无法追朔到较早的时间点。补充日志不开启OGG解析redo时拿不到足够的前镜像信息启动Extract会直接报ORA-01291。下面这段SQL是源端预检脚本我会在每台源机上跑一遍-- 预检源数据库日志模式与补充日志 SELECT log_mode, supplemental_log_data_min, force_logging FROM v$database; -- 如果需要开启归档模式需要重启数据库 SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN; ALTER DATABASE FORCE LOGGING; -- 最小补充日志 ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; ALTER DATABASE FORCE LOGGING;逻辑说明V$DATABASE视图直接反映当前日志模式SUPPLEMENTAL_LOG_DATA_MIN如果是YES或IMPLICIT表示最小补充日志已开启。SHUTDOWN IMMEDIATE到STARTUP MOUNT这一段要放在维护窗口执行因为会重启数据库。ADD SUPPLEMENTAL LOG DATA不需要重启但建议和FORCE LOGGING一起执行确保后续DDL操作的日志也被完整记录。参数说明ARCHIVELOG是归档模式的核心开关FORCE LOGGING强制日志记录避免NOLOGGING操作导致OGG抓不到数据变化。这两个参数在OGG跨平台场景里最好都开。预检完成后进入Windows源端的OGG安装目录命令行运行ggsci.exe执行初始化cd /d D:\ogg .\ggsci.exe GGSCI (WINDB) 1 CREATE SUBDIRSCREATE SUBDIRS会生成dirprm、dirrpt、dirdat、dirdct等标准目录后续参数文件、报告、trail文件都放在这些目录下。如果跳过这一步后面编辑参数文件时容易报目录不存在。3.2 用GGSCI初始化Manager端口、自动重启与日志清理OGG的Manager进程是每个节点的主入口负责监控其他进程、接收远程连接、触发自动重启。Windows上的Manager配置与Linux差别很小核心是端口和归档策略。用GGSCI打开参数文件PORT 7809 DYNAMICPORTLIST 7810-7820 AUTORESTART EXTRACT *, RETRIES 5, WAITMINUTES 3 PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 2保存后回到GGSCI执行START MANAGER启动。这里的参数有一个算一个PORT 7809是Manager对外服务的端口目标端Pump要连接这个端口来投递trailDYNAMICPORTLIST是备用端口区间主要用于数据投递时两台OGG节点之间的额外连接如果防火墙策略比较严要提前放行这些端口AUTORESTART让Extract进程意外退出后自动拉起来重试5次间隔3分钟PURGEOLDEXTRACTS是本地trail清理策略按检查点和安全天数双重控制避免磁盘被历史trail占满。这里有个容易忽略的点Manager启动后PURGEOLDEXTRACTS才会生效。如果你手动删掉了dirdat里的trail文件可能导致Extract找不到检查点而停止。所以清理trail一定用OGG自己的命令不要用Windows资源管理器去删。3.3 配置Extract抽取进程从权限到最小可用参数在Windows源端Extract进程负责读取Oracle redo/归档日志解析出变化数据写入本地trail。它需要连接源库的账号这个账号不能随便用至少要有访问数据字典和读取表内容的权限。我一般这样建OGG专用账号CREATE USER ogg_usr IDENTIFIED BY OGG#2024; GRANT CONNECT, RESOURCE TO ogg_usr; GRANT SELECT ANY TABLE, SELECT ANY DICTIONARY TO ogg_usr; GRANT ALTER ANY TABLE, LOCK ANY TABLE TO ogg_usr; GRANT FLASHBACK ANY TABLE TO ogg_usr;这里SELECT ANY TABLE和SELECT ANY DICTIONARY是读取redo解析元数据的基础FLASHBACK ANY TABLE让OGG能以闪回方式读取一致性视图ALTER ANY TABLE和LOCK ANY TABLE用于初始加载阶段获取锁。生产环境如果安全规范严格可以收敛到具体schema但至少要保证这几类权限。别用系统账号跑OGG出了问题不好追责。接下来配置Extract参数文件。在GGSCI里执行EDIT PARAMS E_WIN01写入EXTRACT E_WIN01 USERIDALIAS ogg_usr EXTTRAIL ./dirdat/we GETTRUNCATES TABLE HR.EMPLOYEES;EXTRACT E_WIN01声明进程名USERIDALIAS ogg_usr是之前存入凭据库的数据库连接别名不会在参数文件里暴露密码EXTTRAIL ./dirdat/we指定本地trail文件目录和前缀we表示windows extractGETTRUNCATES让OGG把TRUNCATE语句也同步过去如果业务里有清表操作必须加TABLE HR.EMPLOYEES是同步表白名单多张表就写多行。注意USERIDALIAS对应的凭据要先在GGSCI里创建GGSCI (WINDB) 1 ALTER CREDENTIALSTORE ADD USER ogg_usr, PASSWORD OGG#2024, ALIAS ogg_usr GGSCI (WINDB) 2 DBLOGIN USERIDALIAS ogg_usr GGSCI (WINDB) 3 ADD EXTRACT E_WIN01, TRANLOG, BEGIN NOW GGSCI (WINDB) 4 ADD EXTTRAIL ./dirdat/we, EXTRACT E_WIN01ALTER CREDENTIALSTORE ADD USER把账号密码存进OGG的凭据库ALIAS是后续参数里引用的名字。DBLOGIN USERIDALIAS ogg_usr验证连接是否成功连接失败会直接报ORA错误在这里就能拦住不用等到启动进程。ADD EXTRACT ... TRANLOG, BEGIN NOW告诉OGG从当前时刻开始抓取事务ADD EXTTRAIL把之前参数里的EXTTRAIL实际登记到OGG队列里这一步漏了的话Extract启动后不知道写哪个trail。3.4 配置Data Pump投递进程跨平台传输的关键Extract只是把数据写到了Windows本地trail真正把trail送到Linux目标端的是Data PumpPump。Pump从本地trail读数据通过网络写到目标端的RMTTRAIL路径。Pump参数文件单独建一个EXTRACT P_WIN01 RMTHOST 192.168.1.100, MGRPORT 7809 RMTTRAIL /u01/ogg/dirdat/lt PASSTHRU TABLE HR.EMPLOYEES;RMTHOST后面的地址是Linux目标机IPMGRPORT 7809是目标端Manager的监听端口。RMTTRAIL是目标端trail文件的绝对路径这个路径必须和Linux端OGG安装目录对应并且目录要保持一致。PASSTHRU表示Pump不解析数据内容只做纯转发性能最好如果需要在Pump阶段做数据过滤或转换就要去掉这个参数。注册Pump的命令如下GGSCI (WINDB) 5 ADD EXTRACT P_WIN01, EXTTRAILSOURCE ./dirdat/we GGSCI (WINDB) 6 ADD RMTTRAIL /u01/ogg/dirdat/lt, EXTRACT P_WIN01这里EXTTRAILSOURCE指向Extract写的本地trailOGG通过文件序列号自动知道从哪个位置开始读。ADD RMTTRAIL登记远程trail等目标端Replicat去读取。注册完成后源端的进程链路是E_WIN01写./dirdat/weP_WIN01读./dirdat/we并送到/u01/ogg/dirdat/lt。3.5 初始化加载先记录SCN再导出导入如果目标库已经有一份完整数据可以跳过初始化如果是全新同步需要在启动增量同步前把存量数据搬过去。标准做法是记录一个SCN让Extract从这个SCN开始抓增量同时用数据泵导出既有一致性快照。流程的第一步是查询当前SCNSELECT CURRENT_SCN FROM V$DATABASE;假设查到的值是12345678。接下来用这个SCN配置Extract而不是直接用BEGIN NOWGGSCI (WINDB) 7 ALTER EXTRACT E_WIN01, BEGIN 12345678说明一下BEGIN 12345678表示Extract从SCN 12345678对应的redo位置开始读取保证它抓取的是从那个时间点以后的变化。配置完启动Extract和Pump让增量数据开始进trail。然后执行数据泵导出expdp ogg_usr/OGG#2024source_db schemasHR directoryDATA_PUMP_DIR flashback_scn12345678 dumpfilehr_init.dmp logfilehr_init.logflashback_scn12345678让导出使用与提取相同的SCN确保导出的快照和增量起点一致。导出可能持续几小时期间业务继续写Extract在后台把变化都进trail。导出完成后把dmp传到Linux目标机用impdp导入目标库随后启动目标端Replicat它会从trail的开头开始应用把导出期间产生的增量数据全部补上。这个流程的关键就是“同一SCN”导出用的SCN、Extract开始抓的SCN必须是同一个数字差一个事务都会丢数据。4. Linux目标端安装与配置Replicat落地前的三个准备4.1 创建OGG用户与目录Linux端权限模型目标端Linux安装包同样是解压即用但目录权限比Windows严格。我一般把OGG装到/u01/ogg并创建一个专门的系统用户来跑OGG避免直接用root或oracle用户。创建命令useradd -m -d /home/ogg -s /bin/bash ogg mkdir -p /u01/ogg chown -R ogg:ogg /u01/ogg chmod -R 755 /u01/oggchmod 755保证OGG目录对所属用户可写对其他用户可读可执行如果目标是安全加固环境可以收紧到750。这里要注意OGG进程需要连数据库所以目标机上的Oracle客户端环境和库的listener要已经能正常连接。安装完成后确认目标机防火墙放行7809并且用源端机器能连接目标IP 7809因为源端Pump要主动连过来。4.2 配置Manager与GLOBALS参数检查点表不是可选项Linux端Manager的配置与Windows一样端口、自动重启、清理策略保持同一套。但目标端多一个关键文件GLOBALS它放在OGG安装目录下用于声明OGG schema和检查点表。用文本编辑器创建GGSCHEMA oggadm CHECKPOINTTABLE oggadm.ggs_checkpointGGSCHEMA oggadm让OGG在目标库使用oggadm这个schema来管理内部对象CHECKPOINTTABLE指定Replicat的检查点表。检查点表的作用是记录Replicat已经应用到的trail位置进程重启后OGG从这张表的位置继续不会重复应用已提交的事务。很多人部署时觉得这张表多余结果进程crash后重建目标表出现重复数据最后还得手工去重。所以检查点表必须建。创建表需要在GGSCI里登录数据库GGSCI (LINDB) 1 DBLOGIN USERIDALIAS ogg_usr GGSCI (LINDB) 2 ADD CHECKPOINTTABLE oggadm.ggs_checkpoint这里的ogg_usr是目标库OGG账号需要提前在目标库创建并授权。授权参考源端3.3节但目标端Replicat还需要DML权限所以INSERT/UPDATE/DELETE的权限不能漏。ADD CHECKPOINTTABLE会在目标库自动建表如果表已经存在会报错可以先用DELETE CHECKPOINTTABLE清理。4.3 配置Replicat复制进程MAP与TARGET参数的写法Replicat是目标端的核心它读取/u01/ogg/dirdat/lt下的trail文件把事务应用到目标库。参数文件如下REPLICAT R_LIN01 USERIDALIAS ogg_usr ASSUMETARGETDEFS DISCARDFILE ./dirrpt/R_LIN01.dsc, APPEND, MEGABYTES 100 MAP HR.EMPLOYEES, TARGET HR.EMPLOYEES;ASSUMETARGETDEFS表示源端和目标端表结构完全一致直接用目标表的定义来解析trail省去数据字典的传输前提是两边表结构真的完全一样。如果表结构有差异比如列顺序或类型不同就必须用DEFSFILE做字段映射不能在基础部署里省这一步。DISCARDFILE指定执行失败记录的文件位置APPEND表示追加避免重启后覆盖日志MAP ... TARGET ...是复制映射关系源schema表映射到目标schema表多张表就多行。在注册Replicat之前要把EXTTRAILSOURCE指向源端Pump投递过来的trail位置GGSCI (LINDB) 3 ADD REPLICAT R_LIN01, EXTTRAILSOURCE ./dirdat/lt, CHECKPOINTTABLE oggadm.ggs_checkpoint这一步告诉Replicat去哪读trail。注意这里写的是./dirdat/lt而源端RMTTRAIL写的是/u01/ogg/dirdat/lt实际指向同一个目录只是GGSCI当前工作目录就是/u01/ogg所以用相对路径就能对齐。如果两边路径对不上Replicat启动时会一直卡在“等待trail”没有任何报错只看到lag持续涨。4.4 初始化导入与Replicat启动顺序目标端导入全量数据用impdp导入前先创建一个接收表空间和schema例如HR。导入命令impdp ogg_usr/OGG#2024target_db schemasHR directoryDATA_PUMP_DIR dumpfilehr_init.dmp logfilehr_init_imp.log导入完成后确认表行数跟源端导出的统计值一致然后再启动Replicat。启动顺序是先在目标端START MANAGER再START REPLICAT R_LIN01。启动后半分钟内执行LAG REPLICAT R_LIN01理想情况下lag应该是0。如果lag一直在涨说明Replicat追上trail写入速度比较慢先看是否在大量执行导入历史增量这是正常现象如果涨到不可控检查目标库的redo日志切换频率、磁盘IO有没有被打满。还有一个习惯问题很多人喜欢在导入数据之前就启动Replicat结果Replicat开始应用源端增量和目标导入进程写同一张表轻则锁冲突重则主键重复。我的原则是全量导入必须全部完成、校验完才能放Replicat跑增量。5. Windows到Linux同步的避坑与排查现象、原因、解决5.1 现象Pump启动后报“Unable to connect to target Manager”本地进程状态STOP原因目标端Manager没启动或者Linux防火墙拦截了7809端口。Windows源端Pump是主动连接方所以重点查目标端不是源端。解决先在目标端GGSCI执行INFO MANAGER确认状态是RUNNING。再在目标机上执行ss -lntp | grep 7809看端口是否在监听。如果端口没监听检查Manager参数文件里是否写错端口。如果监听正常用源端机器连接目标IP 7809不通就去放行防火墙firewall-cmd --permanent --add-port7809/tcp firewall-cmd --reload同时把Manager参数里DYNAMICPORTLIST 7810-7820这些端口也一并放行Pump在传输数据时会动态申请这些端口。5.2 现象启动Extract时报“OGG-01154 SQL error: ORA-01291: missing supplemental log”原因源库只开了归档模式没补最小补充日志。OGG解析redo时拿不到被更新行的主键和所有列前镜像直接拒绝启动。解决回到3.1节的预检SQL执行ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;然后对需要同步的表执行ADD TRANDATAGGSCI (WINDB) 1 DBLOGIN USERIDALIAS ogg_usr GGSCI (WINDB) 2 ADD TRANDATA HR.EMPLOYEESADD TRANDATA会在表级别开启补充日志同时把表的主键列信息记录到OGG的数据字典里。注意这个命令要在DBLOGIN成功之后执行且对每张同步表都要做。如果表很多可以用ADD TRANDATA HR.*批量处理但批量前最好确认所有表都有主键没有主键的表OGG只能靠整行前镜像匹配性能会差一截。5.3 现象Replicat进程是RUNNING但STATS REPLICAT不增长目标表一直没数据原因最常见的两种情况一是Replicat参数里的MAP没匹配到trail中的表二是EXTTRAILSOURCE和源端RMTTRAIL路径不一致Replicat根本没读到有效trail。解决先看INFO REPLICAT显示的trail文件号再和源端INFO PUMP比对。比如源端显示Pump写到lt000001目标端INFO REPLICAT读的也是lt000001说明位置对齐。再看报告文件./dirrpt/R_LIN01.dsc如果有skip记录说明MAP写错如果没有异常记录但一直不增长检查目标端表的字段和源端是否一致ASSUMETARGETDEFS模式下字段顺序不一致也会导致静默丢弃。5.4 现象中文同步后全部变成问号字符数据乱码原因OGG进程的NLS_LANG和数据库字符集不一致。源库ZHS16GBK但Extract进程启动环境用的默认NLS_LANG是AL32UTF8解析redo时字符集转换错或者目标端Replicat同样设置错。解决按2.2节在进程参数文件里显式加SETENV并重启对应进程。源端Extract和Pump都写SETENV (NLS_LANG AMERICAN_AMERICA.ZHS16GBK)目标端Replicat根据目标库字符集写SETENV (NLS_LANG AMERICAN_AMERICA.AL32UTF8)如果改完之后还乱码先只映射一张小测试表同步确认字符集链路通了再放全部表。OGG字符集问题最麻烦的点在于它不报错数据可能已经写进目标库了只能靠对比数据发现所以一定要在测试环境先验证字符集别直接扛生产。5.5 现象trail目录不存在Pump或Replicat一直等待日志里出现“Trail file not found”原因源端RMTTRAIL写的是/u01/ogg/dirdat/lt但Linux端安装OGG时没建dirdat目录或者/u01/ogg权限不属于ogg用户。解决在Linux目标端创建目录并授权mkdir -p /u01/ogg/dirdat chown -R ogg:ogg /u01/ogg/dirdat然后在源端重启Pump等几秒后检查目标端ls -l /u01/ogg/dirdat能看到lt000000开头的文件就正常了。这个坑经常出现在“先配Windows再配Linux”的顺序里Windows端一启动Pump就去连目标端写文件目标端目录还没准备所以建议两边目录在配置参数前就建好。6. 收尾技巧给OGG进程上保险把巡检变成日常习惯部署真正收尾的标志不是所有进程RUNNING而是监控接入到位。OGG本身可以配置AUTORESTART但网络闪断、数据库重启、磁盘满这类问题进程不一定能自己恢复。我常用的做法是写一个极简巡检脚本每5分钟跑一次把进程状态和Lag延迟写入日志超过阈值就告警。#!/bin/bash export OGG_HOME/u01/ogg cd $OGG_HOME $OGG_HOME/ggsci EOF info all lag replicat R_LIN01 EOF把这段放进crontab*/5 * * * * /u01/ogg/check_ogg.sh /var/log/ogg_check.log 21脚本里可以再加一个简单的字符串判断比如用grep -c RUNNING统计运行进程数如果少于预期数量就发邮件。自动重启我不建议一上来就做因为OGG进程异常有时是数据问题自动拉起会反复往discard文件里刷错误反而拖垮目标库。先人工介入再逐步把判断逻辑加到脚本里。巡检养成习惯后再做月度切换演练就简单了。演练步骤很标准停掉源端业务写入STOP EXTRACT E_WIN01等到目标端LAG REPLICAT R_LIN01显示0比对两张关键表的行数和checksum确认无误后把业务切到目标端。注意切换前一定要把反向同步进程准备好否则升级回退时没有退路。我第一次做这种跨平台同步就是没准备反向进程演练被业务叫停时只能手工导数据折腾了两小时。从那以后任何同步链路我都先配好反向进程再谈切换哪怕平时不用也要保证随时能回退。OGG部署就是这样配置命令就那些真正拉开差距的是对边界情况的预判和巡检机制。每次安装前把版本矩阵、字符集、补充日志、目录权限、防火墙这五件事默认过一遍能少踩一大半的坑。希望帮到你。本文还有配套的精品资源点击获取