事务处理日志设置和要求

Oracle GoldenGate 依靠重做日志来捕获复制源事务处理所需的数据。必须先正确配置源系统上的 Oracle 重做日志,然后才能启动 Oracle GoldenGate 处理。

本节介绍适用于 Oracle GoldenGate 的以下日志记录级别。您使用的日志记录级别取决于您使用的 Oracle GoldenGate 功能。

注:由于此必需的日志记录,重做卷会增加。您可以等到准备好启动 Oracle GoldenGate 处理以启用日志记录。

此表显示了不同日志记录属性的 Oracle GoldenGate 用例。

“日志记录”选项 命令名 功能 用例
强制日志记录模式 ALTER DATABASE FORCE LOGGING; 强制记录所有事务处理和加载。 强烈建议所有 Oracle GoldenGate 使用场景。FORCE LOGGING 覆盖任何表级 NOLOGGING 设置。

数据库级别的最低补充日志记录

请参阅启用子集数据库复制日志。

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; 允许最小补充日志记录将行链信息添加到重做日志。 所有 Oracle GoldenGate 使用场景都需要
方案级别补充日志记录 [ADD SCHEMATRANDATA](/pls/topic/lookup?ctx=en/database/goldengate/core/26/coredoc&id=GCLIR-GUID-5DA7C3DC-5D87-4A8B-AD23-6EF587A5CF41)

对方案中所有表的唯一键和外键启用无条件补充日志记录和条件补充日志记录。所有这些关键字一起称为调度列。

此设置还可确保在此方案中创建的任何新对象都将具有适当的补充日志记录。

为方案中的所有当前表和将来表启用日志记录。如果主键、唯一键和外键列在源和目标上都不相同,请使用 ALLCOLS。
对所有支持的列使用无条件日志记录的模式级补充日志记录。(有关不支持的列类型,请参见 Enable Schema-level Supplemental Logging 。) ADD SCHEMATRANDATA,带有 ALLCOLS 选项

为方案中的所有表启用对表中的所有列的无条件补充日志记录。

此设置还可确保在此方案中创建的任何新对象都将具有适当的补充日志记录。

用于在尝试执行更新或删除时检查所有列值(而不仅仅是更改的列)的双向和主动 - 主动配置。这需要更多的资源,但可以实现最高级别的实时数据验证,从而进行冲突检测。

如果将要使用 HANDLECOLLISIONS 参数进行初始装入,则也应使用此方法。

方案级补充日志记录,最小设置 ADD SCHEMATRANDATA,带有 NOSCHEDULINGCOLS 选项

启用对方案中所有表的主键和所有有效唯一索引的无条件补充日志记录。

此设置还可确保在此方案中创建的任何新对象都将具有适当的补充日志记录。

仅用于非集成复制。这是所需的最小方案级别日志记录。

表级补充日志记录,内置集成复制支持

请参阅启用表级补充日志记录

ADD TRANDATA 对表的唯一键和外键启用无条件补充日志记录和条件补充日志记录。所有这些关键字一起称为调度列。 除非使用方案级补充日志记录,否则所有 Oracle GoldenGate 用例都需要此设置。如果主键、唯一键和外键列在源和目标上都不相同,请使用 ALLCOLS。
表级补充日志记录,对所有支持的列进行无条件日志记录。(有关不支持的列类型,请参见 Enable Table-level Supplemental Logging 。) ADD TRANDATA,带有 ALLCOLS 选项 启用对表的所有列的无条件补充日志记录。

用于在尝试执行更新或删除时检查所有列值(而不仅仅是更改的列)的双向和主动 - 主动配置。这需要更多的资源,但可以实现最高级别的实时数据验证,从而进行冲突检测。

也可以在源和目标主键、唯一键和外键不相同或源和目标之间不断变化时使用。

表级补充日志记录,最少设置 ADD TRANDATA,带有 NOSCHEDULINGCOLS 选项 启用对表的主键和所有有效唯一索引的无条件补充日志记录。 用于非集成复制和非并行复制。这是所需的最低表级日志记录。
JSON Relational Duality Views 和 JSON Collection Tables 的表级补充日志记录。 ADD TRANDATA(含 Duality View name 和 Collection Table name) 为指定的双性视图和集合表启用补充日志记录。 有关准则,请参阅为 JSON Relational Duality Views 和 JSON Collection Tables 启用补充日志记录。另请参阅支持 JSON-Relational Duality Views 和 JSON Collection Tables 的详细信息以了解更多信息。

启用子集数据库复制日志记录

Oracle 强烈建议将 Oracle 源数据库置于强制日志记录模式。强制日志记录模式会强制在日志中记录所有事务和负载,覆盖与之冲突的用户或存储设置。这可确保不会丢失提取配置中的源数据。

