将 Oracle 数据库作为 Amazon DMS 的源 - Amazon Database Migration Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 Oracle 数据库作为 Amazon DMS 的源

您可以使用 Amazon DMS 从一个或多个 Oracle 数据库中迁移数据。使用 Oracle 数据库作为源,您可以将数据迁移到支持的任何目标Amazon DMS。

Amazon DMS支持以下 Oracle 数据库版本:

  • Oracle Enterprise Edition

  • Oracle Standard Edition

  • Oracle Express 版本

  • Oracle Personal Edition

对于自主管理的 Oracle 数据库,Amazon DMS支持 10.2 及更高版本(适用于版本 10.x)、11g 及最高 12.2、18c 和 19c 的所有 Oracle 数据库版本。对于Amazon管理的 Amazon RDS for Oracle 数据库,Amazon DMS支持版本 11g(11.2.0.4 及更高版本)以及最高 12.2、18c 和 19c 的所有 Oracle 数据库版本。

可以使用安全套接字层 (SSL) 加密 Oracle 终端节点与您复制实例之间的连接。有关将 SSL 与 Oracle 终端节点结合使用的更多信息,请参阅Oracle 终端节点的 SSL 支持。Amazon DMS 还支持使用 Oracle 透明数据加密 (TDE) 来加密源数据库中的静态数据。有关将 Oracle TDE 与 Oracle 源终端节点结合使用的更多信息,请参阅使用 Oracle 作为 Amazon DMS 源时支持的加密方法

按照以下步骤将 Oracle 数据库配置为Amazon DMS源端点:

  1. 创建一个具有访问您的 Oracle 源数据库的Amazon DMS相应权限的 Oracle 用户。

  2. 创建符合您选择的 Oracle 数据库配置的 Oracle 源端点。要创建 full-load-only 任务,无需进一步配置。

  3. 要创建处理变更数据捕获的任务(仅限 CDC 或满负荷和 CDC 任务),请选择 Oracle LogMiner 或Amazon DMS Binary Reader 来捕获数据更改。选择 LogMiner 或Binary Reader决定了后来的某些权限和配置选项。有关 LogMiner 和Binary Reader 的比较,请参阅以下部分。

注意

有关满负荷任务、仅限 CDC 的任务以及满负荷任务和 CDC 任务的更多信息,请参阅创建任务

有关使用 Oracle 源数据库的其他详细信息Amazon DMS,请参阅以下部分。

在 CDC 中使用 Oracle LogMiner 或Amazon DMS二进制阅读器

在Amazon DMS对Oracle进行变更数据捕获 (CDC) 时读取重做日志的方法有两种:Oracle LogMiner 和Amazon DMS Binary Reader。 LogMiner 是一个 Oracle API,用于读取在线重做日志和存档重做日志文件。Binary Reader 是一种直接读取和解析原始重做日志文件的Amazon DMS方法。这些方法具有以下特点。

功能 LogMiner Binary Reader
易于配置
降低对源系统 I/O 和 CPU 的影响
更好的 CDC 性能
支持 Oracle 表集群
支持所有类型的 Oracle 混合列式压缩 (HCC)

部分

对于使用 CDC 的任务,Binary Reader 不支持 QUERY LOW。完全支持所有其他 HCC 类型。

仅在 Oracle 12c 中支持 LOB 列
支持仅影响 LOB 列的UPDATE语句
支持 Oracle 透明数据加密 (TDE)

部分

使用 Oracle 时 LogMiner,Amazon DMS不支持适用于 OracAmazon RDS for Oracle 在列级别上进行 TDE 加密。

部分

Binary Reader 仅对自我管理的 Oracle 数据库支持 TDE。

支持所有 Oracle 压缩方法
支持 XA 事务
竞速

不推荐使用

强烈推荐

注意

默认情况下,Amazon DMS使用 Oracle f LogMiner or (CDC)。

LogMiner 与一起使用的主要优点Amazon DMS包括以下几点:

  • LogMiner 支持大多数 Oracle 选项,例如加密选项和压缩选项。Binary Reader 不支持所有 Oracle 选项,特别是压缩选项和大多数加密选项。

  • LogMiner 提供了更简单的配置,尤其是与 Binary Reader 直接访问设置或使用 Oracle 自动存储管理 (ASM) 管理重做日志时。

  • LogMiner 支持表群集供使用Amazon DMS。Binary Reader 则不支持。

将 Binary Reader 与 Binary Reader 一起使用的主要优点Amazon DMS包括以下内容:

  • 对于更改量大的迁移, LogMiner 可能会对托管 Oracle 源数据库的计算机产生一些 I/O 或 CPU 影响。Binary Reader 受到 I/O 或 CPU 影响的可能性较小,因为日志是直接挖掘的,而不是进行多个数据库查询。

  • 对于更改量大的迁移,与使用 Oracle 相比,使用 Binary Reader 时 CDC 的性能通常要好得多 LogMiner。

  • Binary Reader 支持 Oracle 版本 12c 的 Binary Reader 支持 CDC。 LogMiner不是。

通常,除非您遇到以下情况之一,否则请使用 Oracle 迁移 Oracle 数据库: LogMiner

  • 需要在源 Oracle 数据库上运行多个迁移任务。

  • 源 Oracle 数据库上的更改量或重做日志量很高,或者您进行了更改但也在使用 Oracle ASM。

注意

如果您在使用 Oracle LogMiner 和Amazon DMS Binary Reader 之间切换,请务必重新启动 CDC 任务。

在 Oracle 源数据库上配置 CDC

要使 Oracle 源端点连接到数据库以执行变更数据捕获 (CDC) 任务,您可能需要指定额外的连接属性。无论是满负荷任务和 CDC 任务,还是仅限 CDC 的任务,都可能如此。您指定的额外连接属性取决于您用于访问重做日志的方法:Oracle LogMiner 或Amazon DMS Binary Reader。

在创建源端点时,您可以指定额外的连接属性。如果您具有多个连接属性设置,请用分号将它们彼此分开,并且不需要额外的空格(例如,oneSetting;thenAnother)。

Amazon DMS LogMiner 默认使用。您不一定要指定其他额外连接属性即可使用。

要使用 Binary Reader 访问重做日志,请添加以下额外的连接属性。

useLogMinerReader=N;useBfile=Y;

为额外连接属性使用以下格式来访问将 ASM 与 Binary Reader 一起使用的服务器。

useLogMinerReader=N;useBfile=Y;asm_user=asm_username;asm_server=RAC_server_ip_address:port_number/+ASM;

如下所示将源终端节点 Password 请求参数设置为 Oracle 用户密码和 ASM 密码,以逗号分隔。

oracle_user_password,asm_user_password

在 Oracle 源代码使用 ASM 时,您可以在 Binary Reader 中使用高性能选项进行大规模事务处理。这些选项包括额外的连接属性,用于指定并行线程数 (parallelASMReadThreads) 和预读缓冲区数 (readAheadBlocks)。将这些属性组合在一起可以显著提高 CDC 任务的性能。以下设置为大多数 ASM 配置提供了良好的结果。

useLogMinerReader=N;useBfile=Y;asm_user=asm_username;asm_server=RAC_server_ip_address:port_number/+ASM; parallelASMReadThreads=6;readAheadBlocks=150000;

有关额外连接属性支持的值的更多信息,请参阅将 Oracle 作为 Amazon DMS 源时的额外连接属性

此外,使用 ASM 的 Oracle 源执行 CDC 任务的性能取决于您选择的其他设置。这些设置包括用于配置 Oracle 源的 Amazon DMS 额外连接属性和 SQL 设置。有关使用 ASM 的 Oracle 源的其他连接属性的更多信息,请参见将 Oracle 作为 Amazon DMS 源时的额外连接属性

您还需要选择合适的 CDC 起始点。通常,当您这样做时,您需要确定交易处理点,以捕获 CDC 起始的最早未完成交易。否则,CDC 任务可能会错过之前未完成的交易。对于 Oracle 源数据库,您可以根据 Oracle 系统变更编号 (SCN) 选择 CDC 原生起点来识别最早的未完成事务。有关更多信息,请参阅从 CDC 开始点开始执行复制

有关为自我管理的 Oracle 数据库配置 CDC 作为源的更多信息,请参见使用 Oracle LogMiner 访问重做日志时所需的帐户权限使用Amazon DMS Binary Reader 访问重做日志时需要帐户权限、和在 Oracle ASM 中使用二进制阅读器时需要额外的帐户权限

有关将 CDC 配置为Amazon由管理的 Oracle 数据库作为源的更多信息,请参阅 将 CDC 任务配置为使用二进制阅读器和 RDS for Oracle 源代码Amazon DMS使用 Amazon RDS Oracle 备用副本(只读副本)作为源代码,使用 CDC 的二进制读取器Amazon DMS

用于配置自我管理或Amazon托管的 Oracle 源数据库的工作流程Amazon DMS

要配置自管理的源数据库实例,请使用以下工作流程步骤,具体取决于您执行 CDC 的方式。

对于此工作流程步骤 如果您使用 CDC 执行 LogMiner,请执行此操作 如果您使用二进制阅读器执行 CDC,请执行此操作
授予 Oracle 帐户权限。 请参阅Amazon DMS 的自管理 Oracle 源上所需的用户账户权限 请参阅 Amazon DMS 的自管理 Oracle 源上所需的用户账户权限
使用 CDC 准备要复制的源数据库。 请参阅使用为 CDC 准备 Oracle 自我管理的源数据库Amazon DMS 请参阅 使用为 CDC 准备 Oracle 自我管理的源数据库Amazon DMS
授予 CDC 所需的其他 Oracle 用户权限。 请参阅使用 Oracle LogMiner 访问重做日志时所需的帐户权限 请参阅 使用Amazon DMS Binary Reader 访问重做日志时需要帐户权限
对于带有 ASM 的 Oracle 实例,授予访问 CDC 版 ASM 所需的额外用户帐户权限。 没有其他操作。 Amazon DMS支持 Oracle ASM,无需额外的帐户权限。 请参阅 在 Oracle ASM 中使用二进制阅读器时需要额外的帐户权限
如果您尚未执行此操作,请将任务配置为使用 LogMiner Binary Reader,请配置为 Binary Reader。 请参阅在 CDC 中使用 Oracle LogMiner 或Amazon DMS二进制阅读器 请参阅 在 CDC 中使用 Oracle LogMiner 或Amazon DMS二进制阅读器
将 Oracle 待机配置为 CDC 的来源。 Amazon DMS不支持 Oracle 待机作为来源。 请参阅 使用自管理的 Oracle 待机作为源代码以及适用于 CDC 的二进制阅读器Amazon DMS

使用以下工作流步骤配置托Amazon管的 Oracle 源数据库实例。

