4. 源端数据库准备与配置
Oracle GoldenGate 的抽取进程(Extract)并不直接读取业务表,而是读取 Oracle 的在线重做日志与归档日志,从中解析出 DML 与 DDL 变更。因此,源端数据库能否被 GoldenGate 正确抽取,取决于四件事是否同时成立:日志可被持久保留、日志中带有足够的行级信息、数据库参数允许日志被读取、GoldenGate 用户具备访问日志与字典的权限。本章围绕这四项展开,并给出可直接执行的配置与验证方法。
一、开启归档日志:让变更“留得住”
在线重做日志是循环复用的,一旦被覆盖,其中的变更就永久丢失。归档模式(ARCHIVELOG)会在日志切换时把在线日志复制为归档文件,使 GoldenGate 可以在抽取滞后时仍能回溯读取。检查当前模式:
SQL> ARCHIVE LOG LIST;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
若为 No Archive Mode,需以 MOUNT 状态启动并切换:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
SQL> ARCHIVE LOG LIST; -- 应显示 Archive Mode / Enabled
切换后必须做一次完整备份,否则归档链没有起点。同时要评估归档空间:假设业务高峰产生 20 GB/h 重做量,GoldenGate 抽取延迟容忍 4 小时,则归档保留窗口至少应覆盖 4 小时以上并留出余量,即预留 100 GB 以上空间,并配置 RMAN 的归档删除策略,避免因空间耗尽导致数据库挂起。
二、补充日志:让日志“看得清”
默认情况下,Oracle 只在重做日志中记录被修改列的前像(before image),而 GoldenGate 需要所有列的前像来构造 WHERE 条件、定位目标行。补充日志(Supplemental Logging)就是为此增加记录内容。它分三个层级,必须逐级开启:
- 数据库级最小补充日志:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;,这是所有行级补充日志的前提。 - 数据库级主键补充日志:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;,保证 UPDATE/DELETE 时记录主键列。 - 表级全列补充日志:对无主键表或需要完整前像的表,执行
ALTER TABLE scott.emp ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;。
验证是否生效:
SQL> SELECT supplemental_log_data_min,
2 supplemental_log_data_pk,
3 supplemental_log_data_all
4 FROM v$database;
SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_ALL
YES YES NO
若目标端需要同步无主键表,建议对该表单独加 ALL COLUMNS,否则 GoldenGate 会因缺少唯一行标识而报错或产生重复更新。
三、强制日志:让所有变更“都进日志”
在 RAC 或 Data Guard 环境中,某些操作(如直接路径插入、并行 DML)可能绕过重做日志。强制日志(FORCE LOGGING)确保任何数据变更都被记录,是 GoldenGate 抽取完整性的保障:
SQL> ALTER DATABASE FORCE LOGGING;
SQL> SELECT force_logging FROM v$database; -- 返回 YES
该操作会带来一定日志量增长,属于必要代价。生产库建议在业务低峰期执行。
四、数据库参数调整
GoldenGate 抽取依赖若干初始化参数,需确认或调整:
| 参数 | 建议值 | 作用 |
|---|---|---|
| ENABLE_GOLDENGATE_SUPPORT | TRUE | 启用 GoldenGate 集成抽取所需内部支持 |
| STREAMS_POOL_SIZE | ≥ 1G(集成抽取) | 为 LogMiner 与集成抽取提供内存 |
| UNDO_RETENTION | ≥ 抽取延迟窗口 | 保证长事务前像不被过早覆盖 |
| COMPATIBLE | ≥ 11.2.0.4 | 满足 GoldenGate 版本要求 |
例如:ALTER SYSTEM SET streams_pool_size=2G SCOPE=SPFILE;,重启后生效。UNDO_RETENTION 建议设为 10800 秒(3 小时)以上,与归档保留窗口匹配。
五、用户权限与 TNS 配置
GoldenGate 需要独立的数据库用户,并授予最小必要权限。经典抽取用户示例:
SQL> CREATE USER oggadm IDENTIFIED BY "Ogg#2024";
SQL> GRANT CREATE SESSION, ALTER SESSION TO oggadm;
SQL> GRANT SELECT ANY DICTIONARY TO oggadm;
SQL> GRANT SELECT ANY TABLE TO oggadm;
SQL> GRANT FLASHBACK ANY TABLE TO oggadm;
SQL> GRANT EXECUTE ON DBMS_FLASHBACK TO oggadm;
SQL> GRANT LOGMINING TO oggadm; -- 12c 及以上
若使用集成抽取(Integrated Extract),还需 GRANT DBA TO oggadm; 或授予 DBMS_GOLDENGATE_ADM 相关权限。TNS 方面,源端需在 tnsnames.ora 中配置可被 GoldenGate 使用的服务名,并确保监听正常:
OGG_SRC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.21)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
用 tnsping OGG_SRC 与 sqlplus oggadm/密码@OGG_SRC 验证连通性。至此,源端准备完成,可用下图快速核对各环节的依赖关系与验证点。