LogMiner 中提供了名为子集数据库复制的细粒度数据库补充日志记录模式,这是所有 Oracle GoldenGate 和 XStream 客户机的基本建议模式。它取代了以前使用的最小补充日志记录模式。

子集数据库复制日志记录当前在 CDB$ROOT(以及所有用户 PDB 继承该日志记录)处启用。

注:仅当复制表子集时,才建议不要使用数据库级主键 (PK) 和唯一索引 (UI) 日志记录。您可以将其与 Live Standby 一起使用,或者如果 Oracle GoldenGate 将复制所有表,例如减少迁移或升级的停机时间。

执行以下步骤以验证并根据需要启用子集数据库复制日志记录和强制日志记录。

  1. 以具有 ALTER SYSTEM 权限的用户身份登录 SQL*Plus。

  2. 发出以下命令以确定数据库是否处于补充日志记录模式和强制日志记录模式。如果两个查询的结果均为 YES,则数据库满足 Oracle GoldenGate 要求。

    SELECT SUPPLEMENTAL_LOG_DATA_MIN, FORCE_LOGGING FROM V$DATABASE;
  3. 如果任一或两个属性的结果均为 NO,请继续执行以下步骤以根据需要启用它们:

    ALTER PLUGGABLE DATABASE *pdbname* ADD SUPPLEMENTAL LOG DATA SUBSET DATABASE REPLICATION;
    ALTER DATABASE FORCE LOGGING;
  4. 发出以下命令以验证这些属性现在是否已启用。

    SELECT SUPPLEMENTAL_LOG_DATA_MIN, FORCE_LOGGING FROM V$DATABASE;

    对于这两个属性,查询的输出必须为 YES。

  5. 切换日志文件。

    ALTER SYSTEM SWITCH LOGFILE;

启用模式级别补充日志日志记录

Oracle GoldenGate 支持方案级别的补充日志记录。使用 Oracle GoldenGate DDL 复制功能时,Oracle 源数据库和目标数据库需要方案级日志记录,或者在源数据库上(如果可以对要复制的表执行 DDL)。在所有其他用例中,它是可选的,但必须改用表级日志记录(请参见 Enable Table-level Supplemental Logging )。

默认情况下,方案级日志记录会自动启用对方案中所有表的唯一键和外键的主键和有条件补充日志记录的无条件补充日志记录。通过选项,您可以根据需要更改日志记录。

注:Oracle 强烈建议使用方案级日志记录而不是表级日志记录,因为它可确保在满足通配符规范时捕获添加到方案的任何新表。此外,还建议使用此方法,因为对键列的任何更改也会自动反映在补充日志数据中。例如,如果密钥发生更改,则无需发出 ADD TRANDATA。