对于此工作流程步骤 如果您使用 CDC 执行 LogMiner,请执行此操作 如果您使用二进制阅读器执行 CDC,请执行此操作
授予 Oracle 帐户权限。 有关更多信息,请参阅在Amazon托管的 Oracle 源上需要用户帐户权限Amazon DMS 有关更多信息,请参阅在Amazon托管的 Oracle 源上需要用户帐户权限Amazon DMS
使用 CDC 准备要复制的源数据库。 有关更多信息,请参阅 为配置Amazon托管的 Oracle 源代码Amazon DMS 有关更多信息,请参阅 为配置Amazon托管的 Oracle 源代码Amazon DMS
授予 CDC 所需的其他 Oracle 用户权限。 不需要额外账户权限。 有关更多信息,请参阅 将 CDC 任务配置为使用二进制阅读器和 RDS for Oracle 源代码Amazon DMS
如果您尚未执行此操作,请将任务配置为使用 LogMiner Binary Reader,请配置为 Binary Reader。 有关更多信息,请参阅在 CDC 中使用 Oracle LogMiner 或Amazon DMS二进制阅读器 有关更多信息,请参阅在 CDC 中使用 Oracle LogMiner 或Amazon DMS二进制阅读器
将 Oracle 待机配置为 CDC 的来源。 Amazon DMS不支持 Oracle 待机作为来源。 有关更多信息,请参阅使用 Amazon RDS Oracle 备用副本(只读副本)作为源代码,使用 CDC 的二进制读取器Amazon DMS

将自管理 Oracle 数据库作为 Amazon DMS 的源

自管理数据库是您配置和控制的数据库,可以是本地本地数据库实例或 Amazon EC2 上的数据库。下面,您可以了解使用自管理的 Oracle 数据库时所需的权限和配置Amazon DMS。

Amazon DMS 的自管理 Oracle 源上所需的用户账户权限

要使用 Oracle 数据库作为来源Amazon DMS,请向在 Oracle 端点连接设置中指定的 Oracle 用户授予以下权限。

注意

当授予权限时,请使用对象的实际名称,而不是每个对象的同义词。例如,请使用带下划线的 V_$OBJECT,而不是不带下划线的 V$OBJECT

GRANT CREATE SESSION TO db_user; GRANT SELECT ANY TRANSACTION TO db_user; GRANT SELECT ON V_$ARCHIVED_LOG TO db_user; GRANT SELECT ON V_$LOG TO db_user; GRANT SELECT ON V_$LOGFILE TO db_user; GRANT SELECT ON V_$LOGMNR_LOGS TO db_user; GRANT SELECT ON V_$LOGMNR_CONTENTS TO db_user; GRANT SELECT ON V_$DATABASE TO db_user; GRANT SELECT ON V_$THREAD TO db_user; GRANT SELECT ON V_$PARAMETER TO db_user; GRANT SELECT ON V_$NLS_PARAMETERS TO db_user; GRANT SELECT ON V_$TIMEZONE_NAMES TO db_user; GRANT SELECT ON V_$TRANSACTION TO db_user; GRANT SELECT ON V_$CONTAINERS TO db_user; GRANT SELECT ON ALL_INDEXES TO db_user; GRANT SELECT ON ALL_OBJECTS TO db_user; GRANT SELECT ON ALL_TABLES TO db_user; GRANT SELECT ON ALL_USERS TO db_user; GRANT SELECT ON ALL_CATALOG TO db_user; GRANT SELECT ON ALL_CONSTRAINTS TO db_user; GRANT SELECT ON ALL_CONS_COLUMNS TO db_user; GRANT SELECT ON ALL_TAB_COLS TO db_user; GRANT SELECT ON ALL_IND_COLUMNS TO db_user; GRANT SELECT ON ALL_ENCRYPTED_COLUMNS TO db_user; GRANT SELECT ON ALL_LOG_GROUPS TO db_user; GRANT SELECT ON ALL_TAB_PARTITIONS TO db_user; GRANT SELECT ON SYS.DBA_REGISTRY TO db_user; GRANT SELECT ON SYS.OBJ$ TO db_user; GRANT SELECT ON DBA_TABLESPACES TO db_user; GRANT SELECT ON DBA_OBJECTS TO db_user; -– Required if the Oracle version is earlier than 11.2.0.3. GRANT SELECT ON SYS.ENC$ TO db_user; -– Required if transparent data encryption (TDE) is enabled. For more information on using Oracle TDE with Amazon DMS, see 使用 Oracle 作为 Amazon DMS 源时支持的加密方法. GRANT SELECT ON GV_$TRANSACTION TO db_user; -– Required if the source database is Oracle RAC in Amazon DMS versions 3.4.6 and higher.

使用特定表列表时,为每个复制的表授予额外的以下权限。

GRANT SELECT on any-replicated-table to db_user;

授予以下额外权限,使用验证功能验证 LOB 列。

GRANT EXECUTE ON SYS.DBMS_CRYPTO TO db_user;

如果您使用二进制读取器而不是,则授予以下额外权限 LogMiner。

GRANT SELECT ON SYS.DBA_DIRECTORIES TO db_user;

授予以下额外权限以显示视图。

GRANT SELECT on ALL_VIEWS to dms_user;

要显示视图,还必须向源端点添加exposeViews=true额外的连接属性。

使用为 CDC 准备 Oracle 自我管理的源数据库Amazon DMS

通过执行以下操作,准备好自己管理的 Oracle 数据库作为运行 CDC 任务的来源:

验证是否Amazon DMS支持源数据库版本

运行如下所示的查询以验证当前版本的 Oracle 源数据库是否支持Amazon DMS。

SELECT name, value, description FROM v$parameter WHERE name = 'compatible';

此处,namevalue、和 description 列是数据库中某个位置的列,正根据 name 的值查询这些列。如果此查询运行时没有错误,则Amazon DMS支持数据库的当前版本,您可以继续迁移。如果查询引发错误,则Amazon DMS不支持数据库的当前版本。要继续迁移,请先将 Oracle 数据库转换为支持的版本Amazon DMS。

确保 ARCHIVELOG 模式已开启

您可以在两种不同的模式下运行 Oracle: ARCHIVELOG 模式和 NOARCHIVELOG 模式。要运行 CDC 任务,请在ARCHIVELOG模式下运行数据库。要知道数据库是否处于ARCHIVELOG模式下,请执行以下查询。

SQL> SELECT log_mode FROM v$database;

如果返回NOARCHIVELOG模式,则按照 Oracle 指令将数据库设置ARCHIVELOG为。

设置补充日志记录

要捕获正在进行的更改,Amazon DMS需要您在 Oracle 源数据库上启用最低限度的补充日志记录。此外,您需要对数据库中每个复制的表启用补充日志记录。

默认情况下,在所有复制的表上Amazon DMS添加PRIMARY KEY补充日志记录。Amazon DMS要允许添加PRIMARY KEY补充日志记录,请为每个复制的表授予以下权限。

ALTER on any-replicated-table;

您可以Amazon DMS使用额外连接属性禁用添加的默认PRIMARY KEY补充日志记录addSupplementalLogging。有关更多信息,请参阅将 Oracle 作为 Amazon DMS 源时的额外连接属性

如果您的复制任务使用未引用主键列的WHERE子句更新表,请务必开启补充日志记录。

手动设置补充日志
  1. 运行以下查询,以验证数据库是否已启用补充日志记录。

    SELECT supplemental_log_data_min FROM v$database;

    如果返回的结果为YESIMPLICIT,则为数据库启用补充日志记录。

    如果不是,请运行以下命令启用数据库的补充日志记录。

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
  2. 确保为每个复制的表添加所需的补充日志记录。

    请考虑以下事项:

    • 如果向表中添加了ALL COLUMNS补充日志记录,则无需添加更多日志记录。

    • 如果存在主键,请为主键添加补充日志记录。您可以使用格式在主键本身上添加补充日志记录,也可以通过在数据库的主键列上添加补充日志来实现此目的。

      ALTER TABLE Tablename ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
    • 如果不存在主键并且表具有单个唯一索引,则将所有唯一索引的列添加到补充日志。

      ALTER TABLE TableName ADD SUPPLEMENTAL LOG GROUP LogGroupName (UniqueIndexColumn1[, UniqueIndexColumn2] ...) ALWAYS;

      使用 SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS 不会将唯一索引列添加到日志。

    • 如果不存在主键并且表有多个唯一索引,则在按字母顺序排序的升序列表中Amazon DMS选择第一个唯一索引。您需要像前一项目一样在所选索引的列上添加补充日志记录。

      使用 SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS 不会将唯一索引列添加到日志。

    • 如果不存在主键,也没有唯一索引,则在所有列上添加补充日志记录。

      ALTER TABLE TableName ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

      在某些情况下,目标表主键或唯一索引不同于源表主键或唯一索引。在这种情况下,在构成目标表主键或唯一索引的源表列上手动添加补充日志记录。

      此外,如果您更改目标表主键,请在目标唯一索引的列上添加补充日志记录,而不是在原始主键或唯一索引的列上添加。

如果为表定义了筛选条件或转换,则可能需要启用其他日志记录。

请考虑以下事项:

  • 如果向表中添加了ALL COLUMNS补充日志记录,则无需添加更多日志记录。

  • 如果表具有唯一索引或主键,则在筛选或转换中涉及的每列上添加补充日志记录。但是,只有在这些列与主键或唯一索引列不同时才这样做。

  • 如果转换仅包含一列,请勿将此列添加到补充日志组。例如,对于转换 A+B,请在 AB 这两列上添加补充日志记录。但是,对于转换 substring(A,10),请不要在列 A 上添加补充日志记录。

  • 要在主键或唯一索引列以及其他经过筛选或转换的列上设置补充日志记录,可以设置USER_LOG_GROUP补充日志记录。在主键或唯一索引列以及任何其他经过筛选或转换的特定列上添加此日志记录。

    例如,要复制以主键命名的表ID并按列筛选器NAME,可以运行TEST.LOGGING与以下命令类似的命令来创建日志组补充日志。

    ALTER TABLE TEST.LOGGING ADD SUPPLEMENTAL LOG GROUP TEST_LOG_GROUP (ID, NAME) ALWAYS;

使用 Oracle LogMiner 访问重做日志时所需的帐户权限

要使用 Oracle 访问重做日志 LogMiner,请向 Oracle 端点连接设置中指定的 Oracle 用户授予以下权限。

GRANT EXECUTE on DBMS_LOGMNR to db_user; GRANT SELECT on V_$LOGMNR_LOGS to db_user; GRANT SELECT on V_$LOGMNR_CONTENTS to db_user; GRANT LOGMINING to db_user; -– Required only if the Oracle version is 12c or later.

使用Amazon DMS Binary Reader 访问重做日志时需要帐户权限

要使用Amazon DMS二进制读取器访问重做日志,请向在 Oracle 端点连接设置中指定的 Oracle 用户授予以下权限。

