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

将 Oracle 数据库作为 AWS DMS 的源

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

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

  • Oracle Enterprise Edition

  • Oracle Standard Edition

  • Oracle Express 版本

  • Oracle Personal Edition

对于将自管理 Oracle 数据库作为源,AWS DMS 支持 10.2 及更高版本、11g 直至 12.2、18c 以及 19c 版本的所有 Oracle 数据库版本。对于由 Amazon RDS 提供的 Amazon 托管 Oracle 数据库,AWS DMS 支持用于版本 11g(版本 11.2.0.3.v1 及更高版本)直至 12.2、18c 以及 19c 版本的所有 Oracle 数据库版本。

注意
  • AWS DMS 版本 3.3.2 和更高版本中支持将 Oracle 版本 19c 作为源。

  • AWS DMS 版本 3.3.1 和更高版本中支持将 Oracle 版本 18c 作为源。

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

将 Oracle 数据库配置为 AWS DMS 源的源的步骤如下所示:

  1. 如果要创建仅限 CDC 的任务或完全加载加上 CDC 的任务,请选择 Oracle LogMiner 或 AWS DMS Binary Reader 来捕获数据更改。选择 LogMiner 或 Binary Reader 可确定某些以后的权限和配置任务。有关 LogMiner 和 Binary Reader 的比较,请参阅下一节。

  2. 创建具有对 AWS DMS 的适当权限的 Oracle 用户。如果您要创建仅限完全加载的任务,则不需要进一步配置。

  3. 创建符合所选配置的 DMS 终端节点。

有关使用 Oracle 数据库和 AWS DMS 的其他详细信息,请参阅以下章节。

将 Oracle LogMiner 或 AWS DMS Binary Reader 用于更改数据捕获 (CDC)

Oracle 提供了两种方法在进行更改处理时读取重做日志:Oracle LogMiner 和 AWS DMS Binary Reader。LogMiner 是一个 Oracle API,用于读取联机重做日志和存档的重做日志文件。Binary Reader 是一个 AWS DMS 本机方法,用于直接读取和分析原始重做日志文件。

默认情况下,AWS DMS 将 Oracle LogMiner 用于更改数据捕获 (CDC)。

将 LogMiner 与 AWS DMS 一起使用的好处包括:

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

  • LogMiner 提供了更简单的配置,特别是与 Binary Reader 的直接访问设置相比或与使用 Oracle Automatic Storage Management (ASM) 管理的重做日志相比。

  • 对于完全加载和持续复制 (CDC),LogMiner 支持以下混合列式压缩 (HCC) 类型:

    • QUERY HIGH

    • ARCHIVE HIGH

    • ARCHIVE LOW

    • QUERY LOW

    Binary Reader 仅对完全加载复制支持 QUERY LOW 压缩,而不对持续 (CDC) 复制支持 QUERY LOW 压缩。

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

将 Binary Reader 与 AWS DMS(而不是 LogMiner)一起使用的优点包括:

  • 对于更改量较大的迁移,LogMiner 可能会对托管 Oracle 源数据库的计算机造成一些 I/O 或 CPU 影响。Binary Reader 对 I/O 或 CPU 造成影响的几率更小,因为存档日志会被复制到复制实例并在该处看管。

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

  • Binary Reader 支持对 Oracle 版本 12c 中 LOB 的 CDC。LogMiner 不支持。

  • Binary Reader 在完全加载和连续复制 (CDC) 中支持以下 HCC 压缩类型:

    • QUERY HIGH

    • ARCHIVE HIGH

    • ARCHIVE LOW

      完全加载迁移仅支持 QUERY LOW 压缩类型。

一般而言,除非遇到以下情况,否则请使用 Oracle LogMiner 迁移您的 Oracle 数据库:

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

  • 源 Oracle 数据库上的更改量或重做日志量很大,或者您有更改并且还在使用 ASM。

  • 您的工作负载包括仅更新大型对象 (LOB) 列的 UPDATE 语句。在此情况下,使用 Binary Reader。Oracle LogMiner 不支持这些 UPDATE 语句。

  • 您正在从 Oracle 12c 迁移 LOB 列。对于 Oracle 12c,LogMiner 不支持 LOB 列。因此,在此情况下,请使用 Binary Reader。

注意

如果在使用 Oracle LogMiner 和 AWS DMS Binary Reader 执行更改数据捕获 (CDC) 之间进行更改,则必须重新启动任务。

Oracle 源数据库上的更改数据捕获 (CDC) 的配置

