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

步骤 1:配置 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 启用补充日志记录。必须在数据库级别启用最小补充日志记录。AWS DMS 还需要启用识别键日志记录。每次更新包含主键的行时,该选项导致数据库将该行的主键的所有列放在重做日志文件中 (即使主键中的值未更改)。您可以在数据库级别或表级别设置该选项。

如果您的 Oracle 源在 Amazon RDS 中,则当且仅当您启用备份时,数据库将置于 ARCHIVELOG MODE 中。以下命令将确保在 RDS 源上将存档日志保留 24 小时:

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

配置 Oracle 源数据库

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

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; For RDS: exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
  2. 使用以下命令可在数据库级别启用识别键补充日志记录。AWS DMS 需要数据库级别的补充键日志记录,除非您允许 AWS DMS 自动按需添加补充日志记录或在表级别启用键级别补充日志记录:

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS; For RDS: exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','PRIMARY KEY');
  3. 在启用键级别补充日志记录时,您的源数据库会产生少量开销。因此,如果您仅迁移一部分表,则可能需要在表级别启用键级别补充日志记录。要在表级别启用键级别补充日志记录,请使用以下命令。

    alter table table_name add supplemental log data (PRIMARY KEY) columns;

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

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

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

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

    ALTER TABLE table_name ADD SUPPLEMENTAL LOG GROUP example_log_group (ID,NAME) ALWAYS;

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

    alter table table_name add supplemental log data (ALL) columns;
  4. 创建或配置要由 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 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)