GRANT SELECT on v_$transportable_platform to db_user; -– Grant this privilege if the redo logs are stored in Oracle Automatic Storage Management (ASM) and AWS DMS accesses them from ASM. GRANT CREATE ANY DIRECTORY to db_user; -– Grant this privilege to allow AWS DMS to use Oracle BFILE read file access in certain cases. This access is required when the replication instance doesn't have file-level access to the redo logs and the redo logs are on non-ASM storage. GRANT EXECUTE on DBMS_FILE_TRANSFER to db_user; -– Grant this privilege to copy the redo log files to a temporary folder using the CopyToTempFolder method. GRANT EXECUTE on DBMS_FILE_GROUP to db_user;

Binary Reader 与 Oracle 文件功能(包括 Oracle 目录)配合使用。每个 Oracle 目录对象都包含要处理的重做日志文件所在文件夹的名称。这些 Oracle 目录不在文件系统级别表示。相反,它们是在 Oracle 数据库级别创建的逻辑目录。您可以在 Oracle ALL_DIRECTORIES 视图中查看它们。

如果您希望 Amazon DMS 创建这些 Oracle 目录,请授予上述指定的 CREATE ANY DIRECTORY 权限。Amazon DMS 创建带有 DMS_ 前缀的目录名称。如果您不授予 CREATE ANY DIRECTORY 权限,请手动创建相应的目录。在某些情况下,当您手动创建 Oracle 目录时,Oracle 源终端节点中指定的 Oracle 用户不是创建这些目录的用户。在这些情况下,还要授予 READ on DIRECTORY 特权。

如果 Oracle 源端点处于 Active DataGuard 待机模式 (ADG),请参阅Amazon数据库博客上的 “如何将二进制阅读器与 ADG 结合使用” 一文。

注意

Amazon DMSCDC 不支持未配置为使用自动重做传输服务的 Active DataGuard 待机模式。

在某些情况下,您可能会使用 Oracle 管理的文件 (OMF) 来存储日志。或者你的源端点在 ADG 中,因此你无法授予 CREATE ANY DIRECTORY 权限。在这些情况下,请在启动 Amazon DMS 复制任务之前手动创建具有所有可能日志位置的目录。如果 Amazon DMS 找不到预先创建的目录,则任务将停止。此外,Amazon DMS 不会删除它在 ALL_DIRECTORIES 视图中创建的条目,因此应手动删除这些条目。

在 Oracle ASM 中使用二进制阅读器时需要额外的帐户权限

要使用 Binary Reader 访问自动存储管理 (ASM) 中的重做日志,请向 Oracle 端点连接设置中指定的 Oracle 用户授予以下权限。

SELECT ON v_$transportable_platform SYSASM -– To access the ASM account with Oracle 11g Release 2 (version 11.2.0.2) and later, grant the Oracle endpoint user the SYSASM privilege. For older supported Oracle versions, it's typically sufficient to grant the Oracle endpoint user the SYSDBA privilege.

您可以通过打开命令提示符并调用以下语句之一来验证 ASM 帐户访问权限,具体取决于您的 Oracle 版本。

如果您需要 SYSDBA 权限,请使用以下语句。

sqlplus asmuser/asmpassword@+asmserver as sysdba

如果您需要 SYSASM 权限,请使用以下语句。

sqlplus asmuser/asmpassword@+asmserver as sysasm

使用自管理的 Oracle 待机作为源代码以及适用于 CDC 的二进制阅读器Amazon DMS

要在使用适用于 CDC 的二进制阅读器时将 Oracle 备用实例配置为源,请先满足以下先决条件:

  • Amazon DMS目前仅支持 Oracle 活动数据卫士待机模式。

  • 确保 Oracle 数据卫士配置使用:

    • 重做传输服务,用于自动传输重做数据。

    • 应用服务以自动将重做应用到备用数据库。

要确认满足这些要求,请执行以下查询。

SQL> select open_mode, database_role from v$database;

从该查询的输出中,确认备用数据库已在 READ ONLY 模式下打开,并且正在自动应用重做。例如:

OPEN_MODE DATABASE_ROLE -------------------- ---------------- READ ONLY WITH APPLY PHYSICAL STANDBY
在使用适用于 CDC 的二进制读取器时将 Oracle 备用实例配置为源
  1. 授予访问备用日志文件所需的额外权限。

    GRANT SELECT ON v_$standby_log TO db_user;
  2. 使用Amazon Web Services Management Console或为 Oracle 待机创建源端点Amazon CLI。创建端点时,指定以下额外的连接属性。

    useLogminerReader=N;useBfile=Y
    注意

    在中Amazon DMS,您可以使用额外的连接属性来指定是否要从存档日志而不是重做日志迁移。有关更多信息,请参阅将 Oracle 作为 Amazon DMS 源时的额外连接属性

  3. 配置存档日志目的地。

    不带 ASM 的 Oracle 源代码的 DMS 二进制读取器使用 Oracle 目录访问存档的重做日志。如果您的数据库配置为使用快速恢复区 (FRA) 作为存档日志目的地,则存档重做文件的位置不是固定的。每天生成存档的重做日志都会在 FRA 中使用目录名格式 YYY_MM_DD 创建一个新目录。例如:

    DB_RECOVERY_FILE_DEST/SID/archivelog/YYYY_MM_DD

    当 DMS 需要访问新创建的 FRA 目录中的存档重做文件并且使用主读写数据库作为源时,DMS 会创建一个新的 Oracle 目录或替换现有的 Oracle 目录,如下所示。

    CREATE OR REPLACE DIRECTORY dmsrep_taskid AS ‘DB_RECOVERY_FILE_DEST/SID/archivelog/YYYY_MM_DD’;

    将备用数据库用作源时,DMS 无法创建或替换 Oracle 目录,因为该数据库处于只读模式。但是,您可以选择执行以下附加步骤之一:

    1. 在 Oracle 不会创建每日子目录的配置中,修改log_archive_dest_id_1为使用实际路径而不是 FRA:

      ALTER SYSTEM SET log_archive_dest_1=’LOCATION=full directory path

      然后,创建一个 Oracle 目录对象供 DMS 使用:

      CREATE OR REPLACE DIRECTORY dms_archived_logs AS ‘full directory path’;
    2. 创建额外的存档日志目标和指向该目标的 Oracle 目录对象。例如:

      ALTER SYSTEM SET log_archive_dest_3=’LOCATION=full directory path’; CREATE DIRECTORY dms_archived_log AS ‘full directory path’;

      然后向任务源端点添加额外的连接属性:

      archivedLogDestId=3
    3. 手动预先创建供 DMS 使用的 Oracle 目录对象。

      CREATE DIRECTORY dms_archived_log_20210301 AS ‘DB_RECOVERY_FILE_DEST/SID/archivelog/2021_03_01’; CREATE DIRECTORY dms_archived_log_20210302 AS ‘DB_RECOVERY_FILE_DEST>/SID>/archivelog/2021_03_02’; ...
    4. 创建每天运行的 Oracle 调度器作业并创建所需的目录。

在 Oracle 云基础设施 (OCI) 上使用用户管理的数据库作为 CDC 的来源Amazon DMS

用户管理的数据库是您配置和控制的数据库,例如在虚拟机 (VM)、裸机或 Exadata 服务器上创建的 Oracle 数据库。或者,您配置和控制的在专用基础架构上运行的数据库,例如 Oracle 云基础设施 (OCI)。以下信息描述了在 OCI 上使用 Oracle 用户管理的数据库作为中变更数据捕获 (CDC) 的源时所需的权限和配置Amazon DMS。

将 OCI 托管的用户管理的 Oracle 数据库配置为变更数据捕获的来源
  1. 在 OCI 上授予用户管理的 Oracle 源数据库所需的用户帐户权限。有关更多信息,请参阅自我管理的 Oracle 源端点的帐户权限

  2. 授予使用 Binary Reader 访问重做日志时所需的帐户权限。有关更多信息,请参阅使用 Binary Reader 时所需的帐户权限

  3. 添加在 Oracle Automatic Storage Management(ASM)将 Binary Reader(AS 有关更多信息,请参阅在 Oracle ASM 中使用二进制读取器所需的其他帐户权限

  4. 设置补充日志记录。有关更多信息,请参阅设置补充日志记录

  5. 设置 TDE 加密。有关更多信息,请参阅使用 Oracle 数据库作为源端点时的加密方法

以下限制在 Oracle 云基础设施 (OCI) 上从 Oracle 源数据库复制数据时适用。

限制
  • DMS 不支持使用 Oracle LogMiner 访问重做日志。

  • DMS 不支持自治数据库。

使用Amazon托管的 Oracle 数据库作为来源Amazon DMS

Amazon托管数据库是位于亚马逊 RDS、亚马逊 Aurora 或 Amazon S3 等亚马逊服务上的数据库。接下来,您可以找到使用Amazon托管的 Oracle 数据库时需要设置的权限和配置Amazon DMS。

在Amazon托管的 Oracle 源上需要用户帐户权限Amazon DMS

向 Oracle 源端点定义中指定的 Oracle 用户帐户授予以下权限。

重要

对于db_user和等所有参数值any-replicated-table,除非您使用区分大小写的标识符指定值,否则Oracle 假定该值全部为大写。例如,假设您在创建一个db_user值时不使用引号,如在CREATE USER myuser或中CREATE USER MYUSER。在这种情况下,Oracle 将值标识并存储为全部大写字母 (MYUSER)。如果您使用引号(如CREATE USER "MyUser"CREATE USER 'MyUser'中),则 Oracle 会识别并存储您指定的区分大小写的值(MyUser)。

GRANT CREATE SESSION to db_user; GRANT SELECT ANY TRANSACTION to db_user; GRANT SELECT on DBA_TABLESPACES to db_user; GRANT SELECT ON any-replicated-table to db_user; GRANT EXECUTE on rdsadmin.rdsadmin_util to db_user; -- For Oracle 12c or later: GRANT LOGMINING to db_user; – Required only if the Oracle version is 12c or later.

此外,使用 Amazon RDS 程序对SYS对象授予SELECTEXECUTE权限rdsadmin.rdsadmin_util.grant_sys_object,如图所示。有关更多信息,请参阅向 SYS 对象授予 SELECT 或 EXECUTE 权限

exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_VIEWS', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TAB_PARTITIONS', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_INDEXES', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_OBJECTS', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TABLES', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_USERS', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CATALOG', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CONSTRAINTS', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CONS_COLUMNS', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TAB_COLS', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_IND_COLUMNS', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_LOG_GROUPS', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOG', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGFILE', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$THREAD', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$PARAMETER', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$NLS_PARAMETERS', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TIMEZONE_NAMES', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TRANSACTION', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$CONTAINERS', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_REGISTRY', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('OBJ$', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_ENCRYPTED_COLUMNS', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS', 'db_user', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS','db_user','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR', 'db_user', 'EXECUTE'); -- (as of Oracle versions 12.1 and later) exec rdsadmin.rdsadmin_util.grant_sys_object('REGISTRY$SQLPATCH', 'db_user', 'SELECT'); -- (for Amazon RDS Active Dataguard Standby (ADG)) exec rdsadmin.rdsadmin_util.grant_sys_object('V_$STANDBY_LOG', 'db_user', 'SELECT'); -- (for transparent data encryption (TDE)) exec rdsadmin.rdsadmin_util.grant_sys_object('ENC$', 'db_user', 'SELECT'); -- (for validation with LOB columns) exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_CRYPTO', 'db_user', 'EXECUTE'); -- (for binary reader) exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_DIRECTORIES','db_user','SELECT');

