将 Oracle 数据库作为 AWS Database Migration Service 的目标 - 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 支持作为目标的 Oracle 版本的信息,请参阅 的目标 AWS DMS

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

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

使用 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 使用它连接到目标实例。要迁移多个架构,可以创建多个复制任务。您也可以将数据迁移到目标上的不同架构。为此,需要对 AWS DMS 表映射使用架构转换规则。

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

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

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

  • 您可以使用以下公式表示在批量优化应用模式下支持的每个表的总列数:

    2 * columns_in_original_table + columns_in_primary_key <= 999

    例如,如果原始表有 25 列,其主键由 5 列组成,则总列数为 55。如果表超过支持的列数,则所有更改都将以逐一模式应用。

  • AWS DMS 不支持 Oracle Cloud Infrastructure (OCI) 上的自治数据库。

将 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

  • DELETE ANY TABLE

对于下列要求,授予这些附加权限:

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

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

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

  • 如果您使用直接路径(完全加载时的默认路径),则 GRANT LOCK ANY TABLE to dms_user;.

  • 如果使用“DROP and CREATE”表格准备模式时架构不同,则 GRANT CREATE ANY INDEX to dms_user;.

  • 对于一些完全加载场景,您已选择“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

  • SYS.DBA_REGISTRY 上的 SELECT

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

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

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

使用 Oracle 作为 AWS DMS 的目标时的端点设置

您可以使用端点设置来配置 Oracle 目标数据库,这与使用额外连接属性类似。您可以在使用 AWS DMS 控制台创建目标端点时指定设置,或者在 AWS CLI 中使用符合 --oracle-settings '{"EndpointSetting": "value", ...}' JSON 语法的 create-endpoint 命令。

下表显示了您可以将 Oracle 作为目标的端点设置。

名称 描述

EscapeCharacter

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

默认值:Null

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

示例:--oracle-settings '{"EscapeCharacter": "#"}'

UseDirectPathFullLoad

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

默认值:true

有效值:true/false

示例:--oracle-settings '{"UseDirectPathFullLoad": false}'

DirectPathParallelLoad

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

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

默认值:false

有效值:true/false

示例:--oracle-settings '{"DirectPathParallelLoad": true}'

DirectPathNoLog

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

默认值:false

有效值:true/false

示例:--oracle-settings '{"DirectPathNoLog": true}'

CharLengthSemantics

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

默认值:未设置为 CHAR

有效值:CHAR

示例:--oracle-settings '{"CharLengthSemantics": "CHAR"}'

AlwaysReplaceEmptyString

AWS DMS 会在迁移到 Oracle 目标时添加一个额外空间来复制空字符串。通常,Oracle 没有表示空字符串的符号。在 varchar2 上插入空字符串时,会将空字符串加载为 NULL。如果要在 Oracle 上将数据作为 NULL 插入,请将此属性设置为 FALSE。

默认值:true

有效值:true/false

示例:--oracle-settings '{"AlwaysReplaceEmptyString": false}'

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

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

NCLOB

NCLOB

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

WSTRING

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

XMLTYPE

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

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