准备数据库连接、系统和参数设置

了解如何配置 Oracle GoldenGate for Oracle 的数据库连接、系统和参数设置。

启用 GoldenGate 复制和归档模式

步骤 1:启用 GoldenGate 复制

必须为 Oracle AI Database 明确启用支持 Oracle GoldenGate Extract and Replicat 所需的数据库服务。

要启用 Oracle GoldenGate 复制,请设置以下数据库初始化参数。如果在任何节点上使用 Oracle GoldenGate,则 Oracle RAC 中的所有实例都必须将此值设置为 TRUE。

ALTER SYSTEM SET enable_goldengate_replication = true SCOPTE=both;

有关此参数的详细信息,请参阅初始化参数。

步骤 2:启用归档模式

Oracle 数据库必须处于 ARCHIVELOG 模式,以便 Extract 可以处理日志文件。要打开 ARCHIVELOG 模式,请按照 Changing the Database Archiving Mode 中提供的步骤操作。

设置闪回查询

要了解 Oracle GoldenGate 提取的数据,请参阅对 Oracle 数据类型和对象的支持详细信息。

默认情况下,Oracle GoldenGate 使用闪回查询从还原(回退)表空间中提取值。这样,Oracle GoldenGate 可以重建截至特定时间或 SCN 的读一致性行映像以匹配重做记录。

要获得最佳提取结果,请按如下方式配置源数据库:

  1. 通过按如下方式设置 Oracle 初始化参数 UNDO_MANAGEMENT 和 UNDO_RETENTION 来设置足够多的重做保留(以秒为单位)。

    UNDO_MANAGEMENT=AUTO
    
    UNDO_RETENTION=86400
    
    UNDO_RETENTION can be adjusted upward in high-volume environments.
  2. 使用以下公式计算还原表空间中所需的空间。

    *undo_space* = UNDO_RETENTION * *UPS* + *overhead*

    其中:

    • undo_space 是还原块的数量。

    • UNDO_RETENTION 是 UNDO_RETENTION 参数的值(以秒为单位)。

    • UPS 是每秒的还原块数。

    • 开销是元数据(事务处理表等)的最小开销。

    使用系统视图 V$UNDOSTAT 可估计 UPS 和开销。

  3. 对于包含 LOBs 的表,请执行以下操作之一:

    • 将 LOB 存储子句设置为 RETENTION。这是 UNDO_MANAGEMENT 设置为 AUTO 时创建的表的默认值。

    • 如果使用 PCTVERSION 而不是 RETENTION,则将 PCTVERSION 设置为初始值 25。您可以根据使用 STATS EXTRACT 命令报告的提取统计信息对其进行调整。如果这些统计信息中 STAT_OPER_ROWFETCH CURRENTBYROWID 或 STAT_OPER_ROWFETCH_CURRENTBYKEY 字段的值较高,则以 10 为增量增加 PCTVERSION,直到统计信息显示低值。

Oracle GoldenGate 提供了以下参数来管理提取。

参数或命令 说明
带有 REPORTFETCH 选项的 STATS EXTRACT 命令 按需显示提取统计信息。
带有 REPORTFETCH 选项的 STATOPTIONS 参数 设置 STATS EXTRACT 命令,以便始终显示提取统计信息。
MAXFETCHSTATEMENTS 参数 控制提取在源数据库中以及 SQLEXEC 操作中维护的已准备查询的打开游标数。
MAXFETCHSTATEMENTS 参数 控制提取的默认提取行为:提取是执行闪回查询还是从表中获取当前图像。
带有 USELATESTVERSION 或 NOUSELATESTVERSION 选项的 FETCHOPTIONS 参数 处理提取闪回查询的失败,例如还原保留期已过期或表结构已更改。提取可以从表中提取当前图像或忽略失败。
REPFETCHEDCOLOPTIONS 参数 当 Replicat 处理包含提取的数据或列缺失条件的线索记录时,控制该响应。

处理其他数据库属性

有些数据库属性可能会影响 Oracle GoldenGate 以及用于解析或处理某些条件的参数。

下表列出了数据库属性和关联的关注/解决方法。

数据库属性 关注/解决
包含间隔分区的表 要支持具有间隔分区的表,请确保 WILDCARDRESOLVE 参数保持其默认值为 DYNAMIC。
包含虚拟列的表

不会记录虚拟列,Oracle 不允许对虚拟列执行 DML 操作。但是,您可以通过执行以下操作来捕获此数据并将其映射到非虚拟列的目标列:

在 Extract TABLE 语句中包括该表,并使用 TABLE 的 FETCHCOLS 选项从数据库中的虚拟列中提取值。

在 Replicat MAP 语句中,将源虚拟列映射到非虚拟目标列。

具有固有可更新视图的表 要复制到固有的可更新视图,请在映射关联的源表和目标表的同一 MAP 语句中使用 KEYCOLS 子句,在可更新视图中的唯一列上定义关键字。
不同位置的重做日志或归档 TRANLOGOPTIONS 参数包含用于处理重做日志或归档文件存储在与数据库默认值不同的位置或者存储在运行 Extract 的平台不同的平台上的环境的选项。
TRUNCATE 操作

要复制 TRUNCATE 操作,请选择以下两个选项之一:

  • 通过 GETTRUNCATES 参数提供的独立 TRUNCATE 支持将复制 TRUNCATE TABLE,但不会复制其他 TRUNCATE 选项。仅在使用 Oracle GoldenGate DDL 支持时使用。

  • 完整的 DDL 支持将复制 TRUNCATE TABLE、ALTER TABLE TRUNCATE PARTITION 和其他 DDL。