有关使用 Amazon RDS Active DataGuard 待机 (ADG) 的Amazon DMS更多信息,请参阅使用 Amazon RDS Oracle 备用副本(只读副本)作为源代码,使用 CDC 的二进制读取器Amazon DMS

有关将 Oracle TDE 与 Amazon DMS 结合使用的更多信息,请参阅 使用 Oracle 作为 Amazon DMS 源时支持的加密方法

为配置Amazon托管的 Oracle 源代码Amazon DMS

在使用Amazon托管的 Oracle 数据库作为 Oracle 数据库的源之前Amazon DMS,请对 Oracle 数据库执行以下任务:

  • 启用自动备份。有关启用自动备份的更多信息,请参阅 Amazon RDS 用户指南中的启用自动备份

  • 设置补充日志记录。

  • 设置存档。存档适用于 Oracle 的 Amazon RDS 数据库实例的重做日志Amazon DMS允许使用 Oracle LogMiner 或 Binary Reader 检索日志信息。

设置存档
  1. 运行 rdsadmin.rdsadmin_util.set_configuration 命令以设置存档。

    例如,要将存档的重做日志保留 24 小时,请运行以下命令。

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

    要使更改生效。

  2. 确保您的存储空间在指定的保留期内有足够的空间来存放存档的重做日志。例如,如果您的保留期为 24 小时,则计算一小时的事务处理中累积的存档重做日志的总大小,然后将总数乘以 24。将计算出的 24 小时总存储空间与您的可用存储空间进行比较,确定您是否有足够的存储空间来处理整整 24 小时的事务处理。

设置补充日志记录
  1. 运行以下命令以启用数据库级别的补充日志记录。

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
  2. 运行以下命令以启用主键补充日志记录。

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','PRIMARY KEY');
  3. (可选)在表级别启用密钥级补充日志记录。

    启用密钥级补充日志记录后,您的源数据库会产生少量开销。因此,如果您仅迁移表的子集,则可能需要在表级别启用密钥级补充日志记录。要在表级别启用键级别补充日志记录,请运行以下命令。

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

将 CDC 任务配置为使用二进制阅读器和 RDS for Oracle 源代码Amazon DMS

您可以配置Amazon DMS为使用适用于 CDC 的 Binary Reader 访问源 Amazon RDS for Oracle 实例重做日志。

注意

要使用 Oracle LogMiner,所需的最低用户帐户权限就足够了。有关更多信息,请参阅在Amazon托管的 Oracle 源上需要用户帐户权限Amazon DMS

要使用 Amazon DMS Binary Reader,请为 Oracle 源终端节点指定其他设置和额外连接属性,具体取决于您的 Amazon DMS 版本。

适用于 Oracle 的 Amazon RDS 的以下版本支持二进制读取器:

  • Oracle 11.1 — 版本 11.1.2 及更高的 11.1 版本。

  • Oracle 12.1 — 版本 12.1.v7 及更高的 12.1 版本。

  • 甲骨文 12.2 — 所有版本。

  • 甲骨文 18.0 — 所有版本。

  • 甲骨文 19.0 — 所有版本。

使用 Binary Reader 配置 CDC
  1. 以主用户身份登录您的 Amazon RDS for Oracle 源数据库,然后运行以下存储过程来创建服务器级目录。

    exec rdsadmin.rdsadmin_master_util.create_archivelog_dir; exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
  2. 向用于访问 Oracle 源端点的 Oracle 用户帐户授予以下权限。

    GRANT READ ON DIRECTORY ONLINELOG_DIR TO db_user; GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO db_user;
  3. 在 Amazon RDS Oracle 源终端节点上设置以下额外连接属性:

    • 对于 RDS Oracle 版本 11.2 和 12.1,设置以下内容。

      useLogminerReader=N;useBfile=Y;accessAlternateDirectly=false;useAlternateFolderForOnline=true; oraclePathPrefix=/rdsdbdata/db/{$DATABASE_NAME}_A/;usePathPrefix=/rdsdbdata/log/;replacePathPrefix=true;
    • 对于 RDS Oracle 版本 12.2、18.0 和 19.0,设置以下内容。

      useLogminerReader=N;useBfile=Y
注意

例如,确保多个属性设置的分号分隔符 (;) 后面没有空格oneSetting;thenAnother

有关配置 CDC 任务的更多信息,请参阅在 Oracle 源数据库上配置 CDC

使用 Amazon RDS Oracle 备用副本(只读副本)作为源代码,使用 CDC 的二进制读取器Amazon DMS

在中使用 Binary Reader for CDC 时,验证使用 Amazon RDS for Oracle Standby 作为来源的以下先决条件Amazon DMS

  • 使用 Oracle 主用户设置二进制阅读器。

  • 确保Amazon DMS目前仅支持使用 Oracle Active Data Guard 待机模式。

完成后,在使用适用于 CDC 的二进制阅读器时,使用以下步骤使用 RDS for Oracle Standby 作为源。

在使用适用于 CDC 的二进制读取器时,将 Oracle 备用的 RDS 配置为源
  1. 以主用户身份登录 RDS for Oracle 主副本。

  2. 按照 Amazon RDS 用户指南中的说明运行以下存储过程来创建服务器级目录。

    exec rdsadmin.rdsadmin_master_util.create_archivelog_dir; exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
  3. 识别在步骤 2 中创建的目录。

    SELECT directory_name, directory_path FROM all_directories WHERE directory_name LIKE ( 'ARCHIVELOG_DIR_%' ) OR directory_name LIKE ( 'ONLINELOG_DIR_%' )

    例如,前面的代码显示了如下所示的目录列表。

  4. 将对上述目录的Read权限授予用于访问 Oracle 备用数据库的 Oracle 用户帐户。

    GRANT READ ON DIRECTORY ARCHIVELOG_DIR_A TO db_user; GRANT READ ON DIRECTORY ARCHIVELOG_DIR_B TO db_user; GRANT READ ON DIRECTORY ONLINELOG_DIR_A TO db_user; GRANT READ ON DIRECTORY ONLINELOG_DIR_B TO db_user;
  5. 在主实例上执行存档日志切换。这样做可以确保对的更改ALL_DIRECTORIES也移植到 Oracle 备用库。

  6. 在 Oracle 待机上运行ALL_DIRECTORIES查询以确认更改已应用。

  7. 使用Amazon DMS管理控制台或Amazon Command Line Interface (Amazon CLI) 为 Oracle 待机创建源端点。在创建端点时,指定以下额外的连接属性。

    useLogminerReader=N;useBfile=Y;archivedLogDestId=1;additionalArchivedLogDestId=2
  8. 创建端点后,使用控制台的创建终端节点页面上的测试端点连接或Amazon CLItest-connection命令来验证连接是否已建立。

将 Oracle 作为 Amazon DMS 源的限制

