选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

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

聚焦模式
将 Oracle 数据库作为 AWS Database Migration Service的目标 - AWS 数据库迁移服务

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

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

您可以使用从其他 Oracle 数据库或其他支持的数据库之一将数据迁移到 Oracle 数据库目标。 AWS DMS可以使用安全套接字层 (SSL) 加密 Oracle 终端节点与复制实例之间的连接。有关在 Oracle 终端节点上使用 SSL 的更多信息,请参阅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 表映射使用架构转换规则。

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

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

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

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

    2 * columns_in_original_table + columns_in_primary_key <= 999

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

  • AWS DMS 不支持 Oracle 云基础架构 (OCI) 上的自治数据库。

  • 在事务应用模式下,Oracle 目标可以处理大小不超过 32 KB 的 DML 语句。虽然此限制足以满足许多用例,但超过 32 KB 的 DML 语句将失败,并显示错误:“ORA-01460:请求的转换未实现或不合理。” 要解决此问题,必须将BatchApplyEnabled任务设置设置为,从而启用批量应用功能true。Batch apply 减少了语句的总体大小,允许您绕过 32 KB 的限制。有关更多信息,请参阅 目标元数据任务设置

将 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 评测中列出的迁移前评测并将 Oracle 作为目标,您必须向目标数据库上的 dms_user 数据库用户添加以下权限:

GRANT SELECT ON V_$INSTANCE TO dms_user; GRANT EXECUTE ON SYS.DBMS_XMLGEN TO dms_user;

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

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

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

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

下表显示了您可以将 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 时指定并行加载。此属性也仅在您使用 parallel 加载 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 的目标数据类型

与一起使用的目标 Oracle 数据库 AWS DMS 支持大多数 Oracle 数据类型。下表显示了使用时支持的 Oracle 目标数据类型 AWS DMS 以及 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 (长度)

UINT1

NUMBER (3)

UINT2

NUMBER (5)

UINT4

NUMBER (10)

UINT8

NUMBER (19)

WSTRING

如果 length > 2000:NCLOB

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

BLOB

BLOB

要将此数据类型与一起使用 AWS DMS,必须 BLOBs 为特定任务启用使用。仅包含主键的表中支持 BLOB 数据类型

CLOB

CLOB

要将此数据类型与一起使用 AWS DMS,必须 CLOBs 为特定任务启用使用。在更改数据捕获 (CDC) 期间,仅包含主键的表支持 CLOB 数据类型。

string

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

NCLOB

NCLOB

要将此数据类型与一起使用 AWS DMS,必须 NCLOBs 为特定任务启用使用。在 CDC 期间,仅包含主键的表中支持 NCLOB 数据类型。

WSTRING

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

XMLTYPE

XMLTYPE 目标数据类型仅与 Oracle-to-Oracle复制任务相关。

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

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。