序列

要为序列复制 DDL (CREATE,ALTER,DROP,RENAME),请使用 Oracle GoldenGate DDL 支持。

要仅复制序列值,请使用提取参数文件中的 SEQUENCE 参数。这不需要 Oracle GoldenGate DDL 支持环境。

配置多租户容器数据库

Oracle GoldenGate with Oracle AI Database 支持为源和目标实施可插入数据库 (pluggable database,PDB)。提取已注册到特定 PDB,该 PDB 称为按 PDB 提取。

注:不建议使用 c##ggadmin 用户进行根级别访问,但下游提取配置除外。在每个 PDB 级别使用“提取”,而不是在根级别使用“提取”。

下图显示了多租户容器数据库配置中不同方法的配置:

下面是 pdb_extract_feedbk.png 的说明

直接从 PDB 添加提取会从隔离的 PDB 捕获,并在 PDB 级别管理所有权和责任。

使用基于 PDB 的提取,可以以本地 PDB 用户(例如 ggadmin)身份进行连接,然后将此提取注册到数据库。由于您已以 PDB 用户身份登录,因此不需要额外添加 container 子句。同样,也不需要使用 SOURCECATALOG 或三部分命名约定。

要设置提取,请参阅添加提取。

多租户容器数据库配置的注意事项

使用 Oracle GoldenGate 为数据复制配置多租户容器数据库时,请考虑以下准则:

请参阅添加数据库连接以添加 Oracle GoldenGate 身份证明中的多租户容器数据库用户。请参见 Grant User Privileges for Oracle Database 21c and Lower 或 Grant User Privileges for Oracle AI Database 26ai and Higher ,具体取决于需要配置的 Oracle AI Database 安装。

多租户容器数据库的刷新顺序

如果 sequence.sql 脚本将数据库过程应用于数据库的 GoldenGate 管理方案,则只能在 Oracle GoldenGate 中使用 FLUSH SEQUENCE 命令。

在初始同步或重新同步期间,首次启动提取后立即使用 FLUSH SEQUENCE 命令。此命令将更新 Oracle 序号,以在提取开始捕获事务处理数据时有初始重做记录可用。通常,在当前高速缓存耗尽后才会生成重做。刷新为复制提供初始起点,用于与目标系统上的正确序号值同步。此后,提取可以使用与序号值的常规高速缓存保留关联的重做。 1。FLUSH SEQUENCE 使用以下 Oracle 过程:

 | Database | Procedure | User and Privileges |
 | --- | --- | --- |
 | Source | `updateSequence` | Grants `EXECUTE` to the owner of the Oracle GoldenGate DDL objects, or other selected user if not using DDL support. |
 | Target | `replicateSequence` | Grants `EXECUTE` to the Oracle GoldenGate Replicat user. |

 {: summary="This table lists the Oracle procedures used by FLUSH SEQUENCE. It gives the database, procedure, and user and privileges." }

The `sequence.sql` script installs these procedures. Normally, this script is run as part of the Oracle GoldenGate installation process, but make certain that was done before using `FLUSH SEQUENCE`. If `sequence.sql` was not run, the flush fails and an error message similar to the following is generated:

<pre class="copy"><code>Cannot flush sequence {0}. Refer to the Oracle GoldenGate for Oracle documentation for instructions on how to set up and run the sequence.sql script. Error {1}.</code></pre>
  1. 在使用 FLUSH SEQUENCE 之前,使用 DBLOGIN 命令连接到数据库。

必须在 PDB 级别发出 FLUSH SEQUENCE,才能在需要进行序列复制的每个 PDB 中创建 Oracle GoldenGate 用户。使用 DBLOGIN 登录到该 PDB,然后运行 FLUSH SEQUENCE 命令。

建议在每个 PDB 中使用相同的方案,以便它可以与 GGSCHEMA GLOBALS 参数文件一起使用。

在以下示例中,环境设置用于 Oracle 21c 到 Oracle 21c 复制,以及使用 Oracle GoldenGate 21c (21.3.0) 的集成提取和并行复制。

下表列出了源和目标 CDB、PDB 的名称及其用于连接到数据库的相应用户身份证明。

源 CDB 目标 CDB
NORTH SOUTH
PDB 名称:DBEAST PDB 名称:DBWEST

公用用户:c##ggadmin

序列的 PDB 用户:ggate

PDB 用户:ggadmin
sqlplus system/manager
ALTER SESSION SESSION SET CONTAINER=CERTMISSN;
CREATE USER ggate IDENTIFIED BY *password* DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP QUOTA UNLIMITED ON USERS CONTAINER=CURRENT;

运行 @sequence.sql

sqlplus system/manager
ALTER SESSION SET CONTAINER=DBEAST;
@sequence.sql

出现提示时,输入以下内容:

GGADMIN

运行 FLUSH SEQUENCE 命令:

DBLOGIN USERIDALIAS ggeast DOMAIN OracleGoldenGate
FLUSH SEQUENCE DBEAST.HR.*

目标 Oracle GoldenGate 配置:

sqlplus system/manager
ALTER SESSION SET CONTAINER =PDBWEST;
@sequence.sql

出现提示时,输入 PDB 用户名 ggadmin。

这也适用于 @sequence.sql 脚本,您还必须在要从中捕获的每个 PDB 上运行该脚本。