将 Oracle 数据库作为 Amazon DMS 源时,存在以下限制:

  • Amazon DMS目前不支持 Oracle 扩展数据类型。

  • Amazon DMS 不支持长对象名称(超过 30 个字节)。

  • Amazon DMS 不支持基于函数的索引。

  • 如果您管理补充日志记录并对任何列进行转换,请确保激活所有字段和列的补充日志记录。有关设置补充日志记录的更多信息,请参阅以下主题:

  • Amazon DMS不支持多租户容器根数据库 (CDB$ROOT)。它确实支持使用二进制读取器的 PDB。

  • Amazon DMS 不支持延迟约束。

  • 只有通过执行 LOB 查找,才能使用完整 LOB 模式支持安全 LOB。

  • Amazon DMS支持所有支持的 Oracle 版本 11 及更高版本的rename table table-name to new-table-name语法。任何 Oracle 版本 10 的源数据库都不支持此语法。

  • Amazon DMS 不会复制 DDL 语句 ALTER TABLE ADD column data_type DEFAULT default_value 的结果。它将新列设置为 NULL,而不是将 default_value 复制到目标。

  • 使用 3.4.7 或更高Amazon DMS版本时,要复制分区或子分区操作产生的更改,请在启动 DMS 任务之前执行以下操作。

    • 手动创建分区表结构 (DDL);

    • 确保 Oracle 源和 Oracle 目标上的 DDL 相同;

    • 设置额外的连接属性enableHomogenousPartitionOps=true

    有关 enableHomogenousPartitionOps 的更多信息,请参阅 将 Oracle 作为 Amazon DMS 源时的额外连接属性。另请注意,在 FULL+CDC 任务中,DMS 不会复制作为缓存更改的一部分捕获的数据更改。在该用例中,在 Oracle 目标上重新创建表结构并重新加载有问题的表。

    在Amazon DMS版本 3.4.7 之前:

    DMS 不复制分区或子分区操作(ADDDROPEXCHANGE、和TRUNCATE)导致的数据更改。此类更新可能会在复制期间导致以下错误:

    • 对于 ADD 操作,对添加的数据进行更新和删除可能会引发 “0 rows affected (0 行受到影响)” 警告。

    • 对于 DROPTRUNCATE 操作,新插入可能会引发“duplicates (重复项)” 错误。

    • EXCHANGE 操作可能会引发 “0 rows affected (0 行受到影响)” 警告和“duplicates (重复项)” 错误。

    要复制由于分区或子分区操作而导致的更改,请重新加载有问题的表。添加新的空分区后,新添加分区的操作将照常复制到目标分区。

  • Amazon DMS3.4 之前的版本不支持因在源代码上运行CREATE TABLE AS语句而导致的目标数据更改。但是,在目标上会创建新表。

  • Amazon DMS 不捕获 Oracle DBMS_REDEFINITION 程序包所做的更改,例如,表元数据和 OBJECT_ID 字段。

  • Amazon DMS 在目标上将空 BLOB 和 CLOB 列映射到 NULL

  • 使用 Oracle 11 捕获更改时 LogMiner,字符串长度大于 1982 的 CLOB 列的更新会丢失,目标也不会更新。

  • 更改数据捕获 (CDC) 期间,Amazon DMS 不支持对定义为主键的数值列进行批量更新。

  • Amazon DMS 不支持某些 UPDATE 命令。以下示例是不支持的UPDATE命令。

    UPDATE TEST_TABLE SET KEY=KEY+1;

    此处,TEST_TABLE 是表名称,KEY 是定义为主键的数值列。

  • Amazon DMS不支持用于加载 LONG 和 LONG RAW 列的完整 LOB 模式。相反,您可以使用有限的 LOB 模式将这些数据类型迁移到 Oracle 目标。在有限的 LOB 模式下,Amazon DMS将您设置为长度超过 64 KB 的 LONG 或 LONG RAW 列的任何数据截断为 64 KB。

  • Amazon DMS不支持用于加载 XMLTYPE 列的完整 LOB 模式。相反,您可以使用有限的 LOB 模式将 XMLTYPE 列迁移到 Oracle 目标。在有限的 LOB 模式下,DMS 会截断任何大于用户定义的 “最大 LOB 大小” 变量的数据。“最大 LOB 大小” 的最大推荐值为 100MB。

  • Amazon DMS 不复制名称包含撇号的表。

  • Amazon DMS 不支持动态视图中的 CDC。

  • Amazon DMS对于带有溢出区段的按索引组织的表,不支持 CDC。

  • 使用 Oracle LogMiner 访问重做日志时Amazon DMS,存在以下限制:

    • 对于且仅限 Oracle 12,Amazon DMS 不复制对 LOB 列的任何更改。

    • 对于所有 Oracle 版本,Amazon DMS 不复制对 XMLTYPE 和 LOB 列的 UPDATE 操作结果。

    • Amazon DMS在使用 Oracle 时不支持复制中的 XA 事务 LogMiner。

    • Oracle LogMiner 不支持与可插拔数据库 (PDB) 的连接。要连接到 PDB,请使用 Binary Reader 访问重做日志。

    • 不支持缩小空间操作。

  • 当您使用 Binary Reader 时,Amazon DMS 具有以下限制:

    • 它不支持表集群。

    • 它仅支持表级SHRINK SPACE操作。此级别包括完整表、分区和子分区。

    • 它不支持使用键压缩对索引组织的表进行更改。

    • 它不支持在原始设备上实现在线重做日志。

    • Binary Reader 仅对自我管理的 Oracle 数据库支持 TDE,因为 RDS for Oracle 不支持检索 TDE 加密密钥的钱包密码。

  • Amazon DMS不支持使用 Oracle Automent Storage Management(ASM)与 Amazon RDS Oracle 源连接

  • Amazon DMS 不支持虚拟列。

  • Amazon DMS 不支持基于 ROWID 列的 ROWID 数据类型或具体化视图。

  • Amazon DMS 不会加载或捕获全局临时表。

  • 对于使用复制的 S3 目标,请在每列上启用补充日志记录,以便源行更新可以捕获每个列的值。示例如下:alter table yourtablename add supplemental log data (all) columns;.

  • 对包含复合唯一键的行的更新null无法在目标系统上复制。

  • Amazon DMS不支持在同一个源端点上使用多个 Oracle TDE 加密密钥。每个端点只能有一个 TDE 加密密钥名称securityDbEncryptionName “” 的属性,此密钥只能有一个 TDE 密码。

  • 从适用于 Oracle 的 Amazon RDS 进行复制时,只有加密的表空间和 Oracle 才支持 TDE LogMiner。

  • Amazon DMS不支持快速连续的多个表重命名操作。

  • 当使用 Oracle 19.0 作为源时,Amazon DMS不支持以下功能:

    • 数据保护 DML 重定向

    • 分区混合表

    • 仅限架构的 Oracle 账户

  • Amazon DMS不支持迁移类型为 or 的表BIN$或视图DR$

  • 从 Oracle 18.x 开始,Amazon DMS不支持 Oracle Express 版(Oracle Database XE)中的变更数据捕获 (CDC)。

  • 从 CHAR 列迁移数据时,DMS 会截断所有尾部空格。

  • Amazon DMS不支持虚拟专用数据库 (VPD)。

  • Amazon DMS不支持从应用程序容器复制。

  • Amazon DMS不支持执行 Oracle 闪回数据库和还原点,因为这些操作会影响 Oracle 重做日志文件的一致性。

Oracle 终端节点的 SSL 支持

Amazon DMS Oracle 终端节点支持 SSL V3 用于 noneverify-ca SSL 模式。要将 SSL 用于 Oracle 终端节点,请上传终端节点的 Oracle wallet 而不是 .pem 证书文件。

为 Oracle SSL 使用现有证书

要使用现有的 Oracle 客户端安装,从 CA 证书文件创建 Oracle wallet 文件,请执行以下步骤。

在 Amazon DMS 中为 Oracle SSL 使用现有 Oracle 客户端安装
  1. 通过运行以下命令将 ORACLE_HOME 系统变量设置为 dbhome_1 目录的位置。

    prompt>export ORACLE_HOME=/home/user/app/user/product/12.1.0/dbhome_1
  2. $ORACLE_HOME/lib 附加到 LD_LIBRARY_PATH 系统变量。

    prompt>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
  3. $ORACLE_HOME/ssl_wallet 处的 Oracle wallet 创建一个目录。

    prompt>mkdir $ORACLE_HOME/ssl_wallet
  4. 将 CA 证书 .pem 文件放入 ssl_wallet 目录中。如果您使用 Amazon RDS,则可以下载由 Amazon RDS 托管的rds-ca-2015-root.pem根 CA 证书文件。有关下载此文件的更多信息,请参阅《Amazon RDS 用户指南》中的使用 SSL/TLS 来加密与数据库实例的连接

  5. 运行下列命令以创建 Oracle wallet。

    prompt>orapki wallet create -wallet $ORACLE_HOME/ssl_wallet -auto_login_only prompt>orapki wallet add -wallet $ORACLE_HOME/ssl_wallet -trusted_cert -cert $ORACLE_HOME/ssl_wallet/ca-cert.pem -auto_login_only

完成前面的步骤之后,您可以通过指定 certificate-wallet 参数,使用 ImportCertificate API 调用来导入 wallet 文件。然后,在创建或修改 Oracle 终端节点时,如果选择 verify-ca 作为 SSL 模式,您可以使用导入的 wallet 证书。

注意

Oracle 钱包是二进制文件。 AmazonDMS 按原样接受这些文件。

使用适用于 Oracle SSL 的自签名证书

要将自签名证书用于 Oracle SSL,请执行以下步骤,假设 Oracle 钱包密码为oracle123

