AWS Database Migration Service
分步迁移指南 (API 版本 2016-01-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

步骤 2:配置 Oracle 源数据库

要将 Oracle 作为 AWS Database Migration Service (AWS DMS) 源,您必须先确保 ARCHIVELOG MODE 已启用以便向 LogMiner 提供信息。AWS DMS 使用 LogMiner 读取存档日志中的信息,以便 AWS DMS 能够捕获更改。

要让 AWS DMS 读取此信息,请确保在 AWS DMS 需要存档日志时,在数据库服务器上保留这些日志。如果将任务配置为立即开始捕获更改,则存档日志的保留时间只需比运行时间最长的事务的持续时间略长一点。通常,将存档日志保留 24 小时已足够。如果将任务配置为从过去的某个时间点开始,则存档日志必须在该时间点之前可用。有关启用 ARCHIVELOG MODE 并确保保留 Oracle 数据库日志的更详细说明,请参阅 Oracle 文档

要捕获更改数据,AWS DMS 需要在源数据库上启用补充日志记录。必须在数据库级别启用最小补充日志记录。AWS DMS 还需要启用识别键日志记录。每次更新包含主键的行时,该选项导致数据库将该行的主键的所有列放在重做日志文件中。即使主键中的值未更改,也会出现这种结果。您可以在数据库级别或表级别设置该选项。

配置 Oracle 源数据库

  1. 创建或配置要由 AWS DMS 使用的数据库账户。建议使用具有 AWS DMS 所需的最小权限的账户进行 AWS DMS 连接。AWS DMS 需要以下权限。

    CREATE SESSION SELECT ANY TRANSACTION SELECT on V_$ARCHIVED_LOG SELECT on V_$LOG SELECT on V_$LOGFILE SELECT on V_$DATABASE SELECT on V_$THREAD SELECT on V_$PARAMETER SELECT on V_$NLS_PARAMETERS SELECT on V_$TIMEZONE_NAMES SELECT on V_$TRANSACTION SELECT on ALL_INDEXES SELECT on ALL_OBJECTS SELECT on ALL_TABLES SELECT on ALL_USERS SELECT on ALL_CATALOG SELECT on ALL_CONSTRAINTS SELECT on ALL_CONS_COLUMNS SELECT on ALL_TAB_COLS SELECT on ALL_IND_COLUMNS SELECT on ALL_LOG_GROUPS SELECT on SYS.DBA_REGISTRY SELECT on SYS.OBJ$ SELECT on DBA_TABLESPACES SELECT on ALL_TAB_PARTITIONS SELECT on ALL_ENCRYPTED_COLUMNS * SELECT on all tables migrated

    如果要捕获并应用更改 (CDC),您还需要具有以下权限。

    EXECUTE on DBMS_LOGMNR SELECT on V_$LOGMNR_LOGS SELECT on V_$LOGMNR_CONTENTS LOGMINING /* For Oracle 12c and higher. */ * ALTER for any table being replicated (if you want AWS DMS to add supplemental logging)

    对于 11.2.0.3 之前的 Oracle 版本,您需要以下权限。

    SELECT on DBA_OBJECTS /* versions before 11.2.0.3 */ SELECT on ALL_VIEWS (required if views are exposed)
  2. 如果您的 Oracle 数据库是一个 AWS RDS 数据库,请以管理用户身份连接到该数据库,然后运行以下命令以确保将存档日志在 RDS 源上保留 24 小时:

    exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24);

    如果您的 Oracle 源是一个 AWS RDS 数据库,当且仅当启用备份时,才会将其置于 ARCHIVELOG MODE。

  3. 运行以下命令可在数据库级别启用补充日志记录(AWS DMS 要求这样做):

    • 在 Oracle SQL 中:

      ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
    • 在 RDS 中:

      exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
  4. 使用以下命令可在数据库级别启用识别键补充日志记录。AWS DMS 需要在数据库级别使用补充键日志记录。例外情况是,如果允许 AWS DMS 自动按需添加补充日志记录或在表级别启用键级别补充日志记录:

    • 在 Oracle SQL 中:

      ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
    • 在 RDS 中:

      exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','PRIMARY KEY');

      在启用键级别补充日志记录时,您的源数据库会产生少量开销。因此,如果仅迁移一部分表,则可能需要在表级别启用键级别补充日志记录。

  5. 要在表级别启用键级别补充日志记录,请使用以下命令。

    ALTER TABLE table_name ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

    如果表没有主键,您有两种选择。

    • 您可以在表中的第一个唯一索引涉及的所有列上添加补充日志记录 (按索引名称排序)。

    • 您可以在表的所有列上添加补充日志记录。

    要在表中的一部分列 (如唯一索引涉及的列) 上添加补充日志记录,请运行以下命令。

    ALTER TABLE table_name ADD SUPPLEMENTAL LOG GROUP example_log_group (column_list) ALWAYS;

    要为表的所有列添加补充日志记录,请运行以下命令。

    ALTER TABLE table_name ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
  6. 为 AWS SCT 创建一个用户。

    CREATE USER oracle_sct_user IDENTIFIED BY password; GRANT CONNECT TO oracle_sct_user; GRANT SELECT_CATALOG_ROLE TO oracle_sct_user; GRANT SELECT ANY DICTIONARY TO oracle_sct_user;