当您使用 Oracle 作为完全加载和更改数据捕获 (CDC) 的源终端节点或仅作为 CDC 的源终端节点时,可以设置额外的连接属性。这些属性指定是否要使用 Binary Reader 访问事务日志。您在创建源终端节点时指定了额外的连接属性。如果您具有多个连接属性设置,请用分号将它们彼此分开,并且不需要额外的空格(例如,oneSetting;thenAnother)。

默认情况下将使用 LogMiner,因此您不必显式指定使用它。要使用 Binary Reader 访问事务日志,请添加以下额外连接属性。

useLogMinerReader=N;useBfile=Y;
注意

您只能针对 Oracle 版本 11.2.0.4.v11 及更高版本和 12.1.0.2.v7,使用 Binary Reader 将适用于 Amazon RDS for Oracle 的 CDC 负载配置为源实例。对 Amazon RDS for Oracle 版本 12.2 或 18c 实例,请使用 AWS DMS 版本 3.3.1。有关更多信息,请参阅使用 Amazon 托管 Oracle 数据库作为 AWS DMS 的源。

在早于 3.x 的 AWS DMS 版本中,Oracle 源数据库使用 Oracle ASM,使用 Binary Reader 则需要其他属性。除了上述属性之外,还要确保为 ASM 用户名和 ASM 服务器地址指定属性。在您创建源终端节点时,Password 请求参数必须指定两个密码:Oracle 源终端节点密码和 ASM 密码。

为额外连接属性使用以下格式来访问将 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

在 AWS DMS 版本 3.x 或更高版本中,Oracle 源使用 ASM,您可以使用 Binary Reader 中的高性能选项进行大规模事务处理。在此情况下,复制实例支持这些高性能选项。这些选项包括额外的连接属性,用于指定并行线程数 (parallelASMReadThreads) 和预读缓冲区数 (readAheadBlocks)。同时设置这些属性可以显著提高使用 ASM 的 CDC 负载的性能。下面显示的设置为大多数 ASM 配置提供了良好的结果。

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

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

此外,使用 ASM 的 CDC 负载的性能取决于您选择的其他设置。这些设置包括用于配置 Oracle 源的 AWS DMS 额外连接属性和 SQL 设置。如果您使用的是 AWS DMS 版本 2.4.x,则上述性能参数不适用。对于这些 AWS DMS 版本,请参阅 AWS 数据库博客上的如何使用 AWS DMS 从 Oracle ASM 迁移到 AWS 一文,以了解有关将 ASM 与 Oracle 源终端节点配合使用的更多信息。

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

自管理数据库 是您配置和控制的数据库,它是本地数据库实例或 Amazon EC2 上的数据库实例。接下来,您可以了解在将自管理 Oracle 数据库与 AWS DMS 一起使用时需要设置的权限和配置。

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

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

注意

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

  • 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 DBA_OBJECTS – Oracle 版本低于 11.2.0.3 时必需。

  • SELECT on sys.ENC$ – 如果启用了透明数据加密 (TDE),则为必填项。有关将 Oracle TDE 与 AWS DMS 结合使用的更多信息,请参阅 使用 Oracle 作为 AWS DMS 源时支持的加密方法

当您使用特定表列表时,为每个复制表授予以下附加权限。

SELECT on any-replicated-table;

为表列表使用模式时,授予以下附加权限。

SELECT ANY TABLE;

当 AWS DMS 自动添加补充日志记录(默认行为)并且您使用的是特定表列表时,为每个复制表授予以下附加权限。有关如何关闭补充日志记录的信息,请参阅将 Oracle 作为 AWS DMS 源时的额外连接属性

ALTER on any-replicated-table;;

当 AWS DMS 自动添加补充日志记录(默认行为)时,授予以下附加权限。有关如何关闭补充日志记录的信息,请参阅将 Oracle 作为 AWS DMS 源时的额外连接属性

ALTER ANY TABLE;

访问 Oracle 备用数据库时,授予以下权限。

SELECT on V$STANDBY_LOG;

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

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

  • CREATE SESSION

  • EXECUTE on DBMS_LOGMNR

  • SELECT on V_$LOGMNR_LOGS

  • SELECT on V_$LOGMNR_CONTENTS

  • GRANT LOGMINING – 仅当 Oracle 版本为 12c 或更高版本时才必需。

使用 AWS DMS Binary Reader 访问重做日志时所需的账户权限

