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

将 Oracle 数据库作为 AWS Database Migration Service 的目标

您可以使用 AWS DMS 从一个 Oracle 数据库或者从其他支持的数据库之一,将数据迁移到其他 Oracle 数据库目标。可以使用安全套接字层 (SSL) 加密 Oracle 终端节点与复制实例之间的连接。有关将 SSL 与 Oracle 终端节点结合使用的更多信息,请参阅 将 SSL 与 AWS Database Migration Service 配合使用。AWS DMS 还支持使用 Oracle 透明数据加密 (TDE) 来加密目标数据库中的静态数据,因为 Oracle TDE 不需要加密密钥或密码即可写入数据库。

AWS DMS 支持将适用于本地实例及 EC2 实例的 Oracle 版本 10g、11g、12c、18c 以及 19c (包括 Enterprise、Standard、Standard One 和 Standard Two 版)作为目标。AWS DMS 支持适用于 Amazon RDS 实例数据库的 Oracle 版本 11g(版本 11.2.0.3.v1 及更高版本)、12c、18c 以及 19c(Enterprise、Standard、Standard One 和 Standard Two 版)。

注意

AWS DMS 版本 3.3.2 及更高版本中支持将 Oracle 版本 19c 作为目标。

AWS DMS 版本 3.3.1 及更高版本中支持将 Oracle 版本 18c 作为目标。

将 Oracle 作为目标时,我们假定数据将迁移到目标连接所使用的架构或用户。如果您要将数据迁移到其他架构,请使用架构转换来完成此操作。例如,假设您的目标终端节点连接到用户 RDSMASTER 并且您希望从用户 PERFDATA 迁移到 PERFDATA。在这种情况下,请创建一个转换,如下所示。

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "rename", "rule-target": "schema", "object-locator": { "schema-name": "PERFDATA" }, "value": "PERFDATA" }

使用 Oracle 作为目标时,AWS DMS 会将所有表和索引迁移到目标中的默认表和索引表空间。如果要将表和索引迁移到不同的表和索引命名空间,请使用表空间转换来执行此操作。例如,假设您在 INVENTORY 架构中有一组已分配给 Oracle 源中的某些表空间的表。对于迁移,您希望将所有这些表分配给目标中的单个 INVENTORYSPACE 表空间。在这种情况下,请创建一个转换,如下所示。

{ "rule-type": "transformation", "rule-id": "3", "rule-name": "3", "rule-action": "rename", "rule-target": "table-tablespace", "object-locator": { "schema-name": "INVENTORY", "table-name": "%", "table-tablespace-name": "%" }, "value": "INVENTORYSPACE" }

有关转换的更多信息,请参阅 使用 JSON 按表映射指定表选择和转换

如果 Oracle 同时作为源和目标,则可以通过设置 Oracle 源额外连接属性 enableHomogenousTablespace=true 来保留现有的表或索引表空间分配。有关更多信息,请参阅 将 Oracle 作为 AWS DMS 源时的额外连接属性

有关将 Oracle 数据库作为 AWS DMS 目标的其他详细信息,请参阅以下章节:

将 Oracle 作为 AWS Database Migration Service 目标的限制

使用 Oracle 作为数据迁移目标的限制如下所示:

  • AWS DMS 不会在目标 Oracle 数据库上创建架构。您必须在目标 Oracle 数据库上创建任意所需的架构。Oracle 目标中很可能已存在该架构名称。来自源架构的表导入到用户或架构,AWS DMS 使用它连接到目标实例。要迁移多个架构,请创建多个复制任务。

  • 对于具有 INDEXTYPE CONTEXT 的表,AWS DMS 不支持 Use direct path full load 选项。作为解决方法,您可以使用数组加载。

  • 利用批量优化应用选项,加载到净更改表中时使用直接路径,这不支持 XML 类型。作为解决方法,您可以使用事务应用模式。

  • Oracle 目标可以按不同方式处理从源数据库迁移的空字符串(例如,转换为一个空格字符串)。这可能导致 AWS DMS 验证过程报告不匹配。

