为 CDC 配置可插拔 Oracle 数据库

如需将变更数据捕获 (CDC) 更新从可插入式 Oracle 数据库流式传输到支持的目标(例如 BigQuery 或 Cloud Storage),您可以将数据库连接到 Datastream。每个可插入数据库都在多租户容器数据库 (CDB) 中运行。如需准备来源,您需要在 CDB 上配置 ARCHIVELOG 模式和日志保留,并在两个容器中配置补充日志记录和用户权限。

您可以将可插入式 Oracle 数据库配置为使用二进制日志读取器(预览版)或 LogMiner API CDC 方法。如需详细了解这些方法,请参阅使用 Oracle 数据库重做日志文件。

为二进制日志读取器配置可插入式 Oracle 数据库

如需配置可插入式 Oracle 数据库以与二进制日志读取器 CDC 方法搭配使用,请执行以下步骤:

  1. 选择以下任一方法来访问日志文件:

    • 存储空间自动管理 (ASM):如果您选择此选项,则需要创建专用 ASM 连接,并在创建连接配置文件时提供其详细信息。用于 ASM 连接的用户账号必须具有 SYSASM 权限。

      如需创建具有 SYSASM 权限的新 ASM 用户,请运行以下命令:

      CREATE USER ASM_USER_NAME IDENTIFIED BY ASM_PASSWORD;
      GRANT SYSASM TO ASM_USER_NAME;

      替换以下内容:

      • ASM_USER_NAME:ASM 用户的名称。
      • ASM_PASSWORD:ASM 用户的密码。
    • 数据库目录:如果您选择此选项,则需要创建指向重做日志文件和归档日志文件的数据库目录对象,并向数据库用户授予对这些目录的 READ 访问权限:

    CREATE DIRECTORY DIRECTORY_NAME_1 as 'ONLINE_REDO_LOGS_PATH';
    CREATE DIRECTORY DIRECTORY_NAME_2 as 'ARCHIVED_REDO_LOGS_PATH';
    GRANT READ ON DIRECTORY DIRECTORY_NAME_1 to USER_NAME;
    GRANT READ ON DIRECTORY DIRECTORY_NAME_2 to USER_NAME;

    替换以下内容:

    • DIRECTORY_NAME_1:在线重做日志文件的目录名称。
    • DIRECTORY_NAME_2:归档重做日志文件的目录名称。
    • ONLINE_REDO_LOGS_PATH:存储联机重做日志文件的目录的路径。
    • ARCHIVED_REDO_LOGS_PATH:要存储归档日志文件的目录的路径。
    • USER_NAME:您要向其授予 READ 访问权限的数据库用户的名称。

    如果您选择二进制日志读取器方法并使用数据库目录,则需要在创建数据流时提供重做日志和归档日志目录名称。

  2. 验证数据库正以 ARCHIVELOG 模式运行。

    为此,请登录 Oracle 数据库,然后在 SQL 提示符处运行以下命令:

    SELECT LOG_MODE FROM V$DATABASE;
    
    1. 如果结果为 ARCHIVELOG,则继续执行下一步。
    2. 如果结果为 NOARCHIVELOG,则您需要为数据库启用 ARCHIVELOG 模式。
    3. 以 SYSDBA 身份登录后运行以下命令:

      SHUTDOWN IMMEDIATE;
      STARTUP MOUNT;
      ALTER DATABASE ARCHIVELOG;
      ALTER DATABASE OPEN;
    4. 归档的日志文件会占用磁盘空间,因此您需要为数据库配置 DB_RECOVERY_FILE_DEST_SIZE 参数。使用此参数指定目标数据库恢复文件要使用的总空间硬性限制(以字节为单位)。通过设置此参数,您可以管理以下两者之间的权衡:保护数据库免于耗尽磁盘空间,以及数据流因日志位置丢失而失败。

  3. 运行以下 Oracle 恢复管理器 (RMAN) 命令,为数据库定义数据保留政策:

    TARGET /
    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;

    我们建议您将备份和归档日志至少保留 4 天,建议保留 7 天。

  4. 返回到用于配置 Oracle 日志文件轮替政策的数据库工具的 SQL 提示。我们建议日志文件大小不要超过 512 MB。

  5. 启用补充日志数据。为此,请先运行以下命令来启用最低限度的数据库级补充日志记录:

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

    接下来,选择是为特定表还是整个数据库启用日志记录。

    如需仅记录特定表的更改,请针对要复制的每个表运行以下命令:

    ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

    替换以下内容:

    • SCHEMA:包含表的架构的名称。
    • TABLE:要记录其更改的表的名称。

    如需复制数据库中的大部分或所有表,请考虑为整个数据库启用日志记录。 运行以下命令可为整个数据库启用补充日志数据:

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
  6. 向将用于连接到可插入式数据库的用户账号授予适当的权限。为此,请运行以下命令:

    GRANT SELECT ON GV_$LOG TO USER_NAME;
    GRANT SELECT ON GV_$LOGFILE TO USER_NAME;
    GRANT SELECT ON GV_$ARCHIVED_LOG TO USER_NAME;
    GRANT SELECT ON GV_$INSTANCE TO USER_NAME;
    GRANT SELECT ON GV_$STANDBY_LOG TO USER_NAME;
    GRANT SELECT ON V_$INSTANCE TO USER_NAME;
    GRANT SELECT ON V_$PDBS TO USER_NAME;
    GRANT SELECT ON V_$TRANSPORTABLE_PLATFORM TO USER_NAME;
    GRANT SELECT ON V_$DATABASE TO USER_NAME;
    GRANT SELECT ON V_$PARAMETER TO USER_NAME;
    GRANT SELECT ON COL$ TO USER_NAME;
    GRANT SELECT ON DBA_OBJECTS TO USER_NAME;
    GRANT SELECT ON DBA_TABLESPACES TO USER_NAME;
    GRANT SELECT ON DBA_ENCRYPTED_COLUMNS TO USER_NAME;
    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
    GRANT SELECT ON DBA_SUPPLEMENTAL_LOGGING TO USER_NAME;
    
    GRANT CONNECT TO USER_NAME;
    GRANT CREATE SESSION TO USER_NAME;
    GRANT SELECT ANY TABLE TO USER_NAME;
    GRANT READ ON DIRECTORY ONLINELOG_DIR TO USER_NAME;
    GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO USER_NAME;

    将 USER_NAME 替换为您打算用于连接到数据库的用户账号的名称。