要使用 AWS DMS Binary Reader 访问重做日志,请向 Oracle 终端节点连接设置中指定的 Oracle 用户授予以下权限:

  • CREATE SESSION

  • SELECT on v_$transportable_platform – 如果重做日志存储在 Oracle Automatic Storage Management (ASM) 中并且 AWS DMS 从 ASM 访问它们,则授予此权限。

  • CREATE ANY DIRECTORY – 授予此权限,以允许 AWS DMS 在特定情况下使用 Oracle BFILE 读取文件访问权限。如果复制实例没有对重做日志的文件级访问权限,并且重做日志位于非 ASM 存储上,则需要此访问权限。

  • EXECUTE on DBMS_FILE_TRANSFER package – 授予此权限,以使用 CopyToTempFolder 方法将重做日志文件复制到临时文件夹。

  • EXECUTE on DBMS_FILE_GROUP

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

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

如果 Oracle 源终端节点位于 Active Dataguard Standby (ADG) 中,请参阅 AWS 数据库博客上的如何将 Binary Reader 与 ADG 结合使用

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

将 Binary Reader 与 Oracle Automatic Storage Management (ASM) 结合使用时所需的账户权限

要使用 Binary Reader 访问 Automatic Storage Management (ASM) 中的重做日志,请向 Oracle 终端节点连接设置中指定的 Oracle 用户授予以下权限:

  • SELECT ON v_$transportable_platform

  • SYSASM – 要使用 Oracle 11g Release 2(版本 11.2.0.2)及更高版本访问 ASM 账户,请向 Oracle 终端节点用户授予 SYSASM 权限。对于受支持的较旧 Oracle 版本,通常只需向 Oracle 终端节点授予 SYSDBA 权限即可。

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

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

sqlplus asmuser/asmpassword@+asmserver as sysdba

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

sqlplus asmuser/asmpassword@+asmserver as sysasm

配置自管理 Oracle 源以使用 AWS DMS 进行复制

以下是在 AWS DMS 中使用自管理 Oracle 数据库作为源的配置要求 :

  • 为 AWS DMS 用户提供 Oracle 账户访问权限。有关更多信息,请参阅 提供 Oracle 账户访问权限

  • 将日志设置为 ARCHIVELOG 模式。有关更多信息,请参阅 将日志设置为 ARCHIVELOG 模式

    您可以在两种不同的模式下运行 Oracle: ARCHIVELOG 模式和 NOARCHIVELOG 模式。要对 AWS DMS 使用 Oracle 日志,请在 ARCHIVELOG 模式下运行数据库。

  • 设置和验证补充日志记录。

    您可以使用 Oracle 源终端节点的额外连接属性自动设置补充日志记录。有关更多信息,请参阅 将 Oracle 作为 AWS DMS 源时的额外连接属性。如果未设置这些额外的连接属性,则可以使用更精细的方法设置补充日志记录。有关更多信息,请参阅 验证和设置补充日志记录

提供 Oracle 账户访问权限

向 AWS DMS 用户提供 Oracle 账户访问权限

将日志设置为 ARCHIVELOG 模式

将日志设置为 ARCHIVELOG 模式

您还可以设置和验证补充日志记录,如下所述。

验证和设置补充日志记录

要设置补充日志记录,请按照以下步骤操作,本节稍后将予以详细介绍:

  1. 验证是否为数据库启用了补充日志记录:

  2. 验证是否为每个表添加了所需的补充日志记录:

  3. 如果为表定义了筛选条件或转换,请根据需要启用其他日志记录。

验证数据库的补充日志记录,然后根据需要启用

  1. 运行以下示例查询以验证 AWS DMS 是否支持 Oracle 数据库的当前版本。如果查询运行时未出现错误,则支持返回的数据库版本。

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

    此处,namevalue、和 description 列是数据库中某个位置的列,正根据 name 的值查询这些列。作为查询的一部分,AWS DMS 任务将根据返回的 Oracle 数据库版本检查 v$parameter 的值。如果存在匹配,则查询运行时未出现错误,并且 AWS DMS 支持此版本的数据库。如果没有匹配项,则查询会引发错误,并且 AWS DMS 不支持此版本的数据库。在这种情况下,要继续迁移,请先将 Oracle 数据库转换为 AWS DMS 支持的版本。然后,通过配置数据库重新开始,如配置自管理 Oracle 源以使用 AWS DMS 进行复制中所述。

  2. 运行以下查询以验证是否为数据库启用了补充日志记录。如果返回的结果为 YESIMPLICIT,则会为数据库启用补充日志记录。

    SELECT supplemental_log_data_min FROM v$database;
  3. 如果需要,请通过运行以下命令,为数据库启用补充日志记录。

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
    注意

    如果 Oracle 数据库实例位于 Amazon RDS 上,请运行其他命令。有关更多信息,请参阅 使用 Amazon 托管 Oracle 数据库作为 AWS DMS 的源。