在 Amazon DMS 中使用适用于 Oracle SSL 的自签名证书
  1. 创建一个您将用于处理自签名证书的目录。

    mkdir -p /u01/app/oracle/self_signed_cert
  2. 转到您在上一步创建的目录中。

    cd /u01/app/oracle/self_signed_cert
  3. 创建根密钥。

    openssl genrsa -out self-rootCA.key 2048
  4. 使用在上一步中创建的根密钥对根证书进行自签名。

    openssl req -x509 -new -nodes -key self-rootCA.key -sha256 -days 3650 -out self-rootCA.pem

    使用如下所示的输入参数。

    • Country Name (2 letter code) [XX],例如:AU

    • State or Province Name (full name) [],例如:NSW

    • Locality Name (e.g., city) [Default City],例如:Sydney

    • Organization Name (e.g., company) [Default Company Ltd],例如:AmazonWebService

    • Organizational Unit Name (e.g., section) [],例如:DBeng

    • Common Name (e.g., your name or your server's hostname) [],例如:aws

    • Email Address [],例如:abcd.efgh@amazonwebservice.com

  5. 为 Oracle 数据库创建 Oracle wallet 目录。

    mkdir -p /u01/app/oracle/wallet
  6. 创建新的 Oracle wallet。

    orapki wallet create -wallet "/u01/app/oracle/wallet" -pwd oracle123 -auto_login_local
  7. 将根证书添加到 Oracle wallet。

    orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd oracle123 -trusted_cert -cert /u01/app/oracle/self_signed_cert/self-rootCA.pem
  8. 列出 Oracle wallet 的内容。该列表应包含根证书。

    orapki wallet display -wallet /u01/app/oracle/wallet -pwd oracle123

    例如,这可能与以下内容类似。

    Requested Certificates: User Certificates: Trusted Certificates: Subject: CN=aws,OU=DBeng,O= AmazonWebService,L=Sydney,ST=NSW,C=AU
  9. 使用 ORAPKI 实用程序生成证书签名请求 (CSR)。

    orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd oracle123 -dn "CN=aws" -keysize 2048 -sign_alg sha256
  10. 运行以下命令。

    openssl pkcs12 -in /u01/app/oracle/wallet/ewallet.p12 -nodes -out /u01/app/oracle/wallet/nonoracle_wallet.pem

    其输出如下所示。

    Enter Import Password: MAC verified OK Warning unsupported bag type: secretBag
  11. 将“dms”用作公用名。

    openssl req -new -key /u01/app/oracle/wallet/nonoracle_wallet.pem -out certdms.csr

    使用如下所示的输入参数。

    • Country Name (2 letter code) [XX],例如:AU

    • State or Province Name (full name) [],例如:NSW

    • Locality Name (e.g., city) [Default City],例如:Sydney

    • Organization Name (e.g., company) [Default Company Ltd],例如:AmazonWebService

    • Organizational Unit Name (e.g., section) [],例如:aws

    • Common Name (e.g., your name or your server's hostname) [],例如:aws

    • Email Address [],例如:abcd.efgh@amazonwebservice.com

    确保这与步骤 4 不同。例如,您可以通过将组织单位名称更改为其他名称来实现此目的,如下所示。

    在下面输入要随证书请求一起发送的其他属性。

    • A challenge password [],例如:oracle123

    • An optional company name [],例如:aws

  12. 获取证书签名。

    openssl req -noout -text -in certdms.csr | grep -i signature

    这篇文章的签名密钥是sha256WithRSAEncryption

  13. 运行以下命令生成证书 (.crt) 文件。

    openssl x509 -req -in certdms.csr -CA self-rootCA.pem -CAkey self-rootCA.key -CAcreateserial -out certdms.crt -days 365 -sha256

    这将显示类似下面的输出。

    Signature ok subject=/C=AU/ST=NSW/L=Sydney/O=awsweb/OU=DBeng/CN=aws Getting CA Private Key
  14. 将证书添加到 wallet。

    orapki wallet add -wallet /u01/app/oracle/wallet -pwd oracle123 -user_cert -cert certdms.crt
  15. 查看钱包。它应该有两个条目。参见下面的代码。

    orapki wallet display -wallet /u01/app/oracle/wallet -pwd oracle123
  16. 配置 sqlnet.ora 文件 ($ORACLE_HOME/network/admin/sqlnet.ora)。

    WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /u01/app/oracle/wallet/) ) ) SQLNET.AUTHENTICATION_SERVICES = (NONE) SSL_VERSION = 1.0 SSL_CLIENT_AUTHENTICATION = FALSE SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA)
  17. 停止 Oracle 侦听器。

    lsnrctl stop
  18. listener.ora 文件 ($ORACLE_HOME/network/admin/listener.ora) 中添加 SSL 条目。

    SSL_CLIENT_AUTHENTICATION = FALSE WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /u01/app/oracle/wallet/) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = SID) (ORACLE_HOME = ORACLE_HOME) (SID_NAME = SID) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
  19. 配置 tnsnames.ora 文件 ($ORACLE_HOME/network/admin/tnsnames.ora)。

    <SID>= (DESCRIPTION= (ADDRESS_LIST = (ADDRESS=(PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = <SID>) ) ) <SID>_ssl= (DESCRIPTION= (ADDRESS_LIST = (ADDRESS=(PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = <SID>) ) )
  20. 重新启动 Oracle 侦听器。

    lsnrctl start
  21. 显示 Oracle 侦听器状态。

    lsnrctl status
  22. 使用 sqlplus 和 SSL tnsnames 条目测试从本地主机到数据库的 SSL 连接。

    sqlplus -L ORACLE_USER@SID_ssl
  23. 验证您已使用 SSL 成功连接。

    SELECT SYS_CONTEXT('USERENV', 'network_protocol') FROM DUAL; SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') -------------------------------------------------------------------------------- tcps
  24. 将目录更改为具有自签名证书的目录。

    cd /u01/app/oracle/self_signed_cert
  25. 创建 Amazon DMS 将使用的新客户端 Oracle wallet。

    orapki wallet create -wallet ./ -auto_login_only
  26. 将自签名根证书添加到 Oracle wallet。

    orapki wallet add -wallet ./ -trusted_cert -cert rootCA.pem -auto_login_only
  27. 列出 Amazon DMS 将使用的 Oracle wallet 的内容。该列表应包含自签名根证书。

    orapki wallet display -wallet ./

    其输出如下所示。

    Trusted Certificates: Subject: CN=aws,OU=DBeng,O=AmazonWebService,L=Sydney,ST=NSW,C=AU
  28. 将您刚刚创建的 Oracle wallet 上传到 Amazon DMS。

使用 Oracle 作为 Amazon DMS 源时支持的加密方法

在下表中,您可以找到使用 Oracle 源数据库时 Amazon DMS 支持的透明数据加密 (TDE) 方法。

重做日志访问方法 TDE 表空间 TDE 列
甲骨文 LogMiner
Binary Reader

Amazon DMS在列级别和表空间级别上使用 Binary Reader 时都支持 Oracle TDE。要使用 TDE 加密Amazon DMS,请首先确定存储 TDE 加密密钥和 TDE 密码的 Oracle 钱包位置。然后为您的 Oracle 源端点确定正确的 TDE 加密密钥和密码。

识别和指定 TDE 加密的加密密钥和密码
  1. 运行以下查询,在 Oracle 数据库主机上查找 Oracle 加密钱包。

    SQL> SELECT WRL_PARAMETER FROM V$ENCRYPTION_WALLET; WRL_PARAMETER -------------------------------------------------------------------------------- /u01/oracle/product/12.2.0/dbhome_1/data/wallet/

    这是钱包的位置。/u01/oracle/product/12.2.0/dbhome_1/data/wallet/

  2. 使用以下加密选项之一获取主密钥 ID,具体取决于哪个选项返回此值。

    1. 对于表级或列级加密,请运行以下查询。

      SQL> SELECT OBJECT_ID FROM ALL_OBJECTS WHERE OWNER='DMS_USER' AND OBJECT_NAME='TEST_TDE_COLUMN' AND OBJECT_TYPE='TABLE'; OBJECT_ID --------------- 81046 SQL> SELECT MKEYID FROM SYS.ENC$ WHERE OBJ#=81046; MKEYID ------------ AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

      这里AWGDC9glSk8Xv+3bVveiVSg是主密钥 ID (MKEYID)。如果您得到的值为MKEYID,则可以继续执行步骤 3。否则,继续执行步骤 2.2。

      注意

      结尾的字符串'A'字符 (AAA...) 不是该值的一部分。

    2. 对于表空间级加密,请运行以下查询。

      SQL> SELECT TABLESPACE_NAME, ENCRYPTED FROM dba_tablespaces; TABLESPACE_NAME ENC ------------------------------ --- SYSTEM NO SYSAUX NO UNDOTBS1 NO TEMP NO USERS NO TEST_ENCRYT YES SQL> SELECT name,utl_raw.cast_to_varchar2( utl_encode.base64_encode('01'||substr(mkeyid,1,4))) || utl_raw.cast_to_varchar2( utl_encode.base64_encode(substr(mkeyid,5,length(mkeyid)))) masterkeyid_base64 FROM (SELECT t.name, RAWTOHEX(x.mkid) mkeyid FROM v$tablespace t, x$kcbtek x WHERE t.ts#=x.ts#) WHERE name = 'TEST_ENCRYT'; NAME MASTERKEYID_BASE64 ------------------------------ ---------------------------------- TEST_ENCRYT AWGDC9glSk8Xv+3bVveiVSg=

      这里AWGDC9glSk8Xv+3bVveiVSg是主密钥 ID (TEST_ENCRYT)。如果步骤 2.1 和 2.2 都返回一个值,则它们始终相同。

      结尾'='字符不是该值的一部分。

  3. 在命令行中,列出源 Oracle 数据库主机上的加密 Wallet 条目。

    $ mkstore -wrl /u01/oracle/product/12.2.0/dbhome_1/data/wallet/ -list Oracle Secret Store entries: ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ORACLE.SECURITY.DB.ENCRYPTION.AY1mRA8OXU9Qvzo3idU4OH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA ORACLE.SECURITY.DB.ENCRYPTION.MASTERKEY ORACLE.SECURITY.ID.ENCRYPTION. ORACLE.SECURITY.KB.ENCRYPTION. ORACLE.SECURITY.KM.ENCRYPTION.AY1mRA8OXU9Qvzo3idU4OH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    找到包含您在步骤 2 (AWGDC9glSk8Xv+3bVveiVSg) 中找到的主密钥 ID 的条目。此条目是 TDE 加密密钥名称。

  4. 查看您在上一步中找到的条目的详细信息。

    $ mkstore -wrl /u01/oracle/product/12.2.0/dbhome_1/data/wallet/ -viewEntry ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Oracle Secret Store Tool : Version 12.2.0.1.0 Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. Enter wallet password: ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA = AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==

    输入钱包密码以查看结果。

    这里,右边的值'='是 TDE 密码。

  5. 通过设置securityDbEncryptionName额外的连接属性,为 Oracle 源端点指定 TDE 加密密钥名称。

    securityDbEncryptionName=ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  6. 作为 Oracle 源密码值的一部分,在控制台上提供此密钥的关联 TDE 密码。使用以下顺序格式化逗号分隔的密码值,以 TDE 密码值结尾。

    Oracle_db_password,ASM_Password,AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==

    无论 Oracle 数据库配置如何,都按此顺序指定密码值。例如,如果您使用 TDE 但您的 Oracle 数据库不使用 ASM,请按以下逗号分隔顺序指定密码值。

    Oracle_db_password,,AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==

如果您指定的 TDE 凭证不正确,则Amazon DMS迁移任务不会失败。但是,该任务也不会读取目标数据库或将正在进行的复制更改应用于目标数据库。启动任务后,监视控制台迁移任务页面上的表统计信息,以确保复制更改。

如果 DBA 在任务运行时更改 Oracle 数据库的 TDE 凭据值,则任务将失败。错误消息包含新的 TDE 加密密钥名称。要指定新值并重新启动任务,请使用前面的步骤。

重要

您无法操作在 Oracle 自动存储管理 (ASM) 位置创建的 TDE 钱包,因为诸如cpmvorapki和之类的操作系统级命令会mkstore损坏存储在 ASM 位置的钱包文件。此限制仅适用于存储在 ASM 位置的 TDE 钱包文件,但不适用于存储在本地 OS 目录中的 TDE 钱包文件。

要使用操作系统级别命令操作存储在 ASM 中的 TDE 钱包,请创建本地密钥库并将 ASM 密钥库合并到本地密钥库中,如下所示:

  1. 创建本地密钥库。

    ADMINISTER KEY MANAGEMENT create keystore file system wallet location identified by wallet password;
  2. 将 ASM 密钥库合并到本地密钥库中。

    ADMINISTER KEY MANAGEMENT merge keystore ASM wallet location identified by wallet password into existing keystore file system wallet location identified by wallet password with backup;

然后,要列出加密钱包条目和 TDE 密码,请针对本地密钥库运行步骤 3 和 4。

使用 Oracle 作为 Amazon DMS 的源时支持的压缩方法

在下表中,您可以找到使用 Oracle 源数据库时,Amazon DMS 支持哪些压缩方法。如表所示,压缩支持既取决于您的 Oracle 数据库版本,也取决于 DMS 是否配置为使用 Oracle LogMiner 访问重做日志。

版本 基本 OLTP

HCC(来自 Oracle 11g R2 或更高版本)

其他
Oracle 10 不适用 不适用
甲骨文 11 或更新版本 — 甲骨文 LogMiner 是-Oracle 支持的任何压缩方法 LogMiner。
Oracle 11 或更新版本 — 二进制读取器 是 — 有关更多信息,请参阅以下注释。
注意

当 Oracle 源终端节点配置为使用 Binary Reader 时,只有满载任务才支持 HCC 压缩方法的查询低级别。

将 Oracle 作为 Amazon DMS 的源时复制嵌套表

Amazon DMS支持复制包含作为嵌套表或已定义类型的列的 Oracle 表。要启用此功能,请将以下额外连接属性设置添加到 Oracle 源端点。

allowSelectNestedTables=true;

Amazon DMS 从 Oracle 嵌套表中创建目标表作为目标上的常规父表和子表,而不具有唯一约束。要访问目标上的正确数据,请联接父表和子表。为此,首先在目标子表中的 NESTED_TABLE_ID 列上手动创建非唯一索引。然后,您可以将 ON 联接子句中的 NESTED_TABLE_ID 列与子表名称对应的父列一起使用。此外,在 Amazon DMS 更新或删除目标子表数据时,创建此类索引可提高性能。有关示例,请参阅 目标上的父表和子表联接示例

我们建议您将任务配置为在满载完成后停止。然后,为目标上的所有复制子表创建这些非唯一索引,然后恢复任务。

如果捕获的嵌套表添加到现有父表(已捕获或未捕获),Amazon DMS 会正确处理该表。但是,不会创建相应目标表的非唯一索引。在此情况下,如果目标子表变得非常大,性能可能会受到影响。在这种情况下,我们建议您停止任务,创建索引,然后再恢复任务。

在嵌套表复制到目标后,让 DBA 运行父表和相应子表上的联接以平展数据。

将 Oracle 嵌套表复制为源的先决条件

确保复制所有复制的嵌套表的父表。在 Amazon DMS 表映射中包含父表(包含嵌套表列的表)和子表(即嵌套表)。

支持的 Oracle 嵌套表类型作为源

Amazon DMS 支持以下 Oracle 嵌套表类型作为源:

  • 数据类型

  • 用户定义的对象

对 Oracle 嵌套表作为源的 Amazon DMS 支持的限制

在支持 Oracle 嵌套表作为源时 Amazon DMS 具有以下限制:

  • Amazon DMS 仅支持一个级别的表嵌套。

  • Amazon DMS 表映射不检查是否同时选择了父表和子表进行复制。也就是说,可以选择没有子表的父表或没有父表的子表。

Amazon DMS 如何将 Oracle 嵌套表复制为源

Amazon DMS 将父表和嵌套表复制到目标,如下所示:

  • Amazon DMS 创建与源相同的父表。然后,它将父表中的嵌套列定义为 RAW(16),并在其 NESTED_TABLE_ID 列中包含对父表的嵌套表的引用。

  • Amazon DMS 创建与嵌套源相同的子表,但附带一个名为 NESTED_TABLE_ID 的附加列。此列的类型和值与相应的父嵌套列相同,含义也相同。

目标上的父表和子表联接示例

要平展父表,请运行父表和子表之间的联接,如以下示例所示:

  1. 创建 Type 表。

    CREATE OR REPLACE TYPE NESTED_TEST_T AS TABLE OF VARCHAR(50);
  2. 使用前面定义的列(类型为 NESTED_TEST_T)列创建父表。

    CREATE TABLE NESTED_PARENT_TEST (ID NUMBER(10,0) PRIMARY KEY, NAME NESTED_TEST_T) NESTED TABLE NAME STORE AS NAME_KEY;
  3. 通过对其 CHILD.NESTED_TABLE_IDPARENT.NAME 匹配的 NAME_KEY 子表使用联接来平展表 NESTED_PARENT_TEST

    SELECT … FROM NESTED_PARENT_TEST PARENT, NAME_KEY CHILD WHERE CHILD.NESTED_ TABLE_ID = PARENT.NAME;

将 Oracle 作为 Amazon DMS 源时的额外连接属性

您可以使用额外的连接属性配置 Oracle 源。在创建源终端节点时,您可以指定这些设置。如果您具有多个连接属性设置,请用分号将它们彼此分开,并且不需要额外的空格(例如,oneSetting=oneValue;thenAnother=anotherValue)。

下表显示了可用于将 Oracle 数据库配置为 Amazon DMS 源的额外连接属性。

名称 描述

escapeCharacter

将此属性设置为转义字符。此转义字符允许您使单个通配符在表映射表达式中表现为普通字符。有关更多信息,请参阅表映射中的通配符

默认值:空

有效值:除通配符之外的任何字符

示例:escapeCharacter=#

addSupplementalLogging

设置此属性可设置 Oracle 数据库的表级别补充日志记录。此属性将对为迁移任务选择的所有表启用 PRIMARY KEY 补充日志记录。

默认值:N

有效值:Y/N

示例:addSupplementalLogging=Y;

注意

如果您使用此选项,则仍需启用前面讨论过的数据库级别补充日志记录。

additionalArchivedLogDestId

在主备用设置archivedLogDestId中将此属性设置为。当将 Oracle Data Guard 数据库作为源时,此属性非常有用。在此示例中,Amazon DMS 需要知道从哪个目标获取存档重做日志以读取更改。这是因为之前的主实例现在是备用实例。

虽然 Amazon DMS 支持使用 Oracle RESETLOGS 选项来打开数据库,但除非有必要,否则永远不要使用 RESETLOGS。有关的其他信息RESETLOGS,请参阅《Oracle® 数据库Backup 和还原用户指南》中的 RMAN 数据修复概念

默认值:无

有效值:存档目标 ID

示例:additionalArchivedLogDestId=2;

allowSelectNestedTables

将此属性设置为 true 可复制包含作为嵌套表或已定义类型的列的 Oracle 表。有关更多信息,请参阅将 Oracle 作为 Amazon DMS 的源时复制嵌套表

默认值:false

有效值:true/false

示例:allowSelectNestedTables=true;

ExtraArchivedLogDestIds

指定一个或多个已存档重做日志的多个目标的 ID。这些 ID 是 v$archived_log 视图中的 dest_id 列的值。在 primary-to-single 安装或设置中,将此设置与 archivedLogDest Id extra 连接属性一起使用。 primary-to-multiple-standby

当您使用 Oracle Data Guard 数据库作为源时,此设置在切换中非常有用。在本例中,Amazon DMS 需要有关从哪个目标获取存档重做日志以读取更改的信息。Amazon DMS 需要此信息,因为在切换之后,先前的主实例变为备用实例。

默认值:无

有效值:存档目标 ID

示例:

archivedLogDestId=1;ExtraArchivedLogDestIds=[2,3,4]

useLogminerReader

将此属性设置为 Y,以便使用 LogMiner 实用工具(默认)捕获更改数据。如果希望 Amazon DMS 将重做日志作为二进制文件进行访问,请将此选项设置为 N。将此选项设置为 N 时,还要添加设置 useBfile =Y。有关此设置和使用 Oracle 自动存储管理 (ASM) 的更多信息,请参阅在 CDC 中使用 Oracle LogMiner 或Amazon DMS二进制阅读器

默认值:Y

有效值:Y/N

示例:useLogminerReader=N;useBfile=Y;

useBfile

将此属性设置为 Y,以便使用 Binary Reader 实用程序捕获更改数据。设置为 NuseLogminerReader 可将此属性设置为 Y。要在将 Amazon RDS for Oracle 作为源时使用 Binary Reader,请设置其他属性。有关此设置以及使用 Oracle Automatic Storage Management (ASM) 的更多信息,请参阅在 CDC 中使用 Oracle LogMiner 或Amazon DMS二进制阅读器

默认值:N

有效值:Y/N

示例:useLogminerReader=N;useBfile=Y;

parallelASMReadThreads

设置此属性可更改 DMS 配置通过 Oracle Automatic Storage Management(ASM)执行更改数据捕获(CDC)执行更改数据捕获(CDC)执行更改数据捕获(CDC 您可以指定一个介于 2(默认值)和 8(最大值)之间的整数值。将此属性与 readAheadBlocks 属性一起使用。有关更多信息,请参阅 将 CDC 任务配置为使用二进制阅读器和 RDS for Oracle 源代码Amazon DMS

设置对象尾部效果的半径 (单位为米)。

有效值:从 2 到 8 的整数

示例:parallelASMReadThreads=6;readAheadBlocks=150000;

readAheadBlocks

设置此属性可更改 DMS 配置通过 Oracle Automatic Storage Management(ASM)执行CDC所用的预读数据块数。您可以指定一个介于 1000(默认值)和 200000(最大值)之间的整数值。将此属性与 parallelASMReadThreads 属性一起使用。有关更多信息,请参阅 将 CDC 任务配置为使用二进制阅读器和 RDS for Oracle 源代码Amazon DMS

默认值:1000

有效值:从 1000 到 200000 的整数

示例:parallelASMReadThreads=6;readAheadBlocks=150000;

accessAlternateDirectly

将此属性设置为 false,以便使用 Binary Reader 捕获作为源的 Amazon RDS for Oracle 的更改数据。这将指示 DMS 实例不要使用直接文件访问通过任何指定的路径前缀替换来访问重做日志。有关更多信息,请参阅 将 CDC 任务配置为使用二进制阅读器和 RDS for Oracle 源代码Amazon DMS

默认值:true

有效值:true/false

示例:useLogminerReader=N;useBfile=Y;accessAlternateDirectly=false;

useAlternateFolderForOnline 将此属性设置为 true,以便使用 Binary Reader 捕获作为源的 Amazon RDS for Oracle 的更改数据。这将指示 DMS 实例使用任何指定的前缀替换来访问所有在线重做日志。有关更多信息,请参阅 将 CDC 任务配置为使用二进制阅读器和 RDS for Oracle 源代码Amazon DMS

默认值:false

有效值:true/false

示例:useLogminerReader=N;useBfile=Y;accessAlternateDirectly=false; useAlternateFolderForOnline=true;

oraclePathPrefix 将此字符串属性设置为必需值,以便使用 Binary Reader 捕获作为源的 Amazon RDS for Oracle 的更改数据。此值指定用于访问重做日志的默认 Oracle root。有关更多信息,请参阅 将 CDC 任务配置为使用二进制阅读器和 RDS for Oracle 源代码Amazon DMS

默认值:none

有效值:/rdsdbdata/db/ORCL_A/

示例:useLogminerReader=N;useBfile=Y;accessAlternateDirectly=false; useAlternateFolderForOnline=true;oraclePathPrefix=/rdsdbdata/db/ORCL_A/;

usePathPrefix 将此字符串属性设置为必需值,以便使用 Binary Reader 捕获作为源的 Amazon RDS for Oracle 的更改数据。此值指定用于替换访问重做日志的默认 Oracle root 的路径前缀。有关更多信息,请参阅 将 CDC 任务配置为使用二进制阅读器和 RDS for Oracle 源代码Amazon DMS

默认值:none

有效值:/rdsdbdata/log/

示例:useLogminerReader=N;useBfile=Y;accessAlternateDirectly=false; useAlternateFolderForOnline=true;oraclePathPrefix=/rdsdbdata/db/ORCL_A/; usePathPrefix=/rdsdbdata/log/;

replacePathPrefix 将此属性设置为 true,以便使用 Binary Reader 捕获作为源的 Amazon RDS for Oracle 的更改数据。此设置指示 DMS 实例使用指定的 usePathPrefix 设置替换默认的 Oracle root,以访问重做日志。有关更多信息,请参阅 将 CDC 任务配置为使用二进制阅读器和 RDS for Oracle 源代码Amazon DMS

默认值:false

有效值:true/false

示例:useLogminerReader=N;useBfile=Y;accessAlternateDirectly=false; useAlternateFolderForOnline=true;oraclePathPrefix=/rdsdbdata/db/ORCL_A/; usePathPrefix=/rdsdbdata/log/;replacePathPrefix=true;

retryInterval

指定系统在重新发送查询之前等待的秒数。

默认值:5

有效值:从 1 开始的数字

示例:retryInterval=6;

archivedLogDestId

指定已存档重做日志的目标的 ID。该值应与 v$archived_log 视图的 dest_id 列中的数相同。如果您使用其他重做日志目标,我们建议您使用additionalArchivedLogDestId属性来指定其他目标 ID。这样做将确保从一开始便访问正确的日志,从而提高性能。

默认值:1

有效值:数字

示例:archivedLogDestId=1;

archivedLogsOnly

在此字段设置为 Y 时,Amazon DMS 仅访问已存档重做日志。如果已存档重做日志仅存储在 Oracle ASM 上,则 Amazon DMS 用户账户需要获得 ASM 权限。

默认值:N

有效值:Y/N

示例:archivedLogsOnly=Y;

numberDataTypeScale

指定数字的小数位数。你可以选择最大 38 的比例,也可以为 FLOAT 选择 -1,或者为 VARCHAR 选择 -2。默认情况下,NUMBER 数据类型将转换为精度 38,小数位数 10。

调整渲染效果的缩放。

有效值:-2 到 38(VARCHAR 为 -2,FLOAT 为 -1)

示例:numberDataTypeScale=12

注意

选择精确尺度组合,即 -1(FLOAT)或 -2(VARCHAR)。DMS 支持 Oracle 支持的任何精确尺度组合。如果精度等于 39 或以上,请选择 -2 (VARCHAR)。Oracle 数据库的 numberDataType比例设置仅用于 NUMBER 数据类型(没有明确的精度和小数位定义)。

failTasksOnLobTruncation

当设置为 true 时,如果 LOB 列的实际大小大于指定的 LobMaxSize,此属性将导致任务失败。

如果任务设置为受限 LOB 模式并且此选项设置为 true,任务将失败,而不是截断 LOB 数据。

默认值:false

有效值:布尔值

示例:failTasksOnLobTruncation=true;

readTableSpaceName

当设置为 true 时,此属性支持表空间复制。

默认值:false

有效值:布尔值

示例:readTableSpaceName=true;

enableHomogenousTablespace

将此属性设置为启用同类表空间复制,并在目标上的相同表空间下创建现有的表或索引。

默认值:false

有效值:true/false

示例:enableHomogenousTablespace=true

standbyDelayTime

使用此属性指定备用同步延迟时间 (以分钟为单位)。如果源是 Active Data Guard 备用数据库,请使用此属性指定主数据库和备用数据库之间的时间滞后。

在 Amazon DMS 中,您可以创建 Oracle CDC 任务,此任务使用 Active Data Guard 备用实例作为源来复制持续更改。这样一来,便无需连接到可能处于生产状态的活动数据库。

默认值:0

有效值:数字

示例:standbyDelayTime=1;

securityDbEncryptionName

指定一个密钥的名称,该密钥用于对 Oracle 源数据库中的列和表空间进行透明数据加密 (TDE)。有关在 Oracle 源终端节点上设置此属性及其关联密码的更多信息,请参阅使用 Oracle 作为 Amazon DMS 源时支持的加密方法

默认值:""

有效值:String

securityDbEncryptionName=ORACLE.SECURITY.DB.ENCRYPTION.Adg8m2dhkU/0v/m5QUaaNJEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

spatialSdo2GeoJsonFunctionName

对于迁移到 PostgreSQL 目标的 Oracle 12.1 版或更早版本的源,请使用此属性将 SDO_GEOMETRY 格式转换为 GEOJSON 格式。

默认情况下,Amazon DMS 调用必须存在且可供 Amazon DMS 用户访问的 SDO2GEOJSON 自定义函数。或者,您也可以自行创建模仿 SDOGEOJSON 操作的自定义函数,并设置 spatialSdo2GeoJsonFunctionName 以改为调用它。

默认值:SDO2GEOJSON

有效值:String

示例:spatialSdo2GeoJsonFunctionName=myCustomSDO2GEOJSONFunction;

exposeViews

使用此属性从视图中提取数据一次;您不能将其用于持续复制。当您从视图中提取数据时,视图显示为目标架构上的表。

默认值:false

有效值:true/false

示例:exposeViews=true

enableHomogenousPartitionOps

将此属性设置为,true以启用 Oracle 同构迁移的 Oracle 分区和子分区 DDL 操作的复制。

请注意,此功能和增强功能是在Amazon DMS版本 3.4.7 中引入的。

默认值:false

有效值:true/false

示例:enableHomogenousPartitionOps=true

Oracle 的源数据类型

Amazon DMS 的 Oracle 终端节点支持大多数 Oracle 数据类型。下表列出了使用 Amazon DMS 时支持的 Oracle 源数据类型以及与 Amazon DMS 数据类型的默认映射。

注意

除了 LONG 和 LONG RAW 数据类型外,从 Oracle 源复制到 Oracle 目标(同构复制)时,所有源数据类型和目标数据类型都将相同。但是 LONG 数据类型将映射到 CLOB,LONG RAW 数据类型将映射到 BLOB。

有关如何查看目标中映射的数据类型的信息,请参阅有关所使用的目标终端节点的部分。

有关 Amazon DMS 数据类型的其他信息,请参阅DatAmazon abase Migration Service 数据类型

Oracle 数据类型

Amazon DMS 数据类型

BINARY_FLOAT

REAL4

BINARY_DOUBLE

REAL8

BINARY

BYTES

FLOAT (P)

如果精度小于或等于 24,请使用 REAL4。

如果精度大于 24,请使用 REAL8。

NUMBER (P,S)

当比例大于 0 时,使用 REAL8

根据numberDataTypeScale额外的连接属性得出的数字。

当小数位数为 0 时:

  • 并且精度小于或等于 2,请使用 INT1。

  • 如果精度大于 2 且小于或等于 4,请使用 INT2。

  • 如果精度大于 4 且小于或等于 9,请使用 INT4。

  • 如果精度大于 9,请使用 NUMERIC。

  • 如果精度大于或等于小数位数,请使用 NUMERIC。

在所有其他情况下,请使用 REAL8。

DATE

DATETIME

INTERVAL_YEAR TO MONTH

STRING (带 interval year_to_month 指示)

INTERVAL_DAY TO SECOND

STRING (带 interval day_to_second 指示)

TIMESTAMP

DATETIME

TIMESTAMP(有时区)

STRING (带 timestamp_with_timezone 指示)

带本地时区的 TIMESTAMP

STRING (带 timestamp_with_local_ timezone 指示)

CHAR

STRING

VARCHAR2

STRING

NCHAR

WSTRING

NVARCHAR2

WSTRING

RAW

BYTES

REAL

REAL8

BLOB

BLOB

要将此数据类型用于 Amazon DMS,必须允许对特定任务使用 BLOB 数据类型。Amazon DMS 仅在包含主键的表中支持 BLOB 数据类型。

CLOB

CLOB

要将此数据类型用于 Amazon DMS,必须允许对特定任务使用 CLOB 数据类型。在 CDC 期间,Amazon DMS 仅在包含主键的表中支持 CLOB 数据类型。

NCLOB

NCLOB

要将此数据类型用于 Amazon DMS,必须允许对特定任务使用 NCLOB 数据类型。在 CDC 期间,Amazon DMS 仅在包含主键的表中支持 NCLOB 数据类型。

LONG

CLOB

批量优化的应用模式(TurboStream CDC 模式)不支持 LONG 数据类型。

要将此数据类型与Amazon DMS LOB 一起使用,请为特定任务启用 LOB。

在 CDC 或完全加载期间,仅在具有主键的表中Amazon DMS支持 LOB 数据类型。

此外,Amazon DMS不支持用于加载 LONG 列的完整 LOB 模式。相反,您可以使用有限的 LOB 模式将 LONG 列迁移到 Oracle 目标。在有限的 LOB 模式下,Amazon DMS将您设置为长度超过 64 KB 的长列的所有数据截断为 64 KB。有关 Amazon DMS 中的 LOB 支持的更多信息,请参阅在 Amazon DMS 任务中为源数据库设置 LOB 支持

LONG RAW

BLOB

批量优化的应用模式(TurboStream CDC 模式)不支持 LONG RAW 数据类型。

要将此数据类型与Amazon DMS LOB 一起使用,请为特定任务启用 LOB。

在 CDC 或完全加载期间,仅在具有主键的表中Amazon DMS支持 LOB 数据类型。

此外,Amazon DMS不支持用于加载 LONG RAW 列的完整 LOB 模式。相反,您可以使用有限的 LOB 模式将 LONG RAW 列迁移到 Oracle 目标。在有限的 LOB 模式下,Amazon DMS将您设置为长度超过 64 KB 的 LONG RAW 列的任何数据截断为 64 KB。有关 Amazon DMS 中的 LOB 支持的更多信息,请参阅在 Amazon DMS 任务中为源数据库设置 LOB 支持

XMLTYPE

CLOB

SDO_GEOMETRY

BLOB(当 Oracle 迁移到 Oracle 时)

CLOB(当 Oracle 迁移到 PostgreSQL 时)

不支持且无法复制作为源的包含以下数据类型的列的 Oracle 表。复制带这些数据类型的列会生成 null 列。

  • BFILE

  • ROWID

  • REF

  • UROWID

  • 用户定义的数据类型

  • ANYDATA

  • VARRAY

注意

不支持虚拟列。

迁移 Oracle 空间数据类型

空间数据 可识别空间中对象或位置的几何信息。在 Oracle 数据库中,空间对象的几何描述存储在 SDO_GEOMETRY 类型的对象中。在此对象中,几何描述存储在用户定义表的单列中的单行中。

Amazon DMS 支持将 Oracle 类型 SDO_GEOMETRY 从 Oracle 源迁移到 Oracle 或 PostgreSQL 目标。

使用 Amazon DMS 迁移 Oracle 空间数据类型时,请注意以下考虑事项:

  • 迁移到 Oracle 目标时,请确保手动传输包含类型信息的 USER_SDO_GEOM_METADATA 条目。

  • 从 Oracle 源终端节点迁移到 PostgreSQL 目标终端节点时,Amazon DMS 会创建目标列。这些列具有默认的几何和地理类型信息,其 2D 维度和空间参考标识符 (SRID) 等于零 (0)。示例是 GEOMETRY, 2, 0

  • 对于迁移到 PostgreSQL 目标的 Oracle 12.1 版或更早版本的源,请使用 SDO2GEOJSON 函数或 spatialSdo2GeoJsonFunctionName 额外的连接属性,将 SDO_GEOMETRY 对象转换为 GEOJSON 格式。有关更多信息,请参阅将 Oracle 作为 Amazon DMS 源时的额外连接属性

  • Amazon DMS仅在完整 LOB 模式下支持 Oracle 空间列迁移。 Amazon DMS不支持有限的 LOB 或行内 LOB 模式。有关 LOB 模式的更多信息,请参阅在 Amazon DMS 任务中为源数据库设置 LOB 支持

  • 由于Amazon DMS仅支持 Full LOB 模式迁移 Oracle Spatial Columns,因此列的表需要主键和唯一键。如果表没有主键和唯一键,则会跳过表的迁移。