在源系统上执行以下步骤以启用方案级别的补充日志记录。

  1. 在源系统上启动命令行。

  2. 发出 DBLOGIN 命令,其中包含身份证明存储中有权启用方案级补充日志记录的用户的别名。

    DBLOGIN USERIDALIAS *alias*

    有关 USERIDALIAS 和其他选项的更多信息,请参见 USERIDALIAS in Parameters and Functions Reference for Oracle GoldenGate 。

  3. 在多租户数据库上使用 ADD SCHEMATRANDATA 或 ADD TRANDATA 时,可以直接登录到 PDB 并执行命令。或者,如果在根级别登录(使用 C## 用户),则必须包括 PDB。为要使用 Oracle GoldenGate 捕获数据的每个方案发出 ADD SCHEMATRANDATA 命令。

    ADD SCHEMATRANDATA pdb.schema [ALLCOLS | NOSCHEDULINGCOLS]

    其中:

    • 如果没有选项,ADD SCHEMATRANDATA 方案将在源系统上启用主键的无条件补充日志记录,并对给定方案中所有当前表和未来表的所有唯一键和外键进行条件补充日志记录。无条件日志记录强制将主键值写入日志,无论该键在当前操作中是否已更改。如果在当前操作中至少更改了外键或唯一键之一,则条件日志记录将记录外键或唯一键的所有列值。默认为支持非集成复制的可选选项,但支持集成复制是必需的,因为主键、唯一键和外键必须全部可供入站服务器用来计算相关项。

    • ALLCOLS 可用于对表的所有列启用无条件补充日志记录,并应用于给定方案中的所有当前表和将来表。用于在源表和目标表具有不同的调度列时支持集成的复制。(调度列是主键、唯一键和外键。)

    • NOSCHEDULINGCOLS 仅记录方案中的现有表以及以后添加的新表的主键值和所有有效唯一索引的值。这是方案级别日志记录的最低必需级别,仅对处于非集成模式的复制有效。

    在以下示例中,该命令为 hr 方案启用缺省补充日志记录。

    ADD SCHEMATRANDATA pdbeast.hr ALLCOLS

    在以下示例中,该命令仅为 HR 方案的主键和有效的唯一索引启用补充日志记录。

    ADD SCHEMATRANDATA pdbeast.hr NOSCHEDULINGCOLS

启用表的级别补充日志事件记录

在以下情况下在源系统上启用表级补充日志记录:

在源系统上执行以下步骤以启用表级补充日志记录或使用命令的可选功能。

  1. 在源系统上运行命令行。

  2. 使用身份证明存储中有权启用表级补充日志记录的用户的别名发出 DBLOGIN 命令。

    DBLOGIN USERIDALIAS *alias*

    有关 DBLOGIN 和其他选项的更多信息,请参见 Parameters and Functions Reference for Oracle GoldenGate 中的 USERIDALIAS 。

  3. 发出 ADD TRANDATA 命令。

    ADD TRANDATA [*PDB*.]*schema.**table* [, COLS (*columns)*] [, NOKEY] [, ALLCOLS | NOSCHEDULINGCOLS]

    其中:

    • PDB 是根容器或可插入数据库的名称(如果该表位于多租户容器数据库中)。

    • schema 是包含表的源方案。

    • table 是表的名称。有关指定对象名称的说明,请参见 Specifying Object Names in Oracle GoldenGate Input 。

    • 不带其他选项的 ADD TRANDATA 自动启用对表唯一键和外键的主键和有条件补充日志记录的无条件补充日志记录。无条件日志记录强制将主键值写入日志,无论该键在当前操作中是否已更改。如果在当前操作中至少更改了外键或唯一键之一,则条件日志记录将记录外键或唯一键的所有列值。默认为支持非集成复制(另请参见 NOSCHEDULINGCOLS)的可选选项,但支持集成复制是必需的,因为主键、唯一键和外键都必须可供入站服务器用来计算相关项。

    • ALLCOLS 允许对表的所有列进行无条件补充日志记录。用于在源表和目标表具有不同的调度列时支持集成的复制。(调度列是主键、唯一键和外键。)

    • NOSCHEDULINGCOLS 仅对非集成模式下的复制有效。它发出带有 ADD SUPPLEMENTAL LOG DATA ALWAYS 子句的 ALTER TABLE 命令,该子句适用于为表定义的唯一约束条件类型,或者适用于没有唯一约束条件的所有列。不使用方案级日志记录时,此命令可满足 Oracle GoldenGate 的基本表级日志记录要求。有关 Oracle GoldenGate 如何选择键或索引,请参阅确保源表和目标表中的行唯一性。

    • COLS 列记录 KEYCOLS 子句或过滤和操作所需的非键列。括号是必需的。除非还存在 NOKEY 选项,否则这些列将记录在主键之外。

    • NOKEY 阻止记录主键或唯一键。需要 TABLE 和 MAP 参数中的 KEYCOLS 子句和 ADD TRANDATA 命令中的 COLS 子句来记录备用 KEYCOLS 列。

  4. 如果将 ADD TRANDATA 与 COLS 选项一起使用,请为目标上的这些列创建唯一索引以优化行检索。如果要将这些列记录为 KEYCOLS 子句的替代键,请在配置 Oracle GoldenGate 进程时,注意将 KEYCOLS 子句添加到 TABLE 和 MAP 语句中。

为 JSON Relational Duality Views 和 JSON Collection Tables 启用补充日志记录

复制 JSON Relational Duality Views 和 JSON Collection Tables 之前,需要在 Oracle GoldenGate 中设置补充日志记录。默认情况下,不会为 JSON Relational Duality Views 和 JSON Collection Tables 启用补充日志记录。为 Duality Views 和收集表启用补充日志记录时,可以使用以下准则:

有关设置表级补充日志记录的步骤,请参见 Enable Table-level Supplemental Logging 。

删除表级别补充日志记录

如果 Oracle GoldenGate 不再需要捕获表,并且该表的 TABLE 参数已从提取参数文件中删除,或者使用 TABLEEXCLUDE 从通配符语句中排除该表,则可以从表中删除补充日志记录。

注:如果提取解析的表未启用补充日志记录,它将根据 DML 操作的类型异常终止。

使用 DELETE TRANDATA 删除补充日志记录会将表的 "Replicat Identity"(复制身份)级别设置为 NOTHING。可以使用“管理服务,配置”页中的微服务体系结构 Web 界面在为源数据库创建的身份证明下禁用补充日志记录,也可以使用 DELETE TRANDATA 命令发出补充日志记录。

下面是发出 DELETE TRANDATA 的语法。

DBLOGIN USERIDALIAS alias_name
DELETE TRANDATA schema.tablename

检查补充日志记录的级别:

INFO TRANDATA schema.tablename