本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Oracle 数据库作为 Amazon Database Migration Service 的目标
您可以使用 Amazon DMS 从一个 Oracle 数据库或者从其他支持的数据库之一,将数据迁移到其他 Oracle 数据库目标。可以使用安全套接字层 (SSL) 加密 Oracle 终端节点与复制实例之间的连接。有关将 SSL 与 Oracle 终端节点结合使用的更多信息,请参阅 SSL与一起使用 Amazon Database Migration Service。Amazon DMS 还支持使用 Oracle 透明数据加密 (TDE) 来加密目标数据库中的静态数据,因为 Oracle TDE 不需要加密密钥或密码即可写入数据库。
有关 Amazon DMS 支持作为目标的 Oracle 版本的信息,请参阅 的目标 Amazon 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 作为目标时,Amazon 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 作为 Amazon DMS 的源时的端点设置
有关将 Oracle 数据库作为 Amazon DMS 目标的其他详细信息,请参阅以下章节:
主题
将 Oracle 作为 Amazon Database Migration Service 目标的限制
使用 Oracle 作为数据迁移目标的限制如下所示:
-
Amazon DMS 不会在目标 Oracle 数据库上创建架构。您必须在目标 Oracle 数据库上创建任意所需的架构。Oracle 目标中很可能已存在该架构名称。来自源架构的表导入到用户或架构,Amazon DMS 使用它连接到目标实例。要迁移多个架构,可以创建多个复制任务。您也可以将数据迁移到目标上的不同架构。为此,需要对 Amazon DMS 表映射使用架构转换规则。
-
对于具有 INDEXTYPE CONTEXT 的表,Amazon DMS 不支持
Use direct path full load
选项。作为解决方法,您可以使用数组加载。 -
利用批量优化应用选项,加载到净更改表中时使用直接路径,这不支持 XML 类型。作为解决方法,您可以使用事务应用模式。
-
Oracle 目标可以按不同方式处理从源数据库迁移的空字符串(例如,转换为一个空格字符串)。这可能导致 Amazon DMS 验证过程报告不匹配。
-
您可以使用以下公式表示在批量优化应用模式下支持的每个表的总列数:
2 *
columns_in_original_table
+columns_in_primary_key
<= 999例如,如果原始表有 25 列,其主键由 5 列组成,则总列数为 55。如果表超过支持的列数,则所有更改都将以逐一模式应用。
-
Amazon DMS 不支持 Oracle Cloud Infrastructure(OCI)上的自治数据库。
将 Oracle 作为目标所需的用户账户权限
要在 Amazon Database Migration Service 任务中使用 Oracle 目标,请在 Oracle 数据库中授予以下权限。您可向 Amazon 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 权限。
目标数据库上的 Amazon Database Migration Service 需要的读取权限
必须向 Amazon 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;
将 Oracle 数据库配置为 Amazon Database Migration Service 的目标
在将 Oracle 数据库作为数据迁移目标之前,必须向 Amazon DMS 提供 Oracle 用户账户。该用户账户必须具有 Oracle 数据库的读/写权限,如将 Oracle 作为目标所需的用户账户权限中所指定。
使用 Oracle 作为 Amazon DMS 的目标时的端点设置
您可以使用端点设置来配置 Oracle 目标数据库,这与使用额外连接属性类似。您可以在使用 Amazon DMS 控制台创建目标端点时指定设置,或者在 Amazon CLI 中使用符合 --oracle-settings '{"
JSON 语法的 EndpointSetting"
:
"value"
, ...
}'create-endpoint
命令。
下表显示了您可以将 Oracle 作为目标的端点设置。
名称 | 描述 |
---|---|
|
将此属性设置为转义字符。此转义字符允许您在表映射表达式中将单个通配符用作一个普通字符。有关更多信息,请参阅 表映射中的通配符。 默认值:Null 有效值:除通配符之外的任何字符 例如: |
|
如果设置为 默认值: 有效值: 例如: |
|
如果设置为 有关指定此并行加载设置的限制是目标表不能具有任何约束或索引。有关此限制的更多信息,请参阅在并行直接路径加载后启用约束 默认值: 有效值: 例如: |
|
如果设置为 默认值: 有效值: 例如: |
|
指定字符列的长度是以字节数为单位还是以字符数为单位。要指示字符列长度以字符数为单位,请将此属性设置为 默认值:未设置为 有效值: 例如: |
|
Amazon DMS 会在迁移到 Oracle 目标时添加一个额外空间来复制空字符串。通常,Oracle 没有表示空字符串的符号。在 varchar2 上插入空字符串时,会将空字符串加载为 NULL。如果要在 Oracle 上将数据作为 NULL 插入,请将此属性设置为 FALSE。 默认值: 有效值: 例如: |
Oracle 的目标数据类型
用于 Amazon DMS 的目标 Oracle 数据库支持大多数 Oracle 数据类型。下表列出了使用 Amazon DMS 时支持的 Oracle 目标数据类型以及来自 Amazon DMS 数据类型的默认映射。有关如何查看从源映射的数据类型的更多信息,请参阅有关所使用的源的部分。
Amazon 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 要将此数据类型用于 Amazon DMS,必须允许对特定任务使用 BLOB。仅包含主键的表中支持 BLOB 数据类型 |
CLOB |
CLOB 要将此数据类型用于 Amazon DMS,必须允许对特定任务使用 CLOB。在更改数据捕获 (CDC) 期间,仅包含主键的表支持 CLOB 数据类型。 string 源上声明大小大于 4000 字节的 Oracle VARCHAR2 数据类型将通过 Amazon DMS CLOB 映射到 Oracle 目标上的 STRING。 |
NCLOB |
NCLOB 要将此数据类型用于 Amazon DMS,必须允许对特定任务使用 NCLOB。在 CDC 期间,仅包含主键的表中支持 NCLOB 数据类型。 WSTRING 源上声明大小大于 4000 字节的 Oracle VARCHAR2 数据类型将通过 Amazon DMS NCLOB 映射到 Oracle 目标上的 WSTRING。 |
XMLTYPE |
XMLTYPE 目标数据类型仅在 Oracle 到 Oracle 复制任务中相关。 当源数据库是 Oracle 时,源数据类型将按“原样”复制到 Oracle 目标。例如,源上的 XMLTYPE 数据类型将创建为目标上的 XMLTYPE 数据类型。 |