将 Oracle 作为目标所需的用户账户权限

要在 AWS Database Migration Service 任务中使用 Oracle 目标,请在 Oracle 数据库中授予以下权限。您可向 AWS DMS 的 Oracle 数据库定义中指定的用户账户授予这些权限。

  • SELECT ANY TRANSACTION

  • 针对 V$NLS_PARAMETERS 的 SELECT

  • 针对 V$TIMEZONE_NAMES 的 SELECT

  • 针对 ALL_INDEXES 的 SELECT

  • 针对 ALL_OBJECTS 的 SELECT

  • 针对 DBA_OBJECTS 的 SELECT

  • 针对 ALL_TABLES 的 SELECT

  • 针对 ALL_USERS 的 SELECT

  • 针对 ALL_CATALOG 的 SELECT

  • 针对 ALL_CONSTRAINTS 的 SELECT

  • 针对 ALL_CONS_COLUMNS 的 SELECT

  • 针对 ALL_TAB_COLS 的 SELECT

  • 针对 ALL_IND_COLUMNS 的 SELECT

  • DROP ANY TABLE

  • SELECT ANY TABLE

  • INSERT ANY TABLE

  • UPDATE ANY TABLE

  • CREATE ANY VIEW

  • DROP ANY VIEW

  • CREATE ANY PROCEDURE

  • ALTER ANY PROCEDURE

  • DROP ANY PROCEDURE

  • CREATE ANY SEQUENCE

  • ALTER ANY SEQUENCE

  • DROP ANY SEQUENCE

对于下面指定的要求,授予这些附加权限:

  • 要使用特定表列表,请对任意复制表授予 SELECT 权限以及 ALTER 权限。

  • 要允许用户在默认表空间中创建表,请授予权限 GRANT UNLIMITED TABLESPACE。

  • 对于登录,请授予权限 CREATE SESSION。

  • 如果您使用的是直接路径,请授予权限 LOCK ANY TABLE。

  • 对于一些完全加载场景,您已选择“DROP and CREATE table (对表执行 DROP 或 CREATE 操作)”或“TRUNCATE before loading (加载前执行 TRUNCATE 操作)”选项,其中目标表架构与 DMS 用户的不同。在此情况下,授予 DROP ANY TABLE 权限。

  • 要将更改存储在更改表或审计表(其中目标表架构与 DMS 用户的不同)中,请授予 CREATE ANY TABLE 和 CREATE ANY INDEX 权限。

目标数据库上的 AWS Database Migration Service 需要的读取权限

必须向 AWS DMS 用户账户授予以下 DBA 表的读取权限:

  • 针对 DBA_USERS 的 SELECT

  • 针对 DBA_TAB_PRIVS 的 SELECT

  • 针对 DBA_OBJECTS 的 SELECT

  • 针对 DBA_SYNONYMS 的 SELECT

  • 针对 DBA_SEQUENCES 的 SELECT

  • 针对 DBA_TYPES 的 SELECT

  • 针对 DBA_INDEXES 的 SELECT

  • 针对 DBA_TABLES 的 SELECT

  • 针对 DBA_TRIGGERS 的 SELECT

如果无法将任意所需权限授予 V$xxx,则将其授予 V_$xxx。

将 Oracle 数据库配置为 AWS Database Migration Service 的目标

在将 Oracle 数据库作为数据迁移目标之前,必须向 AWS DMS 提供 Oracle 用户账户。该用户账户必须具有 Oracle 数据库的读/写权限,如将 Oracle 作为目标所需的用户账户权限中所指定。

将 Oracle 作为 AWS DMS 目标时的额外连接属性

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

下表显示了将 Oracle 作为目标时的可用额外连接属性。

名称 描述

useDirectPathFullLoad

如果设置为 Y,则 AWS DMS 使用直接路径完全加载。指定此值以在 Oracle Call Interface (OCI) 中启用直接路径协议。此 OCI 协议允许在完全加载期间批量加载 Oracle 目标表。