验证是否为每个数据库表启用了所需的补充日志记录

  • 请执行下列操作之一:

    • 如果存在主键,请为主键添加补充日志记录。为此,您可以使用格式在主键上添加补充日志记录,也可以在主键列上添加补充日志记录。

    • 如果不存在主键,请执行以下操作之一:

      • 如果不存在主键并且表具有单个唯一索引,则将所有唯一索引的列添加到补充日志。

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

      • 如果不存在主键且表具有多个唯一索引,则将 AWS DMS 选择的唯一索引的所有列添加到补充日志。 AWS DMS 会从按字母顺序排列的升序列表中选择第一个唯一索引。

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

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

注意

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

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

如果为表定义了筛选条件或转换,则可能需要启用其他日志记录。一些考虑因素如下:

  • 如果已将 ALL COLUMNS 补充日志记录添加到表中,则无需添加任何其他日志记录。

  • 如果表具有唯一索引或主键,请在筛选条件或转换中涉及的每一列上添加补充日志记录,但前提是这些列不同于主键列或唯一索引列。

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

  • 在主键或唯一索引列以及经过筛选或转换的其他特定列上设置补充日志记录的一种方法是添加 USER_LOG_GROUP 补充日志记录。在主键/唯一索引列和经过筛选或转换的其他特定列上添加此 USER_LOG_GROUP 补充日志记录。

    例如,要复制名为 TEST.LOGGING 的表,该表的主键为 ID 且按列 NAME 进行筛选,您可以运行如下命令来创建日志组补充日志记录。

    ALTER TABLE TEST.LOGGING ADD SUPPLEMENTAL LOG GROUP TEST_LOG_GROUP (KEY, ADDRESS) ALWAYS;

    在此示例中,NAME 列是的 ADDRESS 的组件。

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

Amazon 托管数据库是位于 Amazon 服务(如 Amazon RDS、Amazon Aurora 或 Amazon S3)上的数据库。接下来,您可以了解在将 Amazon 托管 Oracle 数据库与 AWS DMS 一起使用时需要设置的权限和配置。

AWS DMS 的 Amazon 托管 Oracle 源上所需的用户账户权限

要授予 Amazon RDS 上 Oracle 数据库的权限,请使用存储过程 rdsadmin.rdsadmin_util.grant_sys_object。有关更多信息,请参阅向 SYS 对象授予 SELECT 或 EXECUTE 权限

向用于访问源 Oracle 终端节点的 AWS DMS 用户账户授予以下权限:

GRANT SELECT ANY TABLE to dms_user; GRANT SELECT on ALL_VIEWS to dms_user; GRANT SELECT ANY TRANSACTION to dms_user; GRANT SELECT on DBA_TABLESPACES to dms_user; GRANT SELECT on ALL_TAB_PARTITIONS to dms_user; GRANT SELECT on ALL_INDEXES to dms_user; GRANT SELECT on ALL_OBJECTS to dms_user; GRANT SELECT on ALL_TABLES to dms_user; GRANT SELECT on ALL_USERS to dms_user; GRANT SELECT on ALL_CATALOG to dms_user; GRANT SELECT on ALL_CONSTRAINTS to dms_user; GRANT SELECT on ALL_CONS_COLUMNS to dms_user; GRANT SELECT on ALL_TAB_COLS to dms_user; GRANT SELECT on ALL_IND_COLUMNS to dms_user; GRANT SELECT on ALL_LOG_GROUPS to dms_user; GRANT LOGMINING TO dms_user; GRANT READ ON DIRECTORY ONLINELOG_DIR TO dms_user; (for Binary Reader) GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO dms_user; (for Binary Reader)

此外,运行以下命令:

exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG','dms_user','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOG','dms_user','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGFILE','dms_user','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE','dms_user','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$THREAD','dms_user','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$PARAMETER','dms_user','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$NLS_PARAMETERS','dms_user','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TIMEZONE_NAMES','dms_user','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TRANSACTION','dms_user','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_REGISTRY','dms_user','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('OBJ$','dms_user','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_ENCRYPTED_COLUMNS','dms_user','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS','dms_user','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS','dms_user','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR','dms_user','EXECUTE'); exec rdsadmin.rdsadmin_util.grant_sys_object('REGISTRY$SQLPATCH', dms_user, 'SELECT'); (as of AWS DMS versions 3.3.1 and later) exec rdsadmin.rdsadmin_util.grant_sys_object('V_$STANDBY_LOG', dms_user, 'SELECT'); (for RDS Active Dataguard Standby (ADG)) exec rdsadmin.rdsadmin_util.grant_sys_object('ENC$','dms_user','SELECT'); (for transparent data encryption (TDE))
注意

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

对 Amazon 托管 Oracle 进行 AWS DMS 配置

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

  • 设置补充日志记录。

  • 启用自动备份。

  • 设置存档。通过存档 Oracle 数据库实例的 Amazon RDS 重做日志,AWS DMS 可以使用 Oracle LogMiner 或 Binary Reader 检索日志信息。

下面将更详细地介绍上述每个步骤。

设置补充日志记录

  1. 运行以下命令。

    exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
  2. (可选)根据需要使用以下命令更改补充日志记录属性。

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

启用自动备份

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在 Amazon RDS Oracle 数据库实例的 Management Settings (管理设置) 部分,将 Enabled Automatic Backups (启用自动备份) 选项设置为 Yes (是)

设置存档

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

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

    exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24);
  2. 确保您的存储具有足够的空间,可以满足指定保留期内的存档重做日志需求。

为 AWS DMS 的 Amazon RDS for Oracle 源配置更改数据捕获 (CDC)

您可以将 AWS DMS 配置为使用 Amazon RDS for Oracle 实例作为 CDC 的源。

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

要使用 AWS DMS Binary Reader,请为 Oracle 源终端节点指定其他设置和额外连接属性,具体取决于您的 AWS DMS 版本。有关 Amazon RDS Oracle 版本 11g 和 12.1,请参阅 AWS 数据库博客上的 AWS DMS 现在支持用于 Amazon RDS for Oracle 和 Oracle Standby 的 Binary Reader 作为源一文。

对于 AWS DMS 3.3.1 版及更高版本,Amazon RDS Oracle 版本 12.2 和 18c 中提供了 Binary Reader 支持。

使用 AWS DMS Binary Reader 配置 CDC

  1. 以主用户身份登录到 Amazon RDS Oracle 源数据库。

  2. 运行以下存储过程以创建服务器级目录。有关更多信息,请参阅 Amazon RDS 用户指南 中的访问事务日志

    exec rdsadmin.rdsadmin_master_util.create_archivelog_dir; exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
  3. 在 Amazon RDS Oracle 源终端节点上设置以下额外连接属性。对于多个属性设置,分号分隔符 (;) 后面不能有空格。

    useLogminerReader=N;useBfile=Y
注意

对于多个属性设置,分号分隔符 (;) 后面不能有空格(例如,oneSetting;thenAnother)。