为 LogMiner 配置可插入式 Oracle 数据库

如需配置自行托管的 Oracle 可插入式数据库,以便将其与 LogMiner API 搭配使用,请执行以下步骤:

  1. 验证数据库正以 ARCHIVELOG 模式运行。为此,请从 CDB$ROOT 容器运行以下命令:

    SELECT LOG_MODE FROM V$DATABASE;

    1. 如果结果为 ARCHIVELOG,则继续执行第 2 步。
    2. 如果结果为 NOARCHIVELOG,则需要为数据库启用 ARCHIVELOG 模式。
    3. 以 SYSDBA 身份登录后运行以下命令:

      SHUTDOWN IMMEDIATE;
      STARTUP MOUNT;
      ALTER DATABASE ARCHIVELOG;
      ALTER DATABASE OPEN;
      
    4. 归档的日志文件会占用磁盘可用空间,因此您需要为数据库配置 DB_RECOVERY_FILE_DEST_SIZE 参数。使用此参数指定目标数据库恢复文件要使用的总空间硬性限制(以字节为单位)。通过设置此参数,您可以管理以下两者之间的权衡:保护数据库免于耗尽磁盘可用空间,以及数据流因日志位置丢失而失败。

  2. 从 CDB$ROOT 容器运行以下 Oracle 恢复管理器 (RMAN) 命令,为数据库定义数据保留政策:

    CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;
    

    该命令会为容器数据库中的所有可插入式数据库定义数据保留政策。

    我们建议您将备份和归档日志至少保留 4 天,建议保留 7 天。

  3. 返回到用于配置 Oracle 日志文件轮替政策的数据库工具的 SQL 提示。我们建议日志文件大小不要超过 512 MB。

  4. 启用补充日志数据。为此,请先运行以下命令,在 CDB$ROOT 容器级别对数据库启用补充日志记录:

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
    

    接下来,选择是为特定表还是整个可插入式数据库启用日志记录。

    如需仅记录特定表的更改,请连接到可插入式数据库容器,并针对要复制的每个表运行以下命令:

    ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    

    替换以下内容:

    • SCHEMA:包含表的架构的名称。
    • TABLE:要记录其更改的表的名称。

    如需复制数据库中的多个或所有表,请考虑为整个数据库启用日志记录。

    运行以下命令可为整个数据库启用补充日志数据:

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    
  5. 创建普通用户。普通用户在 CDB$ROOT 容器和可插拔数据库中具有相同的身份。普通用户可以连接到 CDB$ROOT 容器并在其中执行操作,还可以连接到具有相应权限的任何可插拔数据库并在其中执行操作。普通用户名必须以 C## 或 c## 开头。

  6. 向将用于连接到数据库的普通用户授予适当的权限。在 CDB$ROOT 容器和可插拔数据库级别,需要不同的权限。

    • 连接到 CDB$ROOT 容器并运行以下命令:
    GRANT CREATE SESSION TO USER_NAME;
    GRANT SET CONTAINER TO USER_NAME;
    GRANT SELECT ON SYS.V_$DATABASE TO USER_NAME;
    GRANT SELECT ON SYS.V_$LOGMNR_CONTENTS TO USER_NAME;
    GRANT EXECUTE ON DBMS_LOGMNR TO USER_NAME;
    GRANT EXECUTE ON DBMS_LOGMNR_D TO USER_NAME;
    GRANT LOGMINING TO USER_NAME;
    GRANT EXECUTE_CATALOG_ROLE TO USER_NAME;
    
    • 连接到可插入数据库并运行以下命令:
    GRANT CREATE SESSION TO USER_NAME;
    GRANT SET CONTAINER TO USER_NAME;
    GRANT SELECT ANY TABLE TO USER_NAME;
    GRANT SELECT ON SYS.V_$DATABASE TO USER_NAME;
    GRANT SELECT ON V_$PDBS TO USER_NAME;
    GRANT SELECT ON SYS.V_$LOG TO USER_NAME; -- for primary databases
    GRANT SELECT ON SYS.V_$STANDBY_LOG TO USER_NAME; -- for standby databases
    GRANT SELECT ON SYS.V_$LOGFILE TO USER_NAME;
    GRANT SELECT ON SYS.V_$ARCHIVED_LOG TO USER_NAME;
    GRANT SELECT ON DBA_SUPPLEMENTAL_LOGGING TO USER_NAME;
    GRANT SELECT ON SYS.V_$PARAMETER TO USER_NAME;
    
  7. 向普通用户授予对数据库中 DBA_EXTENTS 视图的 SELECT 访问权限。此权限可让您对 Oracle 来源使用基于 ROWID 的回填:

    GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
  8. 如果您的数据库使用透明数据加密 (TDE),请授予以下权限:

    GRANT SELECT ON DBA_TABLESPACES TO USER_NAME;
    GRANT SELECT ON DBA_ENCRYPTED_COLUMNS TO USER_NAME;

后续步骤