默认值:Y

有效值:Y/N

示例:useDirectPathFullLoad=N;

directPathParallelLoad

如果设置为 true,则此属性在 useDirectPathFullLoad 设置为 Y 时指定并行加载。此属性仅在使用 AWS DMS 并行加载功能时才适用。有关更多信息,请参阅 表设置规则和操作parallel-load 操作的描述。

有关指定此并行加载设置的限制是目标表不能具有任何约束或索引。有关此限制的更多信息,请参阅在并行直接路径加载后启用约束。如果启用约束或索引,则将此属性设置为 true 将不起作用。

默认值:false

有效值:true/false

示例:directPathParallelLoad=true;

directPathNoLog

如果设置为 true,此属性可以通过直接写入表而不向数据库日志写入跟踪来提高 Oracle 目标数据库的提交率。有关更多信息,请参阅直接加载 INSERT。此属性仅在您将 useDirectPathFullLoad 设置为 Y 时才适用。

默认值:false

有效值:true/false

示例:directPathNoLog=true;

charLengthSemantics

指定字符列的长度是以字节数为单位还是以字符数为单位。要指示字符列长度以字符数为单位,请将此属性设置为 CHAR。否则,字符列长度以字节数为单位。

默认值:未设置为 CHAR

有效值:CHAR

示例:charLengthSemantics=CHAR;

Oracle 的目标数据类型

用于 AWS DMS 的目标 Oracle 数据库支持大多数 Oracle 数据类型。下表列出了使用 AWS DMS 时支持的 Oracle 目标数据类型以及来自 AWS DMS 数据类型的默认映射。有关如何查看从源映射的数据类型的更多信息,请参阅有关所使用的源的部分。

AWS DMS 数据类型

Oracle 数据类型

BOOLEAN

NUMBER (1)

BYTES

RAW (length)

DATE

DATETIME

TIME

TIMESTAMP (0)

DATETIME

TIMESTAMP (scale)

INT1

NUMBER (3)

INT2

NUMBER (5)

INT4

NUMBER (10)

INT8

NUMBER (19)

NUMERIC

NUMBER (p,s)

REAL4

FLOAT

REAL8

FLOAT

STRING

带日期指示:DATE

带时间指示:TIMESTAMP

带时间戳指示:TIMESTAMP

带 timestamp_with_timezone 指示:TIMESTAMP WITH TIMEZONE

带 timestamp_with_local_timezone 指示:TIMESTAMP WITH LOCAL TIMEZONE 带 interval_year_to_month 指示:INTERVAL YEAR TO MONTH

带 interval_day_to_second 指示:INTERVAL DAY TO SECOND

如果 length > 4000:CLOB

在所有其他情况下:VARCHAR2 (length)

UINT1

NUMBER (3)

UINT2

NUMBER (5)

UINT4

NUMBER (10)

UINT8

NUMBER (19)

WSTRING

如果 length > 2000:NCLOB

在所有其他情况下:NVARCHAR2 (length)

BLOB

BLOB

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

CLOB

CLOB

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

STRING

从 AWS DMS 3.3.3 开始,源上声明大小大于 4000 字节的 Oracle VARCHAR2 数据类型将通过 AWS DMS CLOB 映射到 Oracle 目标上的 STRING。

NCLOB

NCLOB

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

WSTRING

从 AWS DMS 3.3.3 开始,源上声明大小大于 4000 字节的 Oracle VARCHAR2 数据类型将通过 AWS DMS NCLOB 映射到 Oracle 目标上的 WSTRING。

XMLTYPE

XMLTYPE 目标数据类型仅在 Oracle 到 Oracle 复制任务中相关。

当源数据库是 Oracle 时,源数据类型将按“原样”复制到 Oracle 目标。例如,源上的 XMLTYPE 数据类型将创建为目标上的 XMLTYPE 数据类型。