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

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

您可以使用 AWS DMS 从另一个 Oracle 数据库或者从其他支持的数据库之一,将数据迁移到 Oracle 数据库。可以使用安全套接字层 (SSL) 加密 Oracle 终端节点与复制实例之间的连接。有关将 SSL 用于 Oracle 终端节点的更多信息,请参阅 将 SSL 与 AWS Database Migration Service 配合使用

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

注意

AWS DMS 版本 3.3.0 和更高版本中支持将 Oracle 版本 8c 作为目标。

将 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,则任何现有表或索引表空间分配将保留在目标中。如果源终端节点不是 Oracle,我们将使用目标中的默认表和索引表空间。如果要将表和索引迁移到不同的表和索引命名空间,请使用表空间转换来执行此操作。例如,假设您在 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 数据库作为 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 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”或“TRUNCATE before loading”选项,并且目标表架构不同于 AWS DMS 用户的架构,则授予权限 DROP ANY TABLE。

  • 当目标表架构不同于 AWS 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

使用直接路径完全加载。指定此项以启用或禁用用于批量加载 Oracle 表的 Oracle Cloud Infrastructure (OCI) 中的直接路径协议。

默认值:Y

有效值:Y/N

示例:useDirectPathFullLoad=N

charLengthSemantics

列长度语义指定列的长度是以字节还是字符为单位。将此值设置为 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 数据类型。

NCLOB

NCLOB

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

XMLTYPE

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

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