简介:面向需要在 Windows 与 Linux 之间完成 Oracle 数据同步的 DBA、运维与实施人员,这份 PDF 以 Oracle GoldenGate 12.2.0.2 为版本基线,梳理从源库准备、目标库授权到 OGG 初始化、进程配置与日常维护的完整部署链路,适合作为异构环境数据复制与灾备落地的参考手册。包内共 1 个 PDF 文件,大小约 496KB,篇幅紧凑,便于随查随用。内容重点覆盖归档与强制日志、附加日志开启及校验,goldengate 用户与管理员权限授予,源端与目标端在附加日志、DML 权限上的差异,以及 GLOBALS、checkpoint 表、Manager、Extractor、Replicat 等组件的配置要点,并给出监控、日志检查和故障排查思路。目前已有 298 人学习,适合需要快速对照搭建测试环境、核对授权细节和排查同步异常的中级数据库从业者。
1. Windows 到 Linux 的 OGG 同步:先把异构链路的账算清楚
把 Oracle 数据库从 Windows 迁到 Linux,最容易在割接窗口里翻车的不是 SQL 语法,而是增量数据对不上。Oracle OGG 数据同步这套链路,核心价值就是让 Windows 源库的 redo 被 Extract 抓走,经 Data Pump 投到 Linux 目标端,再由 Replicat 应用。OGG 12.2.0.2 在异构平台上的安装包、服务注册、路径和字符集都有差异,适合正在做跨平台迁移、报表库实时同步或双跑验证的 DBA。下面按我实际拆过的顺序,把每个参数和坑位摆开。
2. 链路拆解:Extract、Data Pump、Replicat 在两端怎么摆
2.1 三个进程各管什么,别把抽取和投递混在一起
OGG 的链路看着像一条线,实际是三段职责。源端 Extract 读 Oracle 的 online redo 和 archive log,把变更写成 trail 文件;Data Pump 是源端的第二个进程,只负责把本地 trail 投递到目标端,不做表映射和列转换;目标端 Replicat 读远端 trail,按 MAP 规则应用到目标库。Windows 源端和 Linux 目标端之间隔着操作系统,Extract 的SETENV必须指向 Windows 的 Oracle Home,Replicat 的SETENV指向 Linux 的 Oracle Home,这两个环境变量写错,进程起来就停,ggserr.log 里通常只留一行很含糊的报错。
我一般把 Extract 和 Data Pump 分开配,不让 Extract 直接写远程。原因很实际:跨平台网络抖动时,Data Pump 可以独立重启,Extract 仍然在源端保留 trail,不会因为目标端短时间不可达把源端抽取也拖死。Data Pump 参数里的RMTHOST写 Linux 目标端 IP,MGRPORT写目标端 Manager 的端口,默认 7809;RMTTRAIL是目标端 OGG 目录下的相对路径,不是 Linux 绝对路径。这个路径写错,Data Pump 会报 trail 打开失败,但 Extract 可能还在正常跑,容易误判成源端问题。
还有一个边界:ADD TRANDATA是给表加附加日志,属于源端数据库动作;ADD EXTTRAIL是给 OGG 分配本地队列文件;ADD RMTTRAIL是给 Data Pump 分配远端队列文件。三个命令名字像,作用完全不同。血泪经验是先把INFO EXTRACT、INFO RMTTRAIL、INFO REPLICAT的输出对齐,再启动进程,别一上来就START ER *。
2.2 Windows 源端与 Linux 目标端的安装差异
Linux 目标端的安装包和源端不是同一个文件。输入里的122022_fbo_ggs_Linux_x64_shiphome.zip是 Linux x64 的 OGG 12.2.0.2 安装包,解压后用 oracle 用户跑图形化安装,选择对应的数据库版本。安装目录不要带空格,后面GLOBALS、dirprm、dirdat都靠这个路径定位。命令如下:
su - oracle unzip 122022_fbo_ggs_Linux_x64_shiphome.zip cd fbo_ggs_Linux_x64_shiphome/Disk1 ./runInstallersu - oracle是为了带上 oracle 用户的环境变量,避免安装程序找不到DISPLAY或临时目录。unzip解压后进入Disk1,runInstaller会拉起图形界面,数据库版本选项要和目标库实际版本对应。安装路径我一般固定成/u01/app/ogg,后面所有参数文件都按这个根目录写;如果换路径,GLOBALS、SETENV、EXTTRAIL都要跟着改。
Windows 源端不能用这个 Linux 包,要拿对应 Windows 平台的 OGG 12.2.0.2 安装包。常见做法是解压到D:\ogg\12.2.0.2这类不带空格的目录,运行安装程序,安装完成后用 GGSCI 注册 Manager 服务。Windows 上路径分隔符和 Linux 不同,但 OGG 参数文件里我建议统一写正斜杠,比如./dirdat/gs,减少转义问题。Oracle Home 则必须写 Windows 实际路径,例如D:\app\oracle\product\11.2.0\dbhome_1,并且用双引号包住。
mkdir D:\ogg\12.2.0.2 cd /d D:\ogg\12.2.0.2 REM 解压对应 Windows 平台的 OGG 12.2.0.2 安装包后运行安装程序 REM 安装路径不要带空格,后续 GGSCI 在该目录下执行这段命令只做目录准备,真正的安装程序按平台包里的入口走。cd /d用于跨盘符切换,REM是批处理注释。Windows 源端还要确认 Oracle 服务账户能读到 OGG 目录,否则 Manager 作为服务启动时会因为权限不足反复重启。源端和目标端的 OGG 版本尽量保持一致,12.2.0.2 对 12.2.0.2 最稳;版本不一致时先查兼容矩阵,别拿生产链路做试验。
2.3 端口、目录、字符集的前置核对表
跨平台链路最怕“装完了才发现不通”。下面这张表是我每次割接前必核对的项,源端 Windows 和目标端 Linux 分开看,失败表现也列出来,方便反查。
| 检查项 | Windows 源端 | Linux 目标端 | 常见失败表现 |
|---|---|---|---|
| Manager 端口 | 7809 监听,防火墙放行 | 7809 监听,防火墙放行 | Data Pump 连不上目标 MGR |
| 动态端口 | 7800-7810 放行 | 7800-7810 放行 | 抽取能起,投递随机断 |
| OGG 目录权限 | 服务账户可读写 | oracle 用户可读写 | 进程启动即停,trail 打不开 |
| 字符集 | 与源库一致 | 与目标库一致 | 中文乱码、比较键错乱 |
| 表名大小写 | 按源库实际对象名 | 按目标库实际对象名 | Replicat 报表或列不存在 |
| 时区 | 源库时区确认 | 目标库时区确认 | 时间戳列偏差 |
端口这块,PORT 7809是 Manager 的固定监听,DYNAMICPORTLIST 7800-7810是给抽取和投递协商用的动态端口。只放 7809 不够,Data Pump 投递时可能落到动态端口,防火墙一拦就表现为“刚开始能同步,过一会断”。目录权限在 Windows 上容易被忽略:用交互式登录测试正常,切成服务账户就跑不起来,原因是服务账户没有 OGG 目录和 Oracle Home 的读取权限。
字符集不要只看数据库字符集,还要看NLS_LANG。源端 Windows 如果设了AMERICAN_AMERICA.ZHS16GBK,目标 Linux 是AL32UTF8,中间又走 expdp/impdp,中文列很容易翻车。我一般先查两边的NLS_DATABASE_PARAMETERS,把NLS_CHARACTERSET和NLS_NCHAR_CHARACTERSET记下来,再决定 OGG 参数里的SETENV (NLS_LANG=...)怎么写。两边不一致时,初始化 dump 和 OGG 链路要分开验证,别把乱码怪到 Replicat 头上。
3. 数据库打底:归档、附加日志与 OGG 账号的硬性条件
3.1 源库三件套:归档、force logging、supplemental log
源库是 Windows 上的 Oracle,OGG 要读 redo,归档模式必须开。强制日志和最小附加日志也要开,否则某些变更缺少必要信息,Extract 抽出来的数据不完整。下面这段 SQL 是源库打底,执行前先确认数据库状态,STARTUP MOUNT只适合当前没开库或者维护窗口内操作。
-- 源库:确认归档已开;未开时在维护窗口执行 SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN; -- 强制记录日志,避免 NOLOGGING 操作让 OGG 丢变更 ALTER DATABASE FORCE LOGGING; -- 开启最小附加日志,DDL 同步和唯一键定位都需要 ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; -- 查看结果,SUPPLEMENTAL_LOG_DATA_MIN 应为 YES,FORCE_LOGGING 应为 YES SELECT SUPPLEMENTAL_LOG_DATA_MIN, FORCE_LOGGING FROM V$DATABASE; -- 切换日志,让附加日志设置生效 ALTER SYSTEM SWITCH LOGFILE;ARCHIVELOG是 OGG 读历史 redo 的前提,FORCE LOGGING防止业务用NOLOGGING写入导致 redo 缺失,ADD SUPPLEMENTAL LOG DATA是最小附加日志,给 OGG 提供唯一键定位所需的信息。SWITCH LOGFILE不是可选项,设置完不切日志,当前 redo 组里可能还是旧状态,V$DATABASE显示 YES 但抽取端读不到完整附加信息。源库如果是 RAC,归档路径和线程要额外确认,这里按单实例写。
FORCE_LOGGING会增加 redo 量,生产库要评估日志空间和归档空间。我一般在上线前把归档删除策略和 FRA 大小一起看,别只开参数不看磁盘。SUPPLEMENTAL_LOG_DATA_MIN查出来是YES才算过,FORCE_LOGGING也必须是YES;如果源库版本对ENABLE_GOLDENGATE_REPLICATION不支持,先按版本查参数,别硬套 12c 的开关。
3.2 建 OGG 表空间和账号,授权一次到位
OGG 需要一个独立 schema 存 checkpoint 表、DDL 历史等元数据。表空间名字用goldengate,数据文件按实际路径改,大小 300M 起步,自动扩展打开。用户密码生产环境必须换掉,示例里用goldengate只是为了和输入一致,别直接上线。
-- 源库:创建 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; -- 让 OGG 能闪回查询,日志信息不足时用得上 GRANT FLASHBACK ANY TABLE TO goldengate; -- 授予 OGG 管理员所需权限 EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('GOLDENGATE'); -- 数据库版本支持时开启 OGG 复制开关 ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;CREATE TABLESPACE的 datafile 路径在 Windows 源端要换成 Windows 路径,比如D:\app\oracle\oradata\test1\ogg01.dbf;Linux 目标端用/u01/...。GRANT_ADMIN_PRIVILEGE是 OGG 管理员授权的关键,少了它,后面DBLOGIN可能成功,但ADD CHECKPOINTTABLE或 DDL 捕获会失败。ENABLE_GOLDENGATE_REPLICATION在支持的版本上开,SCOPE=BOTH表示内存和 spfile 都改,重启后仍生效。
FLASHBACK ANY TABLE不是所有场景都必须,但日志保留不足或需要补查时很有用。生产环境我一般把 OGG 用户和业务用户分开,表空间也独立,避免 checkpoint 表和业务表抢空间。密码里如果带特殊字符,GGSCI 的USERID ... PASSWORD ...写法要做转义,或者用 Oracle Wallet,别在参数文件里裸奔。
3.3 目标库少开附加日志,但多给 DML 权限
目标库是 Linux 上的 Oracle,不需要再开附加日志,因为 Replicat 只负责应用,不读 redo 做抽取。但目标库的 OGG 用户要有INSERT ANY TABLE、UPDATE ANY TABLE、DELETE ANY TABLE,否则 Replicat 应用时会报权限不足。建用户、表空间、管理员授权的部分和源库一致。
-- 目标库:创建 OGG 用户和表空间,路径按 Linux 实际环境改 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'); -- 目标端 Replicat 需要直接应用 DML GRANT INSERT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE TO goldengate; ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;目标库的GRANT_ADMIN_PRIVILEGE同样要执行,checkpoint 表和 Replicat 元数据都靠它。INSERT/UPDATE/DELETE ANY TABLE是 Replicat 应用 DML 的硬权限,只给RESOURCE不够。ENABLE_GOLDENGATE_REPLICATION在目标库也要开,尤其是集成模式 Replicat;如果用的是经典模式,按实际版本确认参数是否必需。
目标库如果和源库表结构完全一致,Replicat 参数可以用ASSUMETARGETDEFS,省掉 defgen 文件。表结构有差异时不能用这个参数,要先在源端生成定义文件再传过去。目标库的触发器要注意,DBOPTIONS SUPPRESSTRIGGERS可以避免 Replicat 应用时再次触发业务触发器,但是否打开要看业务逻辑,别一刀切。
4. OGG 进程配置:GLOBALS、MGR、Extract、Data Pump、Replicat 的落地参数
4.1 建子目录、写 GLOBALS、生成 checkpoint 表
源端和目标端都要进 GGSCI 建子目录。Linux 目标端用 oracle 用户执行./ggsci,Windows 源端在 OGG 安装目录下执行ggsci.exe。CREATE SUBDIRS会生成dirprm、dirrpt、dirchk、dirdat等目录,参数文件、报告、检查点、trail 都分开放。
cd /u01/app/ogg ./ggsciGGSCI> CREATE SUBDIRS GGSCI> EDIT PARAMS ./GLOBALScd到 OGG 根目录再跑ggsci,是为了让相对路径./dirdat/gs落在正确位置。CREATE SUBDIRS如果提示目录已存在,不用慌,说明之前装过或手动建过,继续下一步。EDIT PARAMS ./GLOBALS编辑的是根目录全局参数文件,源端和目标端都要写。
GGSCHEMA goldengate CHECKPOINTTABLE goldengate.ggschkpt SYSLOG NONEGGSCHEMA指定 OGG 元数据 schema,必须和数据库里建的goldengate用户一致。CHECKPOINTTABLE是检查点表名,后面ADD CHECKPOINTTABLE会用到。SYSLOG NONE表示不往系统日志写,排错主要看ggserr.log。这段写完保存退出,再DBLOGIN并生成 checkpoint 表。
GGSCI> DBLOGIN USERID goldengate, PASSWORD goldengate GGSCI> ADD CHECKPOINTTABLE goldengate.ggschkptDBLOGIN验证数据库连接和权限,成功会提示Successfully logged into database.。ADD CHECKPOINTTABLE在goldengateschema 下建检查点表,Replicat 断点续传靠它。源端和目标端都要做,目标端的 checkpoint 表在ADD REPLICAT时通过CHECKPOINTTABLE指定。密码在生产环境换成强密码,或者用USERIDALIAS走凭据存储。
4.2 MGR 参数与 Windows 服务自启
Manager 是 OGG 的总控进程,负责启动、监控、自动重启其他进程。源端和目标端都要配,端口默认 7809。下面这份 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是 Manager 监听端口,DYNAMICPORTLIST给动态协商留范围,防火墙要一起放行。AUTORESTART ER *让 Manager 自动拉起异常退出的进程,RETRIES 3、WAITMINUTES 5、RESETMINUTES 60控制重试节奏。PURGEOLDEXTRACTS清理已应用的 trail,MINKEEPHOURS 12保留 12 小时,给排错留后悔药;PURGEDDLHISTORY和PURGEMARKERHISTORY清理 DDL 历史,保留天数别设太短,否则 DDL 同步查不到标记。
Windows 源端还要把 Manager 注册成服务,否则重启机器后链路不会自启。常见做法是在 GGSCI 里执行INSTALL ADDSERVICE,把 Manager 安装为 Windows 服务,服务账户要用有 Oracle 权限的账号。
GGSCI> INSTALL ADDSERVICE GGSCI> START MANAGERINSTALL ADDSERVICE把 Manager 注册为 Windows 服务,具体服务名和启动账户在系统服务里确认。START MANAGER立即启动 Manager。如果提示服务已存在,先INSTALL DELSERVICE再装,别重复注册。服务账户必须能读到 Windows 的 Oracle Home 和 OGG 目录,否则服务启动成功但 Extract 起不来。
4.3 源端 Extract 与 Data Pump 的参数拆解
Extract 是源端核心,参数里SETENV要写 Windows 的 Oracle Home 和 SID。下面这份参数按输入整理,跨平台时把路径换成 Windows 实际值,其他参数按表调整。
EXTRACT extgsxf SETENV (ORACLE_HOME="D:\app\oracle\product\11.2.0\dbhome_1") SETENV (ORACLE_SID="test1") SETENV (NLS_LANG="AMERICAN_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 REPORT AT 0:01 FETCHOPTIONS MISSINGROW ABEND STATOPTIONS REPORT FETCHWARNLONGTRANS 1H, CHECKINTERVAL 10M DYNAMICRESOLUTION TABLE test.*;SETENV三个变量是 Extract 连接源库的关键,Windows 路径用双引号包住,避免反斜杠转义。EXTTRAIL ./dirdat/gs是本地 trail,TRANLOGOPTIONS LOGRETENTION DISABLED表示不让 OGG 管理归档保留,归档清理交给备份策略;如果归档空间紧张,这个参数要配合监控。BR BRINTERVAL 20M是有界恢复,长事务场景下减少恢复时间。CACHEMGR CACHESIZE 2GB给缓存,长事务多的时候可以调大。GETTRUNCATES抓 truncate,目标端也要对应开。DDL INCLUDE MAPPED只同步映射对象的 DDL,DDLOPTIONS REPORT把 DDL 处理结果写报告。TABLE test.*是 schema 级映射,实际表名按业务替换。
添加 Extract 和本地 trail 的命令如下:
GGSCI> ADD EXTRACT extgsxf, TRANLOG, BEGIN NOW GGSCI> ADD EXTTRAIL ./dirdat/gs, EXTRACT extgsxf, MEGABYTES 1024 GGSCI> START EXTRACT extgsxfTRANLOG, BEGIN NOW表示从当前时间开始读 redo,初始化场景如果要用 SCN 对齐,可以改成BEGIN SCN。ADD EXTTRAIL把本地 trail 绑定到 Extract,MEGABYTES 1024是单个 trail 文件大小。START EXTRACT启动抽取,启动后看INFO EXTRACT extgsxf和ggserr.log,别只看命令返回。
Data Pump 参数如下,RMTHOST写 Linux 目标端 IP,MGRPORT写目标端 Manager 端口,RMTTRAIL是目标端相对路径。
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.*;PASSTHRU表示不做列映射,直接透传;DYNAMICRESOLUTION让表名在运行时解析;RMTHOST和MGRPORT必须与目标端 MGR 配置一致;RMTTRAIL是目标端 OGG 根目录下的路径,目标端要能写。TABLE test.*和 Extract 保持一致,少写一个 schema,Data Pump 会过滤掉对应表,Replicat 端看起来就像“数据没过去”。
添加 Data Pump 和远端 trail:
GGSCI> ADD EXTRACT dpgskf, EXTTRAILSOURCE ./dirdat/gs GGSCI> ADD RMTTRAIL ./dirdat/gs, EXTRACT dpgskf, MEGABYTES 1024 GGSCI> START EXTRACT dpgskfEXTTRAILSOURCE指定 Data Pump 读哪个本地 trail,ADD RMTTRAIL在目标端分配远端 trail,MEGABYTES 1024控制文件大小。启动顺序上,先目标端 MGR,再源端 MGR,再 Extract,最后 Data Pump;停的时候反过来,先停 Data Pump,再停 Extract,减少 trail 残缺。
4.4 目标端 Replicat 与表级 trandata
Replicat 在 Linux 目标端应用数据,SETENV写 Linux 的 Oracle Home 和 SID。参数里ASSUMETARGETDEFS表示源目标表结构一致,DBOPTIONS SUPPRESSTRIGGERS避免触发器重复执行,GROUPTRANSOPS 1000按 1000 个操作组批量应用。
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' & INCLUDE MAPPED OBJTYPE 'INDEX' DDLOPTIONS REPORT REPORTROLLOVER AT 6:00 REPORTCOUNT EVERY 30 MINUTES, RATE REPORT AT 0:01 STATOPTIONS RESETREPORTSTATS NUMFILES 150 GETTRUNCATES DYNAMICRESOLUTION ALLOWNOOPUPDATES GROUPTRANSOPS 1000 MAP test.*, TARGET test.*;ASSUMETARGETDEFS依赖源目标表结构一致,有差异时改用 defgen。DEFERREFCONST延迟引用约束检查,减少应用顺序导致的约束报错;SUPPRESSTRIGGERS抑制触发器,业务有依赖触发器逻辑时慎用。REPERROR (DEFAULT, ABEND)表示默认错误直接终止,生产建议先 ABEND,别让 Replicat 带错跑。MAP test.*, TARGET test.*是 schema 级映射,表名大小写不一致时在这里显式写映射。GETTRUNCATES与源端 Extract 对应,目标端也要开。
添加 Replicat 并指定 checkpoint 表:
GGSCI> ADD REPLICAT repgs1, EXTTRAIL ./dirdat/gs, CHECKPOINTTABLE goldengate.ggschkpt GGSCI> START REPLICAT repgs1EXTTRAIL是目标端远端 trail 路径,CHECKPOINTTABLE必须和GLOBALS里的表一致。START REPLICAT启动应用,初始化场景用AFTERCSN指定起始 SCN。启动后INFO REPLICAT repgs1看状态,STATS REPLICAT repgs1看应用统计。
表级附加日志在源端加,只对有主键或唯一索引的表直接执行;没有主键的表要指定列作为主键,否则 Replicat 可能重复应用。
GGSCI> DBLOGIN USERID goldengate, PASSWORD goldengate GGSCI> ADD TRANDATA test.t1 GGSCI> INFO TRANDATA test.t1ADD TRANDATA给表加附加日志,INFO TRANDATA确认是否启用。表没有主键时,ADD TRANDATA test.t1, COLS (object_id)指定唯一列。DDL 同步还需要源端执行marker_setup、ddl_setup、role_setup、ddl_enable,并授予GGS_GGSUSER_ROLE,顺序不能乱。
4.5 初始化数据:expdp/impdp 的 SCN 对齐和启动顺序
初始化数据最稳的方式是源端取一致性 SCN,用 expdp 的FLASHBACK_SCN导出,目标端导入后用 Replicat 从同一个 SCN 开始应用。先查源库当前 SCN:
SELECT TO_CHAR(CURRENT_SCN) FROM V$DATABASE;查出来的 SCN 记下来,比如 1085057。导出时用FLASHBACK_SCN固定一致点,避免导出过程中数据变化导致目标端和 trail 起点错位。
expdp test/test TABLES=test.t1 DUMPFILE=t1.dmp FLASHBACK_SCN=1085057 scp t1.dmp oracle@10.0.100.141:/home/oracle/ impdp test/test DUMPFILE=t1.dmpTABLES=test.t1指定导出表,FLASHBACK_SCN对齐 OGG 起点,DUMPFILE是 dump 文件名。scp把 dump 传到 Linux 目标端,路径按实际改;impdp在目标端导入。导入前目标表可以不存在,impdp 会建;如果已存在,注意重复数据。初始化期间源端 Extract 和 Data Pump 要先开,保证 SCN 之后的变更都进 trail。
目标端启动 Replicat 时指定AFTERCSN:
GGSCI> START REPLICAT repgs1, AFTERCSN 1085057AFTERCSN表示从该 SCN
本文还有配套的精品资源,点击获取