将 Oracle 作为 AWS DMS 源的限制

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

  • 从 AWS DMS 3.3.3 版本开始,将支持源和目标采用 Oracle 扩展数据类型。声明大小大于 4,000 字节的 Oracle VARCHAR2NVARCHAR2 数据类型是扩展数据类型

    Oracle 初始化参数 MAX_STRING_SIZE 控制 Oracle 数据库中字符串的最大大小。当 MAX_STRING_SIZE = EXTENDED 时,在迁移过程中,AWS DMS 会将 Oracle VARCHAR2NVARCHAR2 数据类型映射到 CLOB 数据类型。因此,在迁移过程中,声明大小大于 4,000 字节的 Oracle VARCHAR2NVARCHAR2 数据类型会映射到 AWS DMS CLOB 数据类型。

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

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

  • 如果您使用补充日志记录并对任何列执行转换,请确保为所有字段和列激活补充日志记录。

  • AWS DMS 不支持多租户容器数据库 (CDB)。

  • AWS DMS 不支持延迟约束。

  • AWS DMS 支持 Oracle 版本 11 及更高版本的 rename table table-name to new-table-name 语法。

  • AWS DMS 不复制由于分区或子分区操作(ADDDROPEXCHANGETRUNCATE)而导致的数据更改。此类更新可能会导致复制过程中出现以下错误:

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

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

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

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

  • AWS DMS 支持因在源上运行 CREATE TABLE AS 语句而在目标上导致的数据更改,但 Oracle 提供的数据类型(如 XMLType)除外。

  • 启用限制大小 LOB 模式时,AWS DMS 会将 Oracle 源中的 LOB 作为 NULL 值复制到目标上。

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

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

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

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

  • AWS DMS 不支持某些 UPDATE 命令。下面的示例是一个不支持的 UPDATE 命令。

    UPDATE TEST_TABLE SET KEY=KEY+1;

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

  • AWS DMS 将 LONGLONG RAW 列中长度大于 64 KB 的任何数据截断到 64 KB。

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

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

  • 当您使用 AWS DMS Binary Reader 访问重做日志时, AWS DMS 不支持存在溢出段的索引组织表的 CDC。或者,您可以考虑对这些表使用 LogMiner。

  • 当您使用 Oracle LogMiner 访问重做日志时, AWS DMS 具有以下限制:

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

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

    • AWS DMS 不会复制 DDL 语句 ALTER TABLE ADD column data_type DEFAULT default_value 的结果。它将新列设置为 NULL,而不是将 default_value 复制到目标。即使添加新列的 DDL 语句是在先前任务中运行的,也会发生这样的结果。

      如果新列可为 null,Oracle 首先更新所有表行,然后再记录 DDL 本身。因此,AWS DMS 捕获更改,但不更新目标。新列设置为 NULL 后,如果目标表没有主键或唯一索引,则后续更新会引发 “zero rows affected (零行受到影响)” 消息。

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

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

    • 它不支持表集群。

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

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

  • 在对 Amazon RDS Oracle 源使用 Binary Reader 时,AWS DMS 不支持透明数据加密 (TDE)。

  • AWS DMS 不支持使用 Oracle Automatic Storage Management (ASM) 代理连接到 Amazon RDS Oracle 源。

  • AWS DMS 不支持虚拟列。

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

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

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

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

注意

AWS DMS 目前不支持在 Oracle 版本 19c 数据库中使用 Oracle TDE。

重做日志访问方法 TDE 表空间 TDE 列
Oracle LogMiner
Binary Reader 是(AWS DMS 版本 3.x 及更高版本)

从版本 3.x 开始,使用 Binary Reader 时,AWS DMS 支持 Oracle TDE(在列和表空间上)。将相关加密密钥作为为 Oracle 源终端节点指定的 Password (密码) 字段值的一部分与 AWS DMS 共享。有关更多信息,请参阅以下段落。

要指定用于 TDE 表空间加密或 TDE 列加密的一个或多个正确加密密钥,请在 Oracle Wallet 中找到包含这个或这些加密密钥的一个或多个相关条目。找到相关条目后,复制每个条目及其值,然后将每个条目粘贴到 Names (名称) 字段中,并将每个条目值粘贴到 Values (值) 字段中。 用逗号分隔各个字段中的多个条目名称和值。

要复制和粘贴多个值,请将每个条目复制到文本编辑器(如 Notepad++)中,确保用逗号分隔这些值。从文本编辑器中复制包含逗号分隔值的字符串,并将其粘贴到 Values (值) 字段中。要复制和粘贴多个条目,您不需要使用中间文本编辑器。相反,您可以直接将条目粘贴到 Names (名称) 字段中,然后用逗号分隔每个条目。

要获取 Oracle Wallet 条目,请尝试以下操作:

  • 如果在 sqlnet.ora 文件中定义了 ENCRYPTION_WALLET_LOCATION 参数,请使用此参数定义的目录中的钱包。

  • 如果在 sqlnet.ora 文件中定义了 WALLET_LOCATION 参数,请使用此参数定义的目录中的钱包。

  • 在其他情况下,请在默认数据库位置使用钱包。

    注意

    在任何情况下,钱包的名称都应为 ewallet.p12

  • 使用 Oracle mkstore 实用工具中的 -list 选项确定 ORACLE.SECURITY.DB/TS.ENCRYPTION.SUFFIX 条目名称,如下所示。

    mkstore -wrl full-wallet-name -list
  • 如果您知道用于加密重做日志的一个或多个条目,请首先选择一个或多个条目名称。然后,使用 Oracle mkstore 实用工具中的 -viewEntry 选项确定每个条目值,如下所示。

    mkstore -wrl full-wallet-name -viewEntry entry-name
  • 如果您不知道用于加密重做日志的条目,则可以选择多个数据库或 TS 条目并确定它们的值,如前所述。然后,将相应条目的名称和值复制并粘贴到 Names (名称)Values (值) 字段中,如前所述。如果指定的条目不正确,则任务将失败,并且错误消息包含正确的条目名称。

  • 如果 DBA 在任务运行时更改条目,则任务将失败,并且错误消息包含新条目名称。将新条目(名称和值)添加到已指定的条目,然后恢复任务。有关添加新条目以恢复任务的更多信息,请参阅以下过程。

添加新条目以恢复任务

  1. 获取用于正在迁移的表的 TDE 的 Oracle Wallet 用户名和密码:

    1. 在 Oracle 数据库上,运行以下查询以返回给定所有者和表名称的 OBJECT_ID

      SELECT OBJECT_ID FROM ALL_OBJECTS WHERE OWNER='table-owner' AND OBJECT_NAME='table-name' AND OBJECT_TYPE='TABLE';
    2. 使用以下查询中检索的 OBJECT_ID 值返回相关的主密钥。

      SELECT MKEYID FROM SYS.ENC$ WHERE OBJ#=OBJECT_ID;
    3. 从 Oracle Wallet 中选择密钥值,如下所示。

      mkstore -wrl full-wallet-name -viewEntry entry-name
  2. 将主密钥条目复制到 Names (名称) 字段中,并将其值复制到 Values (值) 字段中。

  3. 检索完这些详细信息后,请使用 securityDbEncryptionName 额外连接属性在 Oracle 源终端节点上指定主密钥名称。例如,您可以将主密钥名称设置为以下值。

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

    在 Oracle 源终端节点的 Password (密码) 字段中提供此主密钥的关联密码。使用以下顺序设置各自的逗号分隔密码值的格式。此处,TDE_Password 是与主密钥关联的密码。

    Oracle_db_password,ASM_Password,TDE_Password

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

    Oracle_db_password,,TDE_Password

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

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

Version 基本 OLTP

HCC(来自 Oracle 11g R2)

其他
Oracle 10 不适用 不适用
Oracle 11 – Oracle LogMiner 是 – Oracle LogMiner 支持的任何压缩方法。
Oracle 11 – Binary Reader 是 – 请参阅下面的注释。
注意

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

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

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

allowSelectNestedTables=true;

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

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

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

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

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

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

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

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

  • 数据类型

  • 用户定义的对象

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

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

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

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

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

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

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

  • AWS 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 作为 AWS DMS 源时的额外连接属性

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

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

名称 描述

addSupplementalLogging

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

默认值:N

有效值:Y/N

示例:addSupplementalLogging=Y;

注意

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

additionalArchivedLogDestId

在主/备用设置中将此属性与 archivedLogDestId 一起设置。当发生故障转移时,此属性很有用。在此示例中,AWS DMS 需要知道从哪个目标获取存档重做日志以读取更改。出现这种需求是因为之前的主实例现在是故障转移后的备用实例。

allowSelectNestedTables

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

默认值:false

有效值:true/false

示例:allowSelectNestedTables=true;

useLogminerReader

将此属性设置为 Y 可使用 LogMiner 实用工具 (默认) 捕获更改数据。如果希望 AWS DMS 将重做日志作为二进制文件进行访问,请将此选项设置为 N。如果将此选项设置为 N,则还需添加设置 useBfile=Y。有关此设置以及使用 Oracle Automatic Storage Management (ASM) 的更多信息,请参阅将 Oracle LogMiner 或 AWS DMS Binary Reader 用于更改数据捕获 (CDC)

默认值:Y

有效值:Y/N

示例:useLogminerReader=N;useBfile=Y;

useBfile

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

默认值:N

有效值:Y/N

示例:useLogminerReader=N;useBfile=Y;

parallelASMReadThreads

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

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

有效值:从 2 到 8 的整数

示例:parallelASMReadThreads=6;readAheadBlocks=150000;

readAheadBlocks

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

默认值:1000

有效值:从 1000 到 200000 的整数

示例:parallelASMReadThreads=6;readAheadBlocks=150000;

accessAlternateDirectly

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

默认值:true

有效值:true/false

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

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

默认值:false

有效值:true/false

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

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

默认值: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 的路径前缀。有关更多信息,请参阅 为 AWS DMS 的 Amazon RDS for Oracle 源配置更改数据捕获 (CDC)

默认值: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,以访问重做日志。有关更多信息,请参阅 为 AWS DMS 的 Amazon RDS for Oracle 源配置更改数据捕获 (CDC)

默认值: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

指定已存档重做日志的目标。该值应与 v$archived_log 表中的 DEST_ID 号相同。在使用多个日志目标 (DEST_ID) 时,建议您指定已存档重做日志位置标识符。这样做将确保从一开始便访问正确的日志,从而提高性能。

默认值:0

有效值:数字

示例:archivedLogDestId=1;

archivedLogsOnly

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

默认值:N

有效值:Y/N

示例:archivedLogsOnly=Y;

numberDataTypeScale

指定数字的小数位数。可以选择最大为 38 的小数位数,也可以选择 FLOAT。默认情况下,NUMBER 数据类型将转换为精度 38,小数位数 10。

调整渲染效果的缩放。

有效值:-1 到 38 (对于 FLOAT,为 -1)

示例:numberDataTypeScale=12

afterConnectScript

指定脚本在 AWS DMS 连接到终端节点后立即运行。

有效值:用分号分隔的 SQL 语句。并非所有 SQL 语句都受支持。

示例:afterConnectScript=ALTER SESSION SET CURRENT_SCHEMA = system;

failTasksOnLobTruncation

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

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

默认值:false

有效值:布尔值

示例:failTasksOnLobTruncation=true;

readTableSpaceName

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

默认值:false

有效值:布尔值

示例:readTableSpaceName=true;

standbyDelayTime

使用此属性指定备用同步延迟时间 (以分钟为单位)。

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

默认值:0

有效值:数字

示例:standbyDelayTime=1;

securityDbEncryptionName

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

默认值:""

有效值:String

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

spatialSdo2GeoJsonFunctionName

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

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

默认值:SDO2GEOJSON

有效值:String

示例:spatialSdo2GeoJsonFunctionName=myCustomSDO2GEOJSONFunction;

enableHomogenousTablespace

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

默认值:false

有效值:true/false

示例:enableHomogenousTablespace=true

Oracle 的源数据类型

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

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

有关 AWS DMS 数据类型的其他信息,请参阅AWS Database Migration Service 的数据类型

Oracle 数据类型

AWS DMS 数据类型

BINARY_FLOAT

REAL4

BINARY_DOUBLE

REAL8

BINARY

BYTES

FLOAT (P)

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

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

NUMBER (P,S)

当小数位数小于 0 时,请使用 REAL8

NUMBER 取决于 Oracle 源数据库设置中的“Expose number as”属性。

当小数位数为 0 时:

  • 如果精度为 0,请使用 REAL8。

  • 如果精度大于或等于 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 指示)

TIME

DATETIME

TIMESTAMP

DATETIME

TIMESTAMP(带时区)

STRING (带 timestamp_with_timezone 指示)

带本地时区的 TIMESTAMP

STRING (带 timestamp_with_local_ timezone 指示)

CHAR

STRING

VARCHAR2

STRING

CLOB

从 AWS DMS 3.3.3 开始,声明大小大于 4000 字节的 Oracle VARCHAR2 数据类型会映射到 CLOB 数据类型。

NCHAR

WSTRING

NVARCHAR2

WSTRING

CLOB

从 AWS DMS 3.3.3 开始,声明大小大于 4000 字节的 Oracle NVARCHAR2 数据类型会映射到 CLOB 数据类型。

RAW

BYTES

REAL

REAL8

BLOB

BLOB

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

CLOB

CLOB

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

NCLOB

NCLOB

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

LONG

CLOB

LONG 数据类型在批处理优化的应用模式(TurboStream CDC 模式)中不受支持。要将此数据类型用于 AWS DMS,必须允许对特定任务使用 LOB。在 CDC 期间,AWS DMS 仅在包含主键的表中支持 LOB 数据类型。

LONG RAW

BLOB

LONG RAW 数据类型在批处理优化的应用模式(TurboStream CDC 模式)中不受支持。要将此数据类型用于 AWS DMS,必须允许对特定任务使用 LOB。在 CDC 期间,AWS DMS 仅在包含主键的表中支持 LOB 数据类型。

XMLTYPE

CLOB

需要完整 Oracle 客户端才能支持 XMLTYPE 数据类型 (与 Oracle Instant Client 相对)。当目标列是 CLOB 时,同时支持完整 LOB 模式和受限 LOB 模式 (取决于目标)。

SDO_GEOMETRY

BLOB(当 Oracle 迁移到 Oracle 时)

CLOB(当 Oracle 迁移到 PostgreSQL 时)

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

  • BFILE

  • ROWID

  • REF

  • UROWID

  • 用户定义的数据类型

  • ANYDATA

注意

不支持虚拟列。

迁移 Oracle 空间数据类型

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

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

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

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

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

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