本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Oracle 数据库作为 AWS DMS的源
您可以使用迁移一个或多个 Oracle 数据库中的数据 AWS DMS。使用 Oracle 数据库作为源,您可以将数据迁移到 AWS DMS支持的任何目标。
AWS DMS 支持以下 Oracle 数据库版本:
-
Oracle Enterprise Edition
-
Oracle Standard Edition
-
Oracle Express 版本
-
Oracle Personal Edition
有关 AWS DMS 支持作为源的 Oracle 数据库版本的信息,请参见的来源 AWS DMS。
可以使用安全套接字层 (SSL) 加密 Oracle 终端节点与您复制实例之间的连接。有关将 SSL 用于 Oracle 终端节点的更多信息,请参阅 Oracle 终端节点的 SSL 支持。
AWS DMS 支持使用 Oracle 透明数据加密 (TDE) 来加密源数据库中的静态数据。有关将 Oracle TDE 与 Oracle 源终端节点结合使用的更多信息,请参阅使用 Oracle 作为数据源的支持的加密方法 AWS DMS。
AWS 支持在 Oracle 终端节点(以及所有其他端点类型)中使用 TLS 版本 1.2 及更高版本,并建议使用 TLS 版本 1.3 或更高版本。
按照以下步骤将 Oracle 数据库配置为 AWS DMS 源端点:
-
创建具有相应权限的 Oracle 用户 AWS DMS 来访问您的 Oracle 源数据库。
-
创建符合所选 Oracle 数据库配置的 Oracle 源端点。要创建 full-load-only 任务,无需进一步配置。
-
要创建处理变更数据捕获的任务(仅限 CDC 或满载和 CDC 任务),请选择 Oracle LogMiner 或 AWS DMS Binary Reader 来捕获数据更改。选择 LogMiner 或 Binary Reader 决定了后面的一些权限和配置选项。有关 LogMiner 和二进制阅读器的比较,请参阅以下部分。
注意
有关完全加载任务、仅 CDC 的任务以及完全加载和 CDC 任务的更多信息,请参阅创建任务
有关使用 Oracle 源数据库和的更多详细信息 AWS DMS,请参阅以下各节。
主题
- 在 CDC 中使用 Oracle LogMiner 或 AWS DMS 二进制阅读器
- 配置自我管理或 AWS托管的 Oracle 源数据库的工作流 AWS DMS配置 Oracle 源数据库
- 使用自行管理的 Oracle 数据库作为数据源 AWS DMS
- 使用 AWS由托管的 Oracle 数据库作为源 AWS DMS
- 使用 Oracle 作为来源的限制 AWS DMS
- Oracle 终端节点的 SSL 支持
- 使用 Oracle 作为数据源的支持的加密方法 AWS DMS
- 使用 Oracle 作为源时支持的压缩方法 AWS DMS
- 使用 Oracle 作为源复制嵌套表 AWS DMS
- 使用 Oracle 作为源时在 Oracle ASM 上存储 REDO AWS DMS
- 使用 Oracle 作为来源时的终端节点设置 AWS DMS
- Oracle 的源数据类型
在 CDC 中使用 Oracle LogMiner 或 AWS DMS 二进制阅读器
在中 AWS DMS,有两种方法可以在将 Oracle 作为源进行更改数据捕获 (CDC) 时读取重做日志:Oracle LogMiner 和 AWS DMS Binary Reader。 LogMiner 是一个 Oracle API,用于读取在线重做日志和存档的重做日志文件。Binary Reader 是一种直接读取和解析原始重做日志文件的 AWS DMS 方法。这些方法具有以下功能。
功能 | LogMiner | Binary Reader |
---|---|---|
易于配置 | 是 | 否 |
减少对源系统 I/O 和 CPU 的影响 | 否 | 是 |
CDC 性能更好 | 否 | 是 |
支持 Oracle 表集群 | 是 | 不支持 |
支持所有类型的 Oracle 混合列式压缩(HCC) | 是 |
部分支持 Binary Reader 不支持在执行 CDC 的任务中使用 QUERY LOW。完全支持所有其他 HCC 类型。 |
仅在 Oracle 12c 中支持 LOB 列 | 否(Oracle 12c LogMiner 中不提供 LOB Support。) | 是 |
支持仅影响 LOB 列的 UPDATE 语句 |
否 | 是 |
支持 Oracle 透明数据加密(TDE) |
部分支持 使用 Oracle 时 LogMiner, AWS DMS 不支持 Amazon RDS for Oracle 的列级别的 TDE 加密。 |
部分支持 Binary Reader 仅支持自管理 Oracle 数据库的 TDE。 |
支持所有 Oracle 压缩方法 | 是 | 不支持 |
支持 XA 事务 | 否 | 是 |
RAC |
是 由于性能原因和一些内部 DMS 限制,不建议这样做。 |
是 强烈建议 |
注意
默认情况下, AWS DMS 使用 Oracle LogMiner 进行 (CDC)。
AWS DMS 使用 Oracle 源数据库时支持透明数据加密 (TDE) 方法。如果您指定的 TDE 凭据不正确,则 AWS DMS 迁移任务不会失败,这可能会影响加密表的持续复制。有关指定 TDE 凭证的更多信息,请参阅使用 Oracle 作为数据源的支持的加密方法 AWS DMS。
LogMiner 与一起使用的主要优点 AWS DMS 包括以下几点:
-
LogMiner 支持大多数 Oracle 选项,例如加密选项和压缩选项。Binary Reader 不支持所有 Oracle 选项,特别是压缩选项和大多数加密选项。
-
LogMiner 提供了更简单的配置,尤其是与 Binary Reader 直接访问设置或使用 Oracle 自动存储管理 (ASM) 管理重做日志时。
-
LogMiner 支持表群集供使用 AWS DMS。Binary Reader 则不支持。
使用二进制阅读器的主要优点 AWS DMS 包括以下几点:
-
对于更改量大的迁移, LogMiner 可能会对托管 Oracle 源数据库的计算机产生一些 I/O 或 CPU 影响。Binary Reader 对 I/O 或 CPU 造成影响的几率更小,因为日志是直接挖掘的,而不是进行多个数据库查询。
-
对于变更量大的迁移,与使用 Oracle LogMiner 相比,使用 Binary Reader 时 CDC 的性能通常要好得多。
-
在 Oracle 版本 12c 中,二进制阅读器支持 LOB 的 CDC。 LogMiner不是。
通常,除非出现以下情况之一,否则使用 Oracle 迁移您的 Oracle 数据库: LogMiner
-
需要在源 Oracle 数据库上运行多个迁移任务。
-
源 Oracle 数据库上的更改量或重做日志量很大,或者您有更改并且还在使用 Oracle ASM。
注意
如果您在使用 Oracle LogMiner 和 AWS DMS 二进制阅读器之间切换,请务必重新启动 CDC 任务。
Oracle 源数据库上的 CDC 的配置
要将 Oracle 源端点连接到数据库以执行更改数据捕获(CDC)任务,您可能需要指定额外的连接属性。对于完全加载和 CDC 任务,或者仅 CDC 的任务,都可能如此。您指定的额外连接属性取决于您用来访问重做日志的方法:Oracle LogMiner 或 AWS DMS Binary Reader。
您在创建源端点时指定了额外的连接属性。如果您具有多个连接属性设置,请用分号将它们彼此分开,并且不需要额外的空格(例如,oneSetting;thenAnother
)。
AWS DMS LogMiner 默认使用。您无需指定额外连接属性即可使用它。
要使用 Binary Reader 访问重做日志,请添加以下额外连接属性。
useLogMinerReader=N;useBfile=Y;
为额外连接属性使用以下格式来访问将 ASM 与 Binary Reader 一起使用的服务器。
useLogMinerReader=N;useBfile=Y;asm_user=
asm_username
;asm_server=RAC_server_ip_address
:port_number
/+ASM;
如下所示将源终端节点 Password
请求参数设置为 Oracle 用户密码和 ASM 密码,以逗号分隔。
oracle_user_password
,asm_user_password
如果 Oracle 源使用 ASM,您可以使用 Binary Reader 中的高性能选项进行大规模事务处理。这些选项包括额外的连接属性,用于指定并行线程数 (parallelASMReadThreads
) 和预读缓冲区数 (readAheadBlocks
)。同时设置这些属性可以显著提高 CDC 任务的性能。以下设置为大多数 ASM 配置提供了良好的结果。
useLogMinerReader=N;useBfile=Y;asm_user=asm_username;asm_server=RAC_server_ip_address:port_number/+ASM; parallelASMReadThreads=6;readAheadBlocks=150000;
有关额外连接属性支持的值的更多信息,请参阅使用 Oracle 作为来源时的终端节点设置 AWS DMS。
此外,对使用 ASM 的 Oracle 源执行 CDC 任务的性能取决于您选择的其他设置。这些设置包括用于配置 Oracle 源的 AWS DMS 额外连接属性和 SQL 设置。有关使用 ASM 的 Oracle 源的额外连接属性的更多信息,请参阅使用 Oracle 作为来源时的终端节点设置 AWS DMS。
您还需要选择适当的 CDC 开始点。通常,在执行此操作时,您需要确定从哪个事务处理点捕获最早的未结事务,以便启动 CDC。否则,CDC 任务可能会错过之前的未结事务。对于 Oracle 源数据库,您可以根据 Oracle 系统更改号(SCN)选择 CDC 本机开始点,以此来确定最早的未结事务。有关更多信息,请参阅 从 CDC 开始点开始执行复制。
有关为使用自管理 Oracle 数据库作为源配置 CDC 的更多信息,请参阅使用 Oracle LogMiner 访问重做日志时所需的帐户权限、使用 AWS DMS Binary Reader 访问重做日志时所需的帐户权限和将 Binary Reader 与 Oracle ASM 配合使用时所需的其他账户权限。
有关将 CDC 配置为 AWS托管的 Oracle 数据库作为源的更多信息,请参见 将 CDC 任务配置为将二进制读取器与 RDS for Oracle 源一起使用 AWS DMS和。将 Amazon RDS Oracle Standby(只读副本)作为源与 Binary Reader 配合用于在 AWS DMS中执行 CDC
配置自我管理或 AWS托管的 Oracle 源数据库的工作流 AWS DMS
配置 Oracle 源数据库
要配置自管理的源数据库实例,请使用以下工作流程步骤,具体取决于您执行 CDC 的方式。
在此工作流程步骤中 | 如果您使用执行CDC LogMiner,请执行此操作 | 如果您使用 Binary Reader 执行 CDC,请执行此操作 |
---|---|---|
授予 Oracle 账户权限。 | 请参阅在自行管理的 Oracle 源上需要用户帐户权限 AWS DMS。 | 请参阅 在自行管理的 Oracle 源上需要用户帐户权限 AWS DMS。 |
准备源数据库以便使用 CDC 进行复制。 | 请参阅使用为 CDC 准备 Oracle 自行管理的源数据库 AWS DMS。 | 请参阅 使用为 CDC 准备 Oracle 自行管理的源数据库 AWS DMS。 |
为 CDC 授予所需的其他 Oracle 用户权限。 | 请参阅使用 Oracle LogMiner 访问重做日志时所需的帐户权限。 | 请参阅 使用 AWS DMS Binary Reader 访问重做日志时所需的帐户权限。 |
对于使用 ASM 的 Oracle 实例,请为 CDC 授予访问 ASM 所需的其他用户账户权限。 | 没有其他操作。 AWS DMS 无需其他帐户权限即可支持 Oracle ASM。 | 请参阅 将 Binary Reader 与 Oracle ASM 配合使用时所需的其他账户权限。 |
如果您尚未执行此操作,请配置要使用的任务 LogMiner 或 CDC 的 Binary Reader。 | 请参阅在 CDC 中使用 Oracle LogMiner 或 AWS DMS 二进制阅读器。 | 请参阅 在 CDC 中使用 Oracle LogMiner 或 AWS DMS 二进制阅读器。 |
将 Oracle Standby 配置为源来执行 CDC。 | AWS DMS 不支持 Oracle 备用服务器作为来源。 | 请参阅 将自管理 Oracle Standby 作为源与 Binary Reader 配合用于在 AWS DMS中执行 CDC。 |
使用以下工作流步骤配置 AWS托管的 Oracle 源数据库实例。
在此工作流程步骤中 | 如果您使用执行CDC LogMiner,请执行此操作 | 如果您使用 Binary Reader 执行 CDC,请执行此操作 |
---|---|---|
授予 Oracle 账户权限。 | 有关更多信息,请参阅 需要在 AWS托管的 Oracle 源上拥有用户帐户权限 AWS DMS。 | 有关更多信息,请参阅 需要在 AWS托管的 Oracle 源上拥有用户帐户权限 AWS DMS。 |
准备源数据库以便使用 CDC 进行复制。 | 有关更多信息,请参阅 为配置由 AWS托管的 Oracle 源 AWS DMS。 | 有关更多信息,请参阅 为配置由 AWS托管的 Oracle 源 AWS DMS。 |
为 CDC 授予所需的其他 Oracle 用户权限。 | 不需要额外的账户权限。 | 有关更多信息,请参阅 将 CDC 任务配置为将二进制读取器与 RDS for Oracle 源一起使用 AWS DMS。 |
如果您尚未执行此操作,请配置要使用的任务 LogMiner 或 CDC 的 Binary Reader。 | 有关更多信息,请参阅 在 CDC 中使用 Oracle LogMiner 或 AWS DMS 二进制阅读器。 | 有关更多信息,请参阅 在 CDC 中使用 Oracle LogMiner 或 AWS DMS 二进制阅读器。 |
将 Oracle Standby 配置为源来执行 CDC。 | AWS DMS 不支持 Oracle 备用服务器作为来源。 | 有关更多信息,请参阅 将 Amazon RDS Oracle Standby(只读副本)作为源与 Binary Reader 配合用于在 AWS DMS中执行 CDC。 |
使用自行管理的 Oracle 数据库作为数据源 AWS DMS
自管理数据库是您配置和控制的数据库,它是本地数据库实例或 Amazon EC2 上的数据库。接下来,您可以了解使用自管理的 Oracle 数据库时所需的权限和配置。 AWS DMS
在自行管理的 Oracle 源上需要用户帐户权限 AWS DMS
要使用 Oracle 数据库作为中的源 AWS DMS,请向在 Oracle 端点连接设置中指定的 Oracle 用户授予以下权限。
注意
当授予权限时,请使用对象的实际名称,而不是每个对象的同义词。例如,请使用带下划线的 V_$OBJECT
,而不是不带下划线的 V$OBJECT
。
GRANT CREATE SESSION TO
db_user
; GRANT SELECT ANY TRANSACTION TOdb_user
; GRANT SELECT ON V_$ARCHIVED_LOG TOdb_user
; GRANT SELECT ON V_$LOG TOdb_user
; GRANT SELECT ON V_$LOGFILE TOdb_user
; GRANT SELECT ON V_$LOGMNR_LOGS TOdb_user
; GRANT SELECT ON V_$LOGMNR_CONTENTS TOdb_user
; GRANT SELECT ON V_$DATABASE TOdb_user
; GRANT SELECT ON V_$THREAD TOdb_user
; GRANT SELECT ON V_$PARAMETER TOdb_user
; GRANT SELECT ON V_$NLS_PARAMETERS TOdb_user
; GRANT SELECT ON V_$TIMEZONE_NAMES TOdb_user
; GRANT SELECT ON V_$TRANSACTION TOdb_user
; GRANT SELECT ON V_$CONTAINERS TOdb_user
; GRANT SELECT ON ALL_INDEXES TOdb_user
; GRANT SELECT ON ALL_OBJECTS TOdb_user
; GRANT SELECT ON ALL_TABLES TOdb_user
; GRANT SELECT ON ALL_USERS TOdb_user
; GRANT SELECT ON ALL_CATALOG TOdb_user
; GRANT SELECT ON ALL_CONSTRAINTS TOdb_user
; GRANT SELECT ON ALL_CONS_COLUMNS TOdb_user
; GRANT SELECT ON ALL_TAB_COLS TOdb_user
; GRANT SELECT ON ALL_IND_COLUMNS TOdb_user
; GRANT SELECT ON ALL_ENCRYPTED_COLUMNS TOdb_user
; GRANT SELECT ON ALL_LOG_GROUPS TOdb_user
; GRANT SELECT ON ALL_TAB_PARTITIONS TOdb_user
; GRANT SELECT ON SYS.DBA_REGISTRY TOdb_user
; GRANT SELECT ON SYS.OBJ$ TOdb_user
; GRANT SELECT ON DBA_TABLESPACES TOdb_user
; GRANT SELECT ON DBA_OBJECTS TOdb_user
; -– Required if the Oracle version is earlier than 11.2.0.3. GRANT SELECT ON SYS.ENC$ TOdb_user
; -– Required if transparent data encryption (TDE) is enabled. For more information on using Oracle TDE with AWS DMS, see 使用 Oracle 作为数据源的支持的加密方法 AWS DMS. GRANT SELECT ON GV_$TRANSACTION TOdb_user
; -– Required if the source database is Oracle RAC in AWS DMS versions 3.4.6 and higher. GRANT SELECT ON V_$DATAGUARD_STATS TOdb_user
; -- Required if the source database is Oracle Data Guard and Oracle Standby is used in the latest release of DMS version 3.4.6, version 3.4.7, and higher. GRANT SELECT ON V$DATABASE_INCARNATION TOdb_user
;
当您使用特定表列表时,为每个复制表授予以下附加权限。
GRANT SELECT on
any-replicated-table
todb_user
;
授予以下额外权限,即可使用验证功能验证 LOB 列。
GRANT EXECUTE ON SYS.DBMS_CRYPTO TO
db_user
;
如果您使用二进制读取器代替,则授予以下额外权限 LogMiner。
GRANT SELECT ON SYS.DBA_DIRECTORIES TO
db_user
;
授予以下额外权限以公开视图。
GRANT SELECT on ALL_VIEWS to
dms_user
;
要公开视图,您还必须向源端点添加额外连接属性 exposeViews=true
。
使用无服务器复制时,请授予以下额外权限。
GRANT SELECT on dba_segments to
db_user
;
有关无服务器复制的更多信息,请参阅使用无 AWS DMS 服务器。
使用 Oracle 特定的迁移前评测时,请授予以下额外权限。
GRANT SELECT on gv_$parameter to
dms_user
; GRANT SELECT on v_$instance todms_user
; GRANT SELECT on v_$version todms_user
; GRANT SELECT on gv_$ASM_DISKGROUP todms_user
; GRANT SELECT on gv_$database todms_user
; GRANT SELECT on dba_db_links todms_user
; GRANT SELECT on gv_$log_History todms_user
; GRANT SELECT on gv_$log todms_user
; GRANT SELECT ON DBA_TYPES TOdb_user
; GRANT SELECT ON DBA_USERS to dms_user; GRANT SELECT ON DBA_DIRECTORIES to dms_user;
有关 Oracle 特定迁移前评测的更多信息,请参阅甲骨文评估。
处理 Oracle Standby 未结事务的先决条件
使用 3.4.6 及更高 AWS DMS 版本时,请执行以下步骤来处理 Oracle 备用版本的未结事务。
-
在主数据库上创建名为
AWSDMS_DBLINK
的数据库链接。
将使用此数据库链接连接到主数据库。请注意,此数据库链接是从备用实例执行的,用于查询主数据库上运行的未结事务。请参阅以下示例。DMS_USER
CREATE PUBLIC DATABASE LINK AWSDMS_DBLINK CONNECT TO
DMS_USER
IDENTIFIED BYDMS_USER_PASSWORD
USING '(DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=PRIMARY_HOST_NAME_OR_IP
)(PORT=PORT
)) (CONNECT_DATA=(SERVICE_NAME=SID
)) )'; -
验证是否已建立与使用
的数据库链接的连接,如以下示例所示。DMS_USER
select 1 from dual@AWSDMS_DBLINK
使用为 CDC 准备 Oracle 自行管理的源数据库 AWS DMS
通过执行以下操作,准备将您的 Oracle 自管理数据库作为运行 CDC 任务的源:
正在验证是否 AWS DMS 支持源数据库版本
运行以下示例查询,验证 AWS DMS是否支持 Oracle 源数据库的当前版本。
SELECT name, value, description FROM v$parameter WHERE name = 'compatible';
此处,name
、value
和 description
列是数据库中某个位置的列,正根据 name
的值查询这些列。如果此查询运行没有错误,则 AWS DMS 支持数据库的当前版本,您可以继续迁移。如果查询引发错误,则 AWS DMS 不支持数据库的当前版本。要继续迁移,请先将 Oracle 数据库转换为支持的版本 AWS DMS。
确保已开启 ARCHIVELOG 模式
您可以在两种不同的模式下运行 Oracle: ARCHIVELOG
模式和 NOARCHIVELOG
模式。要运行 CDC 任务,请在 ARCHIVELOG
模式下运行数据库。要知道数据库是否处于 ARCHIVELOG
模式,请执行以下查询。
SQL> SELECT log_mode FROM v$database;
如果返回到 NOARCHIVELOG
模式,请按照 Oracle 的指示将数据库设置为 ARCHIVELOG
。
设置补充日志记录
要捕获正在进行的更改, AWS DMS 需要在 Oracle 源数据库上启用最低限度的补充日志记录。此外,您需要对数据库中每个已复制的表启用补充日志记录。
默认情况下,在所有复制的表上 AWS DMS 添加PRIMARY KEY
补充日志记录。 AWS DMS 要允许添加PRIMARY KEY
补充日志记录,请为每个复制的表授予以下权限。
ALTER on
any-replicated-table
;
您可以 AWS DMS 使用 extra 连接属性addSupplementalLogging
禁用添加的默认PRIMARY KEY
补充日志记录。有关更多信息,请参阅 使用 Oracle 作为来源时的终端节点设置 AWS DMS。
如果您的复制任务使用未引用主键列的 WHERE
子句更新表,请务必打开补充日志记录。
要手动设置补充日志记录
-
运行以下查询来验证是否为数据库启用了补充日志记录。
SELECT supplemental_log_data_min FROM v$database;
如果返回的结果为
YES
或IMPLICIT
,则为数据库启用了补充日志记录。否则,请通过运行以下命令,为数据库启用补充日志记录。
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
-
确保为每个复制的表添加了所需的补充日志记录。
请考虑以下事项:
-
如果向表中添加了
ALL COLUMNS
补充日志记录,则无需添加更多日志记录。 -
如果存在主键,请为主键添加补充日志记录。为此,您可以使用格式在主键上添加补充日志记录,也可以在数据库的主键列上添加补充日志记录。
ALTER TABLE Tablename ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
-
如果不存在主键并且表具有单个唯一索引,则将所有唯一索引的列添加到补充日志。
ALTER TABLE
TableName
ADD SUPPLEMENTAL LOG GROUPLogGroupName
(UniqueIndexColumn1
[,UniqueIndexColumn2
] ...) ALWAYS;使用
SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS
不会将唯一索引列添加到日志。 -
如果不存在主键且表有多个唯一索引,则在按字母顺序升序列表 AWS DMS 中选择第一个唯一索引。您需要像上一项那样在所选索引的列上添加补充日志记录。
使用
SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS
不会将唯一索引列添加到日志。 -
如果不存在主键,也没有唯一索引,则在所有列上添加补充日志记录。
ALTER TABLE
TableName
ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;在某些情况下,目标表主键或唯一索引不同于源表主键或唯一索引。在这些情况下,请在构成目标表主键或唯一索引的源表列上手动添加补充日志记录。
此外,如果您更改目标表主键,请在目标唯一索引的列上添加补充日志记录,而不是在原始主键或唯一索引的列上添加。
-
如果为表定义了筛选器或转换,则可能需要启用其他日志记录。
请考虑以下事项:
-
如果向表中添加了
ALL COLUMNS
补充日志记录,则无需添加更多日志记录。 -
如果表具有唯一索引或主键,请在筛选器或转换中涉及的每一列上添加补充日志记录。但是,仅在这些列与主键列或唯一索引列不同时才执行此操作。
-
如果转换只包含一列,请不要将此列添加到补充日志记录组。例如,对于转换
A+B
,请在A
和B
这两列上添加补充日志记录。但是,对于转换substring(A,10)
,请不要在列A
上添加补充日志记录。 -
要在主键或唯一索引列以及经过筛选或转换的其他特定列上设置补充日志记录,可以设置
USER_LOG_GROUP
补充日志记录。在主键或唯一索引列和经过筛选或转换的其他特定列上添加此日志记录。例如,要复制名为
TEST.LOGGING
的表,该表的主键为ID
且按列NAME
进行筛选,您可以运行如下命令来创建日志组补充日志记录。ALTER TABLE TEST.LOGGING ADD SUPPLEMENTAL LOG GROUP TEST_LOG_GROUP (ID, NAME) ALWAYS;
使用 Oracle LogMiner 访问重做日志时所需的帐户权限
要使用 Oracle 访问重做日志 LogMiner,请向在 Oracle 端点连接设置中指定的 Oracle 用户授予以下权限。
GRANT EXECUTE on DBMS_LOGMNR to db_user; GRANT SELECT on V_$LOGMNR_LOGS to db_user; GRANT SELECT on V_$LOGMNR_CONTENTS to db_user; GRANT LOGMINING to db_user; -– Required only if the Oracle version is 12c or higher.
使用 AWS DMS Binary Reader 访问重做日志时所需的帐户权限
要使用 AWS DMS 二进制读取器访问重做日志,请向在 Oracle 端点连接设置中指定的 Oracle 用户授予以下权限。
GRANT SELECT on v_$transportable_platform to db_user; -– Grant this privilege if the redo logs are stored in Oracle Automatic Storage Management (ASM) and AWS DMS accesses them from ASM. GRANT CREATE ANY DIRECTORY to db_user; -– Grant this privilege to allow AWS DMS to use Oracle BFILE read file access in certain cases. This access is required when the replication instance doesn't have file-level access to the redo logs and the redo logs are on non-ASM storage. GRANT EXECUTE on DBMS_FILE_TRANSFER to db_user; -– Grant this privilege to copy the redo log files to a temporary folder using the CopyToTempFolder method. GRANT EXECUTE on DBMS_FILE_GROUP to db_user;
Binary Reader 与 Oracle 文件功能(包括 Oracle 目录)配合使用。每个 Oracle 目录对象都包含要处理的重做日志文件所在文件夹的名称。这些 Oracle 目录不在文件系统级别表示。相反,它们是在 Oracle 数据库级别创建的逻辑目录。您可以在 Oracle ALL_DIRECTORIES
视图中查看它们。
如果 AWS DMS 要创建这些 Oracle 目录,请授予前面指定的CREATE
ANY DIRECTORY
权限。 AWS DMS 创建带有DMS_
前缀的目录名称。如果您不授予 CREATE ANY DIRECTORY
权限,请手动创建相应的目录。在某些情况下,当您手动创建 Oracle 目录时,Oracle 源终端节点中指定的 Oracle 用户不是创建这些目录的用户。在这些情况下,还要授予 READ
on DIRECTORY
特权。
如果 Oracle 源端点处于 Active Dataguard 待机 (ADG) 状态,请参阅数据库博客上的 “如何将 Binary Reader 与 ADG 一起使用 Binary Re
注意
AWS DMS CDC 不支持未配置为使用自动重做传输服务的活动 Dataguard 待机。
在某些情况下,您可能会使用 Oracle 管理的文件 (OMF) 来存储日志。或者,您的源端点位于 ADG 中,并且无法授予 CREATE ANY DIRECTORY 权限。在这些情况下,请在开始 AWS DMS 复制任务之前手动创建包含所有可能日志位置的目录。如果 AWS DMS
找不到预先创建的目录,则任务将停止。此外, AWS DMS 不会删除它在 ALL_DIRECTORIES
视图中创建的条目,因此应手动删除这些条目。
将 Binary Reader 与 Oracle ASM 配合使用时所需的其他账户权限
要使用 Binary Reader 访问 Automatic Storage Management(ASM)中的重做日志,请向 Oracle 端点连接设置中指定的 Oracle 用户授予以下权限。
SELECT ON v_$transportable_platform SYSASM -– To access the ASM account with Oracle 11g Release 2 (version 11.2.0.2) and higher, grant the Oracle endpoint user the SYSASM privilege. For older supported Oracle versions, it's typically sufficient to grant the Oracle endpoint user the SYSDBA privilege.
您可以通过打开命令提示符并调用以下语句之一来验证 ASM 账户访问权限,具体取决于前面指定的 Oracle 版本。
如果您需要 SYSDBA
权限,请使用以下语句。
sqlplus
asmuser
/asmpassword
@+asmserver
as sysdba
如果您需要 SYSASM
权限,请使用以下语句。
sqlplus
asmuser
/asmpassword
@+asmserver
as sysasm
将自管理 Oracle Standby 作为源与 Binary Reader 配合用于在 AWS DMS中执行 CDC
要在使用 Binary Reader 执行 CDC 时将 Oracle Standby 实例配置为源,请先满足以下先决条件:
-
AWS DMS 目前仅支持 Oracle 主动数据防护待机。
-
确保 Oracle Data Guard 配置使用:
-
重做传输服务以自动传输重做数据。
-
应用服务以自动对备用数据库应用重做。
-
要确认是否满足这些要求,请执行以下查询。
SQL> select open_mode, database_role from v$database;
从该查询的输出中,确认备用数据库是否以只读模式打开,并且正在自动应用重做。例如:
OPEN_MODE DATABASE_ROLE -------------------- ---------------- READ ONLY WITH APPLY PHYSICAL STANDBY
要在使用 Binary Reader 执行 CDC 时将 Oracle Standby 实例配置为源
-
授予访问待机日志文件所需的其他权限。
GRANT SELECT ON v_$standby_log TO
db_user
; -
使用 AWS Management Console 或 AWS CLI为 Oracle Standby 创建源端点。创建端点时,请指定以下额外的连接属性。
useLogminerReader=N;useBfile=Y;
注意
在中 AWS DMS,您可以使用额外的连接属性来指定是否要从存档日志而不是重做日志中迁移。有关更多信息,请参阅 使用 Oracle 作为来源时的终端节点设置 AWS DMS。
-
配置存档日志目标。
未配置 ASM 的 Oracle 源的 DMS Binary Reader 使用 Oracle 目录来访问存档的重做日志。如果您的数据库配置为使用闪回恢复区(FRA)作为存档日志目标,则存档重做文件的位置不固定。每天生成存档的重做日志会导致在 FRA 中创建一个目录名称格式为 YYYY_MM_DD 的新目录。例如:
DB_RECOVERY_FILE_DEST
/SID
/archivelog/YYYY_MM_DD
当 DMS 需要访问在新创建的 FRA 目录中存档的重做文件,并且使用主读写数据库作为源时,DMS 会创建一个新的 Oracle 目录或替换现有的 Oracle 目录,如下所示。
CREATE OR REPLACE DIRECTORY
dmsrep_taskid
AS ‘DB_RECOVERY_FILE_DEST
/SID
/archivelog/YYYY_MM_DD
’;如果使用备用数据库作为源,DMS 无法创建或替换 Oracle 目录,因为该数据库处于只读模式。但是,您可以选择执行以下附加步骤之一:
-
将
log_archive_dest_id_1
改为使用实际路径,而不使用 Oracle 不会创建每日子目录的配置中的 FRA:ALTER SYSTEM SET log_archive_dest_1=’LOCATION=
full directory path
’然后,创建一个供 DMS 使用的 Oracle 目录对象:
CREATE OR REPLACE DIRECTORY dms_archived_logs AS ‘
full directory path
’; -
创建一个额外的存档日志目标和一个指向该目标的 Oracle 目录对象。例如:
ALTER SYSTEM SET log_archive_dest_3=’LOCATION=
full directory path
’; CREATE DIRECTORY dms_archived_log AS ‘full directory path
’;然后向任务源端点添加一个额外的连接属性:
archivedLogDestId=3
-
手动预创建一个供 DMS 使用的 Oracle 目录对象。
CREATE DIRECTORY
dms_archived_log_20210301
AS ‘DB_RECOVERY_FILE_DEST/SID/archivelog/2021_03_01
’; CREATE DIRECTORYdms_archived_log_20210302
AS ‘DB_RECOVERY_FILE_DEST>/SID>/archivelog/2021_03_02
’; ... -
创建每天运行的 Oracle 调度程序任务,并创建所需的目录。
-
在 Oracle Cloud Infrastructure(OCI)上使用用户管理的数据库作为在 AWS DMS中执行 CDC 的源
用户管理的数据库是您配置和控制的数据库,例如在虚拟机(VM)、裸机或 Exadata 服务器上创建的 Oracle 数据库。或是您配置和控制的在专用基础架构上运行的数据库,例如 Oracle Cloud Infrastructure(OCI)。以下信息描述了在 OCI 上使用 Oracle 用户管理的数据库作为在 AWS DMS中执行更改数据捕获(CDC)源时所需的权限和配置。
要将由 OCI 托管的用户管理的 Oracle 数据库配置为更改数据捕获源
-
为 OCI 上用户管理的 Oracle 源数据库授予所需的用户账户权限。有关更多信息,请参阅自管理 Oracle 源端点的账户权限。
-
授予使用 Binary Reader 访问重做日志时所需的账户权限。有关更多信息,请参阅使用 Binary Reader 时所需的账户权限。
-
添加将 Binary Reader 与 Oracle Automatic Storage Management(ASM)结合使用时所需的账户权限。有关更多信息,请参阅将 Binary Reader 与 Oracle ASM 结合使用时所需的其他账户权限。
-
设置补充日志记录。有关更多信息,请参阅设置补充日志记录。
-
设置 TDE 加密。有关更多信息,请参阅将 Oracle 数据库用作源端点时使用的加密方法。
在 Oracle Cloud Infrastructure(OCI)上从 Oracle 源数据库复制数据时,存在以下限制。
限制
-
DMS 不支持使用 Oracle LogMiner 访问重做日志。
-
DMS 不支持自治数据库。
使用 AWS由托管的 Oracle 数据库作为源 AWS DMS
AWS托管数据库是位于亚马逊服务(例如 Amazon RDS、Amazon Aurora 或 Amazon S3)上的数据库。接下来,您可以找到使用 AWS托管的 Oracle 数据库时需要设置的权限和配置。 AWS DMS
需要在 AWS托管的 Oracle 源上拥有用户帐户权限 AWS DMS
向 Oracle 源端点定义中指定的 Oracle 用户账户授予以下权限。
重要
对于所有参数值(例如
和 db_user
),除非您使用区分大小写的标识符指定值,否则 Oracle 会假定值全部大写。例如,假设您在创建 any-replicated-table
值时未使用引号,例如 db_user
CREATE USER
或 myuser
CREATE USER
MYUSER
。在这种情况下,Oracle 会识别此值并以全部大写的形式存储(MYUSER
)。如果使用引号(例如 CREATE USER "MyUser"
或 CREATE USER 'MyUser'
),Oracle 会识别并存储您指定的区分大小写的值(MyUser
)。
GRANT CREATE SESSION to
db_user
; GRANT SELECT ANY TRANSACTION todb_user
; GRANT SELECT on DBA_TABLESPACES todb_user
; GRANT SELECT ONany-replicated-table
todb_user
; GRANT EXECUTE on rdsadmin.rdsadmin_util todb_user
; -- For Oracle 12c or higher: GRANT LOGMINING to db_user; – Required only if the Oracle version is 12c or higher.
此外,还要使用如下所示的 Amazon RDS 过程 rdsadmin.rdsadmin_util.grant_sys_object
为 SYS
对象授予 SELECT
和 EXECUTE
权限。有关更多信息,请参阅向 SYS 对象授予 SELECT 或 EXECUTE 权限。
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_VIEWS', '
db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TAB_PARTITIONS', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_INDEXES', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_OBJECTS', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TABLES', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_USERS', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CATALOG', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CONSTRAINTS', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_CONS_COLUMNS', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TAB_COLS', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_IND_COLUMNS', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_LOG_GROUPS', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOG', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGFILE', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$THREAD', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$PARAMETER', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$NLS_PARAMETERS', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TIMEZONE_NAMES', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$TRANSACTION', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$CONTAINERS', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_REGISTRY', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('OBJ$', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_ENCRYPTED_COLUMNS', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS', 'db_user
', 'SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS','db_user
','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR', 'db_user
', 'EXECUTE'); -- (as of Oracle versions 12.1 and higher) exec rdsadmin.rdsadmin_util.grant_sys_object('REGISTRY$SQLPATCH', 'db_user
', 'SELECT'); -- (for Amazon RDS Active Dataguard Standby (ADG)) exec rdsadmin.rdsadmin_util.grant_sys_object('V_$STANDBY_LOG', 'db_user
', 'SELECT'); -- (for transparent data encryption (TDE)) exec rdsadmin.rdsadmin_util.grant_sys_object('ENC$', 'db_user
', 'SELECT'); -- (for validation with LOB columns) exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_CRYPTO', 'db_user
', 'EXECUTE'); -- (for binary reader) exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_DIRECTORIES','db_user
','SELECT'); -- Required when the source database is Oracle Data guard, and Oracle Standby is used in the latest release of DMS version 3.4.6, version 3.4.7, and higher. exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATAGUARD_STATS', 'db_user
', 'SELECT');
有关将 Amazon RDS Active Dataguard Standby(ADG)与 AWS DMS 配合使用的更多信息,请参阅将 Amazon RDS Oracle Standby(只读副本)作为源与 Binary Reader 配合用于在 AWS DMS中执行 CDC。
有关将 Oracle TDE 与配合使用的更多信息 AWS DMS,请参阅使用 Oracle 作为数据源的支持的加密方法 AWS DMS。
处理 Oracle Standby 未结事务的先决条件
使用 3.4.6 及更高 AWS DMS 版本时,请执行以下步骤来处理 Oracle 备用版本的未结事务。
-
在主数据库上创建名为
AWSDMS_DBLINK
的数据库链接。
将使用此数据库链接连接到主数据库。请注意,此数据库链接是从备用实例执行的,用于查询主数据库上运行的未结事务。请参阅以下示例。DMS_USER
CREATE PUBLIC DATABASE LINK AWSDMS_DBLINK CONNECT TO
DMS_USER
IDENTIFIED BYDMS_USER_PASSWORD
USING '(DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=PRIMARY_HOST_NAME_OR_IP
)(PORT=PORT
)) (CONNECT_DATA=(SERVICE_NAME=SID
)) )'; -
验证是否已建立与使用
的数据库链接的连接,如以下示例所示。DMS_USER
select 1 from dual@AWSDMS_DBLINK
为配置由 AWS托管的 Oracle 源 AWS DMS
在使用 AWS托管的 Oracle 数据库作为源之前 AWS DMS,请对 Oracle 数据库执行以下任务:
-
启用自动备份。有关启用自动备份的更多信息,请参阅《Amazon RDS 用户指南》中的启用自动备份。
-
设置补充日志记录。
-
设置存档。存档适用于 Oracle 的 Amazon RDS 数据库实例的重做日志 AWS DMS 允许使用 Oracle LogMiner 或 Binary Reader 检索日志信息。
设置存档
-
运行
rdsadmin.rdsadmin_util.set_configuration
命令以设置存档。例如,要将已存档的重做日志保留 24 小时,请运行以下命令。
exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24); commit;
注意
要使更改生效,必须执行提交操作。
-
确保您的存储具有足够的空间,可以满足指定保留期内的存档重做日志需求。例如,如果您的保留期为 24 小时,请计算在典型的事务处理小时内累积的存档重做日志的总大小,然后将该总大小乘以 24。将计算得出的 24 小时总存储空间与您的可用存储空间进行比较,确定是否有足够的存储空间来处理整整 24 小时的事务。
设置补充日志记录
-
运行以下命令在数据库级别启用补充日志记录。
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
-
运行以下命令为主键列启用补充日志记录。
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','PRIMARY KEY');
-
(可选)在表级别启用键级别补充日志记录。
启用键级别补充日志记录时,您的源数据库会产生少量开销。因此,如果您仅迁移一部分表,可能需要在表级别启用键级别补充日志记录。要在表级别启用键级别补充日志记录,请运行以下命令。
alter table table_name add supplemental log data (PRIMARY KEY) columns;
将 CDC 任务配置为将二进制读取器与 RDS for Oracle 源一起使用 AWS DMS
您可以配置 AWS DMS 为使用适用于 CDC 的二进制读取器访问源 Amazon RDS for Oracle 实例重做日志。
注意
要使用 Oracle LogMiner,所需的最低用户帐户权限就足够了。有关更多信息,请参阅 需要在 AWS托管的 Oracle 源上拥有用户帐户权限 AWS DMS。
要使用 AWS DMS Binary Reader,请根据您的 AWS DMS 版本为 Oracle 源端点指定其他设置和额外连接属性。
以下版本的 Amazon RDS for Oracle 支持 Binary Reader:
-
Oracle 11.2 – 版本 11.2.0.4V11 及更高版本
-
Oracle 12.1 – 版本 12.1.0.2.V7 及更高版本
-
Oracle 12.2 – 所有版本
-
Oracle 18.0 – 所有版本
-
Oracle 19.0 – 所有版本
使用 Binary Reader 配置 CDC
-
以主用户身份登录您的 Amazon RDS for Oracle 源数据库,然后运行以下存储过程来创建服务器级目录。
exec rdsadmin.rdsadmin_master_util.create_archivelog_dir; exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
-
向用于访问 Oracle 源端点的 Oracle 用户账户授予以下权限。
GRANT READ ON DIRECTORY ONLINELOG_DIR TO
db_user
; GRANT READ ON DIRECTORY ARCHIVELOG_DIR TOdb_user
; -
在 Amazon RDS Oracle 源端点上设置以下额外连接属性:
-
对于 RDS Oracle 版本 11.2 和 12.1,请设置以下内容。
useLogminerReader=N;useBfile=Y;accessAlternateDirectly=false;useAlternateFolderForOnline=true; oraclePathPrefix=/rdsdbdata/db/{$DATABASE_NAME}_A/;usePathPrefix=/rdsdbdata/log/;replacePathPrefix=true;
-
对于 RDS Oracle 版本 12.2、18.0 和 19.0,请设置以下内容。
useLogminerReader=N;useBfile=Y;
-
注意
对于多个属性设置,请确保分号分隔符(;)后面没有空格(例如,oneSetting;thenAnother
)。
有关配置 CDC 任务的更多信息,请参阅Oracle 源数据库上的 CDC 的配置。
将 Amazon RDS Oracle Standby(只读副本)作为源与 Binary Reader 配合用于在 AWS DMS中执行 CDC
要将 Amazon RDS for Oracle Standby 作为在 AWS DMS中使用 Binary Reader 执行 CDC 的源,请验证以下先决条件:
-
使用 Oracle 主用户设置 Binary Reader。
-
确保 AWS DMS 当前仅支持使用 Oracle 主动数据防护待机。
完成此操作后,请按照以下步骤将 RDS for Oracle Standby 作为使用 Binary Reader 执行 CDC 的源。
要在使用 Binary Reader 执行 CDC 时将 RDS for Oracle Standby 配置为源
-
以主用户身份登录 RDS for Oracle 主实例。
-
运行《Amazon RDS 用户指南》中记录的以下存储过程来创建服务器级目录。
exec rdsadmin.rdsadmin_master_util.create_archivelog_dir; exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
-
确定在步骤 2 中创建的目录。
SELECT directory_name, directory_path FROM all_directories WHERE directory_name LIKE ( 'ARCHIVELOG_DIR_%' ) OR directory_name LIKE ( 'ONLINELOG_DIR_%' )
例如,前面的代码显示了如下所示的目录列表。
-
向用于访问 Oracle Standby 的 Oracle 用户账户授予上述目录的
Read
权限。GRANT READ ON DIRECTORY ARCHIVELOG_DIR_A TO
db_user
; GRANT READ ON DIRECTORY ARCHIVELOG_DIR_B TOdb_user
; GRANT READ ON DIRECTORY ONLINELOG_DIR_A TOdb_user
; GRANT READ ON DIRECTORY ONLINELOG_DIR_B TOdb_user
; -
在主实例上执行存档日志切换。这样做可以确保将对
ALL_DIRECTORIES
的更改也移植到 Oracle Standby。 -
在 Oracle Standby 上运行
ALL_DIRECTORIES
查询来确认已应用更改。 -
使用 AWS DMS 管理控制台或 AWS Command Line Interface (AWS CLI) 为 Oracle 备用服务器创建源端点。创建端点时,请指定以下额外的连接属性。
useLogminerReader=N;useBfile=Y;archivedLogDestId=1;additionalArchivedLogDestId=2
-
创建终端节点后,使用控制台的 “创建端点” 页面上的测试端点连接或 AWS CLI
test-connection
命令来验证连接是否已建立。
使用 Oracle 作为来源的限制 AWS DMS
将 Oracle 数据库作为 AWS DMS源时,存在以下限制:
-
AWS DMS 支持 3.5.0 及更高 AWS DMS 版本中的 Oracle 扩展数据类型。
-
AWS DMS 不支持长对象名(超过 30 字节)。
-
AWS DMS 不支持基于函数的索引。
-
如果您管理补充日志记录并对任何列执行转换,请确保为所有字段和列激活补充日志记录。有关设置补充日志记录的信息,请参阅以下主题:
-
对于自管理 Oracle 源数据库,请参阅设置补充日志记录。
-
有关 AWS托管的 Oracle 源数据库,请参见 为配置由 AWS托管的 Oracle 源 AWS DMS。
-
-
AWS DMS 不支持多租户容器根数据库 (CDB$ROOT)。但它支持使用 Binary Reader 的 PDB。
-
AWS DMS 不支持延迟约束。
-
在 3.5.1 及更高 AWS DMS 版本中,只有通过执行 LOB 查找才能支持安全 LOB。
-
AWS DMS 支持所有支持的 Oracle 版本 11 及更高版本的
rename table table-name to new-table-name
语法。但不支持任何 Oracle 版本 10 的源数据库中的此语法。 -
AWS DMS 不会复制 DDL 语句
ALTER TABLE ADD
的结果。它将新列设置为column
data_type
DEFAULTdefault_value
NULL
,而不是将
复制到目标。default_value
-
使用 3.4.7 或更高 AWS DMS 版本时,要复制因分区或子分区操作而产生的更改,请在启动 DMS 任务之前执行以下操作。
-
手动创建分区表结构(DDL);
-
确保 Oracle 源和 Oracle 目标上的 DDL 相同;
-
设置额外的连接属性
enableHomogenousPartitionOps=true
。
有关
enableHomogenousPartitionOps
的更多信息,请参阅使用 Oracle 作为来源时的终端节点设置 AWS DMS。另请注意,在 FULL+CDC 任务中,DMS 不会复制作为缓存更改的一部分捕获的数据更改。在该使用案例中,将在 Oracle 目标上重新创建表结构并重新加载有问题的表。3.4.7 之前的 AWS DMS 版本:
DMS 不复制由于分区或子分区操作(
ADD
、DROP
、EXCHANGE
和TRUNCATE
)而导致的数据更改。此类更新可能会导致复制过程中出现以下错误:-
对于
ADD
操作,对添加的数据进行更新和删除可能会引发 “0 rows affected (0 行受到影响)” 警告。 -
对于
DROP
和TRUNCATE
操作,新插入可能会引发“duplicates (重复项)” 错误。 -
EXCHANGE
操作可能会引发 “0 rows affected (0 行受到影响)” 警告和“duplicates (重复项)” 错误。
要复制由于分区或子分区操作而导致的更改,请重新加载有问题的表。添加新的空分区之后,对新添加的表执行的操作将正常复制到目标。
-
-
AWS DMS 3.4 之前的版本不支持在源代码上运行
CREATE TABLE AS
语句所导致的目标数据更改。但是,在目标上会创建新表。 -
AWS DMS 不捕获 Oracle
DBMS_REDEFINITION
包所做的更改,例如表元数据和OBJECT_ID
字段。 -
AWS DMS 将空的 BLOB 和 CLOB 列映射到
NULL
目标上。 -
使用 Oracle 11 捕获更改时 LogMiner,字符串长度大于 1982 的 CLOB 列的更新会丢失,目标也不会更新。
-
在更改数据捕获 (CDC) 期间, AWS DMS 不支持对定义为主键的数字列进行批量更新。
-
AWS DMS 不支持某些
UPDATE
命令。以下示例是一个不支持的UPDATE
命令。UPDATE TEST_TABLE SET KEY=KEY+1;
此处,
TEST_TABLE
是表名称,KEY
是定义为主键的数值列。 -
AWS DMS 不支持完整的 LOB 模式来加载长整的 RAW 列和 LONG RAW 列。但您可以使用受限的 LOB 模式将这些数据类型迁移到 Oracle 目标。在受限 LOB 模式下,将所有设置为长度超过 64 KB 的 LONG 或 LONG RAW 列的数据 AWS DMS 截断为 64 KB。
-
AWS DMS 不支持用于加载 XMLTYPE 列的完整 LOB 模式。但您可以使用受限的 LOB 模式将 XMLTYPE 列迁移到 Oracle 目标。在受限 LOB 模式下,DMS 会截断大于用户定义的“最大 LOB 大小”变量的任何数据。“最大 LOB 大小”的最大建议值为 100MB。
-
AWS DMS 不会复制名称包含撇号的表。
-
AWS DMS 从物化视图中支持 CDC。但是,DMS 不支持从其他任何视图执行 CDC。
-
AWS DMS 不支持 CDC 用于按索引组织的带有溢出段的表。
-
AWS DMS 不支持对按引用分区且
enableHomogenousPartitionOps
设置为true
的表Drop Partition
执行操作。 -
使用 Oracle LogMiner 访问重做日志时, AWS DMS 有以下限制:
-
仅适用于 Oracle 12, AWS DMS 不会复制对 LOB 列的任何更改。
-
对于所有 Oracle 版本, AWS DMS 不会复制对
XMLTYPE
和 LOB 列进行UPDATE
操作的结果。 -
AWS DMS 使用 Oracle 时不支持复制中的 XA 事务 LogMiner。
-
Oracle LogMiner 不支持与可插拔数据库 (PDB) 的连接。要连接到 PDB,请使用 Binary Reader 访问重做日志。
-
不支持缩小空间操作。
-
-
使用二进制阅读器时, AWS DMS 有以下限制:
-
它不支持表集群。
-
它仅支持表级别的
SHRINK SPACE
操作。此级别包括完整的表、分区和子分区。 -
它不支持使用键压缩对索引组织的表进行更改。
-
它不支持在原始设备上实现在线重做日志。
-
Binary Reader 仅支持自管理 Oracle 数据库的 TDE,因为 RDS for Oracle 不支持为 TDE 加密密钥检索 Wallet 密码。
-
-
AWS DMS 不支持使用 Oracle 自动存储管理 (ASM) 代理连接到 Amazon RDS Oracle 来源。
-
AWS DMS 不支持虚拟列。
-
AWS DMS 不支持
ROWID
数据类型或基于 ROWID 列的实例化视图。AWS DMS 部分支持 Oracle 实体化视图。对于完全加载,DMS 可以执行 Oracle 实体化视图的完全加载副本。DMS 将实体化视图作为基表复制到目标系统,并忽略实体化视图中的所有 ROWID 列。对于持续复制(CDC),DMS 会尝试复制对实体化视图数据的更改,但结果可能并不理想。具体而言,如果实体化视图已完全刷新,DMS 会复制所有行的单个删除操作,然后复制所有行的单个插入操作。这是一种资源密集型操作,对于具有大量行的实体化视图,可能表现不佳。对于实例化视图快速刷新的持续复制,DMS 会尝试处理并复制快速刷新数据更改。无论哪种情况,DMS 都会跳过实体化视图中的所有 ROWID 列。
-
AWS DMS 不会加载或捕获全局临时表。
-
对于使用复制的 S3 目标,请在每列上启用补充日志记录,以便源行更新可以捕获每列的值。下面是示例:
alter table yourtablename add supplemental log data (all) columns;
。 -
无法在目标上复制使用包含
null
的复合唯一键的行的更新。 -
AWS DMS 不支持在同一个源端点上使用多个 Oracle TDE 加密密钥。每个端点只能有一个用于 TDE 加密密钥名称“
securityDbEncryptionName
”的属性,以及该密钥的一个 TDE 密码。 -
从 Amazon RDS for Oracle 进行复制时,只有加密的表空间和使用 Oracle 才支持 TDE。 LogMiner
-
AWS DMS 不支持快速连续执行多个表重命名操作。
-
使用 Oracle 19.0 作为源代码时, AWS DMS 不支持以下功能:
-
数据保护 DML 重定向
-
混合分区表
-
仅架构的 Oracle 账户
-
-
AWS DMS 不支持迁移类型为或的表
BIN$
或视图DR$
。 -
从 Oracle 18.x 开始, AWS DMS 不支持 Oracle Express 版(Oracle Database XE)中的变更数据捕获 (CDC)。
-
从 CHAR 列迁移数据时,DMS 会截断所有尾随空格。
-
AWS DMS 不支持从应用程序容器复制。
-
AWS DMS 不支持执行 Oracle 闪回数据库和还原点,因为这些操作会影响 Oracle 重做日志文件的一致性。
-
在以下情况下,不支持使用并行执行选项的直接加载
INSERT
过程:-
超过 255 列的未压缩表
-
行大小超过 8K
-
Exadata HCC 表
-
在 Big Endian 平台上运行的数据库
-
-
既没有主键也没有唯一键的源表需要启用 ALL COLUMN 补充日志记录。它会创建更多的重做日志活动,并可能增加 DMS CDC 延迟。
-
AWS DMS 不会迁移源数据库中不可见列的数据。要将这些列纳入迁移范围内,请使用
ALTER TABLE
语句使这些列可见。
Oracle 终端节点的 SSL 支持
AWS DMS Oracle 终端节点支持适用于none
和 SS verify-ca
L 模式的 SSL V3。要将 SSL 用于 Oracle 终端节点,请上传终端节点的 Oracle wallet 而不是 .pem 证书文件。
为 Oracle SSL 使用现有证书
要使用现有的 Oracle 客户端安装,从 CA 证书文件创建 Oracle wallet 文件,请执行以下步骤。
在 AWS DMS中为 Oracle SSL 使用现有 Oracle 客户端安装
-
通过运行以下命令将
ORACLE_HOME
系统变量设置为dbhome_1
目录的位置。prompt>export ORACLE_HOME=/home/user/app/user/product/12.1.0/dbhome_1
-
将
$ORACLE_HOME/lib
附加到LD_LIBRARY_PATH
系统变量。prompt>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
-
为
$ORACLE_HOME/ssl_wallet
处的 Oracle wallet 创建一个目录。prompt>mkdir $ORACLE_HOME/ssl_wallet
-
将 CA 证书
.pem
文件放入ssl_wallet
目录中。如果使用 Amazon RDS,则可下载由 Amazon RDS 托管的rds-ca-2015-root.pem
根 CA 证书文件。有关下载此文件的更多信息,请参阅《Amazon RDS 用户指南》中的使用 SSL/TLS 来加密与数据库实例的连接。 -
运行下列命令以创建 Oracle wallet。
prompt>orapki wallet create -wallet $ORACLE_HOME/ssl_wallet -auto_login_only prompt>orapki wallet add -wallet $ORACLE_HOME/ssl_wallet -trusted_cert -cert $ORACLE_HOME/ssl_wallet/ca-cert.pem -auto_login_only
完成前面的步骤之后,您可以通过指定 certificate-wallet 参数,使用 ImportCertificate
API 调用来导入 wallet 文件。然后,在创建或修改 Oracle 终端节点时,如果选择 verify-ca
作为 SSL 模式,您可以使用导入的 wallet 证书。
注意
甲骨文钱包是二进制文件。 AWS DMS 按原样接受这些文件。
使用适用于 Oracle SSL 的自签名证书
要将自签名证书用于 Oracle SSL,请假设 Oracle 钱包密码为 oracle123
,执行以下步骤。
要使用适用于 Oracle SSL 的自签名证书 AWS DMS
-
创建一个您将用于处理自签名证书的目录。
mkdir -p /u01/app/oracle/self_signed_cert
-
转到您在上一步创建的目录中。
cd /u01/app/oracle/self_signed_cert
-
创建根密钥。
openssl genrsa -out self-rootCA.key 2048
-
使用在上一步中创建的根密钥对根证书进行自签名。
openssl req -x509 -new -nodes -key self-rootCA.key -sha256 -days 3650 -out self-rootCA.pem
使用以下输入参数:
-
Country Name (2 letter code) [XX]
,例如:AU
-
State or Province Name (full name) []
,例如:NSW
-
Locality Name (e.g., city) [Default City]
,例如:Sydney
-
Organization Name (e.g., company) [Default Company Ltd]
,例如:AmazonWebService
-
Organizational Unit Name (e.g., section) []
,例如:DBeng
-
Common Name (e.g., your name or your server's hostname) []
,例如:aws
-
Email Address []
,例如:abcd.efgh@amazonwebservice.com
-
-
为 Oracle 数据库创建 Oracle wallet 目录。
mkdir -p /u01/app/oracle/wallet
-
创建新的 Oracle wallet。
orapki wallet create -wallet "/u01/app/oracle/wallet" -pwd oracle123 -auto_login_local
-
将根证书添加到 Oracle wallet。
orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd oracle123 -trusted_cert -cert /u01/app/oracle/self_signed_cert/self-rootCA.pem
-
列出 Oracle wallet 的内容。该列表应包含根证书。
orapki wallet display -wallet /u01/app/oracle/wallet -pwd oracle123
例如,这可能显示以下类似内容。
Requested Certificates: User Certificates: Trusted Certificates: Subject: CN=aws,OU=DBeng,O= AmazonWebService,L=Sydney,ST=NSW,C=AU
-
使用 ORAPKI 实用程序生成证书签名请求 (CSR)。
orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd oracle123 -dn "CN=aws" -keysize 2048 -sign_alg sha256
-
运行以下命令。
openssl pkcs12 -in /u01/app/oracle/wallet/ewallet.p12 -nodes -out /u01/app/oracle/wallet/nonoracle_wallet.pem
这会产生类似下面的输出。
Enter Import Password: MAC verified OK Warning unsupported bag type: secretBag
-
将“dms”用作公用名。
openssl req -new -key /u01/app/oracle/wallet/nonoracle_wallet.pem -out certdms.csr
使用以下输入参数:
-
Country Name (2 letter code) [XX]
,例如:AU
-
State or Province Name (full name) []
,例如:NSW
-
Locality Name (e.g., city) [Default City]
,例如:Sydney
-
Organization Name (e.g., company) [Default Company Ltd]
,例如:AmazonWebService
-
Organizational Unit Name (e.g., section) []
,例如:aws
-
Common Name (e.g., your name or your server's hostname) []
,例如:aws
-
Email Address []
,例如:abcd.efgh@amazonwebservice.com
请确保这与步骤 4 不同。例如,您可以通过将组织单位名称更改为其他名称来实现此目的,如下所示。
输入要随证书申请一起发送的以下其他属性。
-
A challenge password []
,例如:oracle123
-
An optional company name []
,例如:aws
-
-
获取证书签名。
openssl req -noout -text -in certdms.csr | grep -i signature
这篇文章的签名密钥是
sha256WithRSAEncryption
。 -
运行以下命令以生成证书(
.crt
)文件。openssl x509 -req -in certdms.csr -CA self-rootCA.pem -CAkey self-rootCA.key -CAcreateserial -out certdms.crt -days 365 -sha256
这会产生类似下面的输出。
Signature ok subject=/C=AU/ST=NSW/L=Sydney/O=awsweb/OU=DBeng/CN=aws Getting CA Private Key
-
将证书添加到 wallet。
orapki wallet add -wallet /u01/app/oracle/wallet -pwd oracle123 -user_cert -cert certdms.crt
-
查看 Wallet。它应该包含两个条目。请参阅以下代码。
orapki wallet display -wallet /u01/app/oracle/wallet -pwd oracle123
-
配置
sqlnet.ora
文件($ORACLE_HOME/network/admin/sqlnet.ora
)。WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /u01/app/oracle/wallet/) ) ) SQLNET.AUTHENTICATION_SERVICES = (NONE) SSL_VERSION = 1.0 SSL_CLIENT_AUTHENTICATION = FALSE SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA)
-
停止 Oracle 侦听器。
lsnrctl stop
-
在
listener.ora
文件 ($ORACLE_HOME/network/admin/listener.ora
) 中添加 SSL 条目。SSL_CLIENT_AUTHENTICATION = FALSE WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /u01/app/oracle/wallet/) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME =
SID
) (ORACLE_HOME =ORACLE_HOME
) (SID_NAME =SID
) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) -
配置
tnsnames.ora
文件($ORACLE_HOME/network/admin/tnsnames.ora
)。<SID>= (DESCRIPTION= (ADDRESS_LIST = (ADDRESS=(PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = <SID>) ) ) <SID>_ssl= (DESCRIPTION= (ADDRESS_LIST = (ADDRESS=(PROTOCOL = TCPS)(HOST = localhost.localdomain)(PORT = 1522)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = <SID>) ) )
-
重新启动 Oracle 侦听器。
lsnrctl start
-
显示 Oracle 侦听器状态。
lsnrctl status
-
使用 sqlplus 和 SSL tnsnames 条目测试从本地主机到数据库的 SSL 连接。
sqlplus -L
ORACLE_USER
@SID
_ssl -
验证您已使用 SSL 成功连接。
SELECT SYS_CONTEXT('USERENV', 'network_protocol') FROM DUAL; SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') -------------------------------------------------------------------------------- tcps
-
将目录更改为具有自签名证书的目录。
cd /u01/app/oracle/self_signed_cert
-
创建一个新的客户端 Oracle 钱包 AWS DMS 以供使用。
orapki wallet create -wallet ./ -auto_login_only
-
将自签名根证书添加到 Oracle wallet。
orapki wallet add -wallet ./ -trusted_cert -cert self-rootCA.pem -auto_login_only
-
列出 AWS DMS 要使用的 Oracle 钱包中的内容。该列表应包含自签名根证书。
orapki wallet display -wallet ./
这会产生类似下面的输出。
Trusted Certificates: Subject: CN=aws,OU=DBeng,O=AmazonWebService,L=Sydney,ST=NSW,C=AU
-
将您刚刚创建的 Oracle 钱包上传到 AWS DMS。
使用 Oracle 作为数据源的支持的加密方法 AWS DMS
在下表中,您可以找到使用 Oracle 源数据库时 AWS DMS 支持的透明数据加密 (TDE) 方法。
重做日志访问方法 | TDE 表空间 | TDE 列 |
---|---|---|
甲骨文 LogMiner | 是 | 是 |
Binary Reader | 是 | 是 |
AWS DMS 在列级别和表空间级别使用二进制读取器时都支持 Oracle TDE。要将 TDE 加密与一起使用 AWS DMS,请先确定存储 TDE 加密密钥和 TDE 密码的 Oracle 钱包位置。然后为您的 Oracle 源端点确定正确的 TDE 加密密钥和密码。
要识别并指定用于 TDE 加密的加密密钥和密码
-
运行以下查询,在 Oracle 数据库主机上查找 Oracle 加密 Wallet。
SQL> SELECT WRL_PARAMETER FROM V$ENCRYPTION_WALLET; WRL_PARAMETER -------------------------------------------------------------------------------- /u01/oracle/product/12.2.0/dbhome_1/data/wallet/
在这里,
/u01/oracle/product/12.2.0/dbhome_1/data/wallet/
是 Wallet 所在的位置。 -
使用以下加密选项之一(具体取决于哪个加密选项返回此值)获取主密钥 ID。
-
对于表级别或列级别加密,请运行以下查询。
SQL> SELECT OBJECT_ID FROM ALL_OBJECTS WHERE OWNER='DMS_USER' AND OBJECT_NAME='TEST_TDE_COLUMN' AND OBJECT_TYPE='TABLE'; OBJECT_ID --------------- 81046 SQL> SELECT MKEYID FROM SYS.ENC$ WHERE OBJ#=81046; MKEYID ------------ AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
在这里,
AWGDC9glSk8Xv+3bVveiVSg
是主密钥 ID(MKEYID
)。如果获取了MKEYID
的值,则可继续执行步骤 3。否则,请继续执行步骤 2.2。注意
尾随字符串的
'A'
字符(AAA...
)不是值的一部分。 -
对于表空间级别加密,请运行以下查询。
SQL> SELECT TABLESPACE_NAME, ENCRYPTED FROM dba_tablespaces; TABLESPACE_NAME ENC ------------------------------ --- SYSTEM NO SYSAUX NO UNDOTBS1 NO TEMP NO USERS NO TEST_ENCRYT YES SQL> SELECT name,utl_raw.cast_to_varchar2( utl_encode.base64_encode('01'||substr(mkeyid,1,4))) || utl_raw.cast_to_varchar2( utl_encode.base64_encode(substr(mkeyid,5,length(mkeyid)))) masterkeyid_base64 FROM (SELECT t.name, RAWTOHEX(x.mkid) mkeyid FROM v$tablespace t, x$kcbtek x WHERE t.ts#=x.ts#) WHERE name = 'TEST_ENCRYT'; NAME MASTERKEYID_BASE64 ------------------------------ ---------------------------------- TEST_ENCRYT AWGDC9glSk8Xv+3bVveiVSg=
在这里,
AWGDC9glSk8Xv+3bVveiVSg
是主密钥 ID(TEST_ENCRYT
)。如果步骤 2.1 和 2.2 都返回一个值,则它们始终相同。尾随的
'='
字符不是值的一部分。
-
-
在命令行中,列出源 Oracle 数据库主机上的加密 Wallet 条目。
$ mkstore -wrl /u01/oracle/product/12.2.0/dbhome_1/data/wallet/ -list Oracle Secret Store entries: ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ORACLE.SECURITY.DB.ENCRYPTION.AY1mRA8OXU9Qvzo3idU4OH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA ORACLE.SECURITY.DB.ENCRYPTION.MASTERKEY ORACLE.SECURITY.ID.ENCRYPTION. ORACLE.SECURITY.KB.ENCRYPTION. ORACLE.SECURITY.KM.ENCRYPTION.AY1mRA8OXU9Qvzo3idU4OH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
找到包含您在步骤 2(
AWGDC9glSk8Xv+3bVveiVSg
)中找到的包含主密钥 ID 的条目。此条目是 TDE 加密密钥名称。 -
查看您在上一步中找到的条目的详细信息。
$ mkstore -wrl /u01/oracle/product/12.2.0/dbhome_1/data/wallet/ -viewEntry ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Oracle Secret Store Tool : Version 12.2.0.1.0 Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved. Enter wallet password: ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA = AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==
输入 Wallet 密码以查看结果。
在这里,
'='
右边的值是 TDE 密码。 -
通过设置额外连接属性
securityDbEncryptionName
为 Oracle 源端点指定 TDE 加密密钥名称。securityDbEncryptionName=ORACLE.SECURITY.DB.ENCRYPTION.AWGDC9glSk8Xv+3bVveiVSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-
在控制台上提供此密钥的关联 TDE 密码,将其作为 Oracle 源的密码值的一部分。按以下顺序设置以逗号分隔的密码值的格式,以 TDE 密码值结尾。
Oracle_db_password
,ASM_Password
,AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==无论 Oracle 数据库配置如何,都按此顺序指定密码值。例如,如果您使用的是 TDE,但 Oracle 数据库未使用 ASM,请按照以下逗号分隔顺序指定密码值。
Oracle_db_password
,,AEMAASAASGYs0phWHfNt9J5mEMkkegGFiD4LLfQszDojgDzbfoYDEACv0x3pJC+UGD/PdtE2jLIcBQcAeHgJChQGLA==
如果您指定的 TDE 凭证不正确,则 AWS DMS 迁移任务不会失败。但是,该任务也不会读取持续复制更改或将其应用到目标数据库。启动任务后,在控制台迁移任务页面上监控表统计数据,确保已复制更改。
如果数据库管理员在运行任务时更改 Oracle 数据库的 TDE 凭证值,任务会失败。错误消息中包含新的 TDE 加密密钥名称。要指定新值并重新启动任务,请使用前面的步骤。
重要
您无法操作在 Oracle Automatic Storage Management(ASM)所在位置创建的 TDE Wallet,因为操作系统级别的命令(例如 cp
、mv
、orapki
和 mkstore
)会损坏存储在 ASM 所在位置的 Wallet 文件。此限制仅适用于只存储在 ASM 所在位置的 TDE Wallet 文件,但不适用于存储在本地操作系统目录中的 TDE Wallet 文件。
要使用操作系统级别的命令操作存储在 ASM 中的 TDE Wallet,请创建本地密钥库,并按如下方式将 ASM 密钥库合并到本地密钥库中:
-
创建本地密钥库。
ADMINISTER KEY MANAGEMENT create keystore
file system wallet location
identified bywallet password
; -
将 ASM 密钥库合并到本地密钥库中。
ADMINISTER KEY MANAGEMENT merge keystore
ASM wallet location
identified bywallet password
into existing keystorefile system wallet location
identified bywallet password
with backup;
然后,要列出加密 Wallet 条目和 TDE 密码,请对本地密钥库运行步骤 3 和 4。
使用 Oracle 作为源时支持的压缩方法 AWS DMS
在下表中,您可以找到使用 Oracle 源数据库时 AWS DMS 支持的压缩方法。如表所示,压缩支持取决于您的 Oracle 数据库版本以及 DMS 是否配置为使用 Oracle LogMiner 访问重做日志。
版本 | 基本 | OLTP |
HCC(来自 Oracle 11g R2 或更高版本) |
其他 |
---|---|---|---|---|
Oracle 10 | 否 | 不适用 | 不适用 | 否 |
甲骨文 11 或更新版本 — 甲骨文 LogMiner | 是 | 是 | 是 | 是 — Oracle 支持的任何压缩方法 LogMiner。 |
Oracle 11 或更高版本 – Binary Reader | 是 | 是 | 是 – 有关更多信息,请参阅以下注释。 | 是 |
注意
当 Oracle 源终端节点配置为使用 Binary Reader 时,只有满载任务才支持 HCC 压缩方法的查询低级别。
使用 Oracle 作为源复制嵌套表 AWS DMS
AWS DMS 支持复制包含嵌套表或定义类型的列的 Oracle 表。要启用此功能,请将以下额外连接属性设置添加到 Oracle 源端点。
allowSelectNestedTables=true;
AWS DMS 从 Oracle 嵌套表中创建目标表,作为目标上的常规父表和子表,没有唯一约束。要访问目标上的正确数据,请联接父表和子表。为此,首先在目标子表中的 NESTED_TABLE_ID
列上手动创建非唯一索引。然后,您可以将 ON
联接子句中的 NESTED_TABLE_ID
列与子表名称对应的父列一起使用。此外,通过更新或删除目标子表数据时,创建这样的索引可以提高性能 AWS DMS。有关示例,请参阅目标上的父表和子表联接示例。
我们建议您将任务配置为在满载完成后停止。然后,为目标上的所有复制子表创建这些非唯一索引,然后恢复任务。
如果将捕获的嵌套表添加到现有的父表中(捕获或未捕获),请正确 AWS DMS 处理该表。但是,不会创建相应目标表的非唯一索引。在此情况下,如果目标子表变得非常大,性能可能会受到影响。在这种情况下,我们建议您停止任务,创建索引,然后再恢复任务。
在嵌套表复制到目标后,让 DBA 运行父表和相应子表上的联接以平展数据。
将 Oracle 嵌套表复制为源的先决条件
确保复制所有复制的嵌套表的父表。在表映射中同时包括父表(包含嵌套表列的表)和子表(即嵌套)。 AWS DMS
支持的 Oracle 嵌套表类型作为源
AWS DMS 支持以下 Oracle 嵌套表类型作为源:
-
数据类型
-
用户定义的对象
对 Oracle 嵌套表作为源的 AWS DMS 支持的限制
AWS DMS 在支持 Oracle 嵌套表作为源方面存在以下限制:
-
AWS DMS 仅支持一层表嵌套。
-
AWS DMS 表映射不检查是否同时选择父表和子表或表进行复制。也就是说,可以选择没有子表的父表或没有父表的子表。
AWS DMS 如何将 Oracle 嵌套表复制为源
AWS DMS 将父表和嵌套表复制到目标表,如下所示:
-
AWS DMS 创建与源表相同的父表。然后,它将父表中的嵌套列定义为
RAW(16)
,并在其NESTED_TABLE_ID
列中包含对父表的嵌套表的引用。 -
AWS DMS 创建与嵌套源相同的子表,但还有一个名为的附加列
NESTED_TABLE_ID
。此列的类型和值与相应的父嵌套列相同,含义也相同。
目标上的父表和子表联接示例
要平展父表,请运行父表和子表之间的联接,如以下示例所示:
-
创建
Type
表。CREATE OR REPLACE TYPE NESTED_TEST_T AS TABLE OF VARCHAR(50);
-
使用前面定义的列(类型为
NESTED_TEST_T
)列创建父表。CREATE TABLE NESTED_PARENT_TEST (ID NUMBER(10,0) PRIMARY KEY, NAME NESTED_TEST_T) NESTED TABLE NAME STORE AS NAME_KEY;
-
通过对其
CHILD.NESTED_TABLE_ID
与PARENT.NAME
匹配的NAME_KEY
子表使用联接来平展表NESTED_PARENT_TEST
。SELECT … FROM NESTED_PARENT_TEST PARENT, NAME_KEY CHILD WHERE CHILD.NESTED_ TABLE_ID = PARENT.NAME;
使用 Oracle 作为源时在 Oracle ASM 上存储 REDO AWS DMS
对于 REDO 生成量较高的 Oracle 源,在 Oracle ASM 上存储 REDO 可以提高性能,尤其是在 RAC 配置中,因为您可以将 DMS 配置为跨所有 ASM 节点分配 ASM REDO 读取。
要使用此配置,请使用 asmServer
连接属性。例如,以下连接字符串将跨 3 个 ASM 节点分配 DMS REDO 读取:
asmServer=(DESCRIPTION=(CONNECT_TIMEOUT=8)(ENABLE=BROKEN)(LOAD_BALANCE=ON)(FAILOVER=ON) (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=asm_node1_ip_address)(PORT=asm_node1_port_number)) (ADDRESS=(PROTOCOL=tcp)(HOST=asm_node2_ip_address)(PORT=asm_node2_port_number)) (ADDRESS=(PROTOCOL=tcp)(HOST=asm_node3_ip_address)(PORT=asm_node3_port_number))) (CONNECT_DATA=(SERVICE_NAME=+ASM)))
使用 NFS 存储 Oracle REDO 时,请务必确保应用了适用的 DNFS(Direct NFS)客户端补丁,特别是解决 Oracle 错误 25224242 的任何补丁。有关更多信息,请查阅以下有关 Direct NFS Client 相关补丁的 Oracle 出版物 Direct NFS Client 的推荐补丁
此外,为了提高 NFS 读取性能,我们建议您增加 NFS 卷的 fstab
中的 rsize
和 wsize
的值,如以下示例所示。
NAS_name_here
:/ora_DATA1_archive /u09/oradata/DATA1 nfs rw,bg,hard,nointr,tcp,nfsvers=3,_netdev, timeo=600,rsize=262144,wsize=262144
另外,按如下方式调整 tcp-max-xfer-size
值:
vserver nfs modify -vserver
vserver
-tcp-max-xfer-size 262144
使用 Oracle 作为来源时的终端节点设置 AWS DMS
您可以使用端点设置来配置 Oracle 源数据库,这与使用额外连接属性类似。您可以在使用 AWS DMS 控制台创建源端点时指定设置,或者使用中带有 --oracle-settings '{"
JSON 语法的EndpointSetting"
:
"value"
, ...
}'create-endpoint
AWS CLI命令来指定设置。
下表显示了将 Oracle 用作源时可以使用的端点设置。
名称 | 描述 |
---|---|
AccessAlternateDirectly |
将此属性设置为 false,以便使用 Binary Reader 捕获作为源的 Amazon RDS for Oracle 的更改数据。这将指示 DMS 实例不要使用直接文件访问通过任何指定的路径前缀替换来访问重做日志。有关更多信息,请参阅 将 CDC 任务配置为将二进制读取器与 RDS for Oracle 源一起使用 AWS DMS。 默认值:true 有效值:true/false 例如: |
|
在主/备用设置中将此属性与 尽管 AWS DMS 支持使用 Oracle 有效值:存档目标 ID 例如: |
|
设置此属性可设置 Oracle 数据库的表级别补充日志记录。根据表元数据的不同,此属性可在为迁移任务选择的所有表上启用以下操作之一:
默认值:false 有效值:true/false 例如: 注意如果您使用此选项,则仍需启用前面讨论过的数据库级别补充日志记录。 |
|
将此属性设置为 true 可复制包含作为嵌套表或已定义类型的列的 Oracle 表。有关更多信息,请参阅 使用 Oracle 作为源复制嵌套表 AWS DMS。 默认值:false 有效值:true/false 例如: |
|
指定已存档重做日志的目标的 ID。该值应与 v$archived_log 视图的 dest_id 列中的数相同。如果您使用其他重做日志目标,建议您使用 默认值:1 有效值:数字 例如: |
|
当此字段设置为 Y 时, AWS DMS 仅访问已存档的重做日志。如果存档的重做日志仅存储在 Oracle ASM 上,则需要向 AWS DMS 用户帐户授予 ASM 权限。 默认值:N 有效值:Y/N 例如: |
|
使用捕获源更改时,请使用此额外连接属性 (ECA) BinaryReader。此设置允许 DMS 在 ASM 级别为每个读取线程缓冲 50 次读取,同时使用 默认值:false 有效值:true/false ECA 示例: |
|
将此属性设置为 默认值:false 有效值:true/false 例如: |
|
将此属性设置为 请注意,此功能和增强功能已在 3.4.7 AWS DMS 版本中引入。 默认值:false 有效值:true/false 例如: |
|
将此属性设置为启用同类表空间复制,并在目标上的相同表空间下创建现有的表或索引。 默认值:false 有效值:true/false 例如: |
|
将此属性设置为转义字符。此转义字符允许您在表映射表达式中将单个通配符用作一个普通字符。有关更多信息,请参阅 表映射中的通配符。 默认值:Null 有效值:除通配符之外的任何字符 例如: 注意您只能将 |
|
使用此属性可从视图中提取一次数据;您无法将其用于持续复制。从视图中提取数据时,此视图将显示为目标架构上的表。 默认值:false 有效值:true/false 例如: |
|
指定一个或多个已存档重做日志的多个目标的 ID。这些 ID 是 v$archived_log 视图中 dest_id 列的值。在设置或设置中将此 primary-to-single 设置与 ArchivedLogDestId 额外的连接属性一起 primary-to-multiple-standby 使用。 当您使用 Oracle Data Guard 数据库作为源时,此设置在切换中非常有用。在这种情况下, AWS DMS 需要有关从哪个目的地获取存档重做日志以读取更改的信息。 AWS DMS 需要这个,因为在切换之后,之前的主实例是备用实例。 有效值:存档目标 ID 例如: |
|
当设置为 如果任务设置为受限 LOB 模式并且此选项设置为 默认值:false 有效值:布尔值 例如: |
|
使用此额外连接属性 (ECA) 允许 DMS 在使用时从 Oracle 复制数据时忽略来自指定用户的事务。 LogMiner您可以传递以逗号分隔的用户名值,但这些值必须全部使用大写字母。 ECA 示例: |
|
指定数字的小数位数。可以选择最大为 38 的小数位数,也可以选择 -1(对于 FLOAT)或 -2(VARCHAR)。默认情况下,NUMBER 数据类型将转换为精度 38,小数位数 10。 默认值:10 有效值:-2 到 38(对于 VARCHAR 为 -2,对于 FLOAT 为 -1) 例如: 注意选择精度小数位数组合,即 -1(FLOAT)或 -2(VARCHAR)。DMS 支持 Oracle 支持的任何精度小数位数组合。如果精度大于等于 39,请选择 -2(VARCHAR)。Oracle 数据库的 NumberDataTypeScale 设置仅用于 NUMBER 数据类型(没有明确的精度和小数位数定义)。 |
|
提供为仅 CDC 的任务检查任何未结事务的时间范围(以分钟为单位)。 注意当您设置 默认值:0 有效值:从 0 到 240 的整数 例如: |
OraclePathPrefix |
将此字符串属性设置为必需值,以便使用 Binary Reader 捕获作为源的 Amazon RDS for Oracle 的更改数据。此值指定用于访问重做日志的默认 Oracle root。有关更多信息,请参阅 将 CDC 任务配置为将二进制读取器与 RDS for Oracle 源一起使用 AWS DMS。 默认值:none 有效值:/rdsdbdata/db/ORCL_A/ 例如: |
ParallelASMReadThreads |
设置此属性可更改 DMS 配置通过 Oracle Automatic Storage Management(ASM)执行更改数据捕获(CDC)所用的线程数。您可以指定一个介于 2(默认值)和 8(最大值)之间的整数值。将此属性与 默认值:2 有效值:从 2 到 8 的整数 例如: |
ReadAheadBlocks |
设置此属性可更改 DMS 配置通过 Oracle Automatic Storage Management(ASM)和非 ASM NAS 存储执行更改数据捕获(CDC)所用的预读数据块数。您可以指定一个介于 1000(默认值)和 200000(最大值)之间的整数值。将此属性与 默认值:1000 有效值:从 1000 到 200000 的整数 例如: |
|
当设置为 默认值:false 有效值:布尔值 例如: |
ReplacePathPrefix |
将此属性设置为 true,以便使用 Binary Reader 捕获作为源的 Amazon RDS for Oracle 的更改数据。此设置指示 DMS 实例使用指定的 UsePathPrefix 设置替换默认的 Oracle root,以访问重做日志。有关更多信息,请参阅 将 CDC 任务配置为将二进制读取器与 RDS for Oracle 源一起使用 AWS DMS。默认值:false 有效值:true/false 例如: |
|
指定系统在重新发送查询之前等待的秒数。 默认值:5 有效值:从 1 开始的数字 例如: |
|
指定一个密钥的名称,该密钥用于对 Oracle 源数据库中的列和表空间进行透明数据加密 (TDE)。有关在 Oracle 源终端节点上设置此属性及其关联密码的更多信息,请参阅使用 Oracle 作为数据源的支持的加密方法 AWS DMS。 默认值:"" 有效值:字符串 例如: |
|
对于迁移到 PostgreSQL 目标的 Oracle 12.1 版或更早版本的源,请使用此属性将 SDO_GEOMETRY 格式转换为 GEOJSON 格式。 默认情况下, AWS DMS 调用 默认值:SDO2GEOJSON 有效值:字符串 例如: |
|
使用此属性指定备用同步延迟时间 (以分钟为单位)。如果源是 Active Data Guard 备用数据库,请使用此属性指定主数据库和备用数据库之间的时间滞后。 在中 AWS DMS,您可以创建一个 Oracle CDC 任务,该任务使用 Active Data Guard 备用实例作为复制正在进行的更改的来源。这样一来,便无需连接到可能处于生产状态的活动数据库。 默认值:0 有效值:数字 例如: 注意:使用 DMS 3.4.6、3.4.7 及更高版本时,可以选用此连接设置。在最新版本的 DMS 3.4.6 和 3.4.7 中, |
UseAlternateFolderForOnline |
将此属性设置为 true,以便使用 Binary Reader 捕获作为源的 Amazon RDS for Oracle 的更改数据。这将指示 DMS 实例使用任何指定的前缀替换来访问所有在线重做日志。有关更多信息,请参阅 将 CDC 任务配置为将二进制读取器与 RDS for Oracle 源一起使用 AWS DMS。 默认值:false 有效值:true/false 例如: |
UseBfile |
将此属性设置为 Y,以便使用 Binary Reader 实用程序捕获更改数据。将 注意:将此值设置为额外连接属性(ECA)时,有效值为“Y”和“N”。将此值设置为端点设置时,有效值为 默认值:N 有效值:Y/N(将此值设置为 ECA 时);true/false(将此值设置为端点设置时)。 例如: |
|
将此属性设置为 Y 以使用 LogMiner 实用程序(默认)捕获变更数据。如果希望 AWS DMS 将重做日志作为二进制文件进行访问,请将此选项设置为 N。将此选项设置为 N 时,还要添加设置 useBfile=Y。有关此设置和使用 Oracle Automatic Storage Management(ASM)的更多信息,请参阅在 CDC 中使用 Oracle LogMiner 或 AWS DMS 二进制阅读器。 注意:将此值设置为额外连接属性(ECA)时,有效值为“Y”和“N”。将此值设置为端点设置时,有效值为 默认值:Y 有效值:Y/N(将此值设置为 ECA 时);true/false(将此值设置为端点设置时)。 例如: |
UsePathPrefix |
将此字符串属性设置为必需值,以便使用 Binary Reader 捕获作为源的 Amazon RDS for Oracle 的更改数据。此值指定用于替换访问重做日志的默认 Oracle root 的路径前缀。有关更多信息,请参阅 将 CDC 任务配置为将二进制读取器与 RDS for Oracle 源一起使用 AWS DMS。 默认值:none 有效值:/rdsdbdata/log/ 例如: |
Oracle 的源数据类型
的 Oracle 终端节点 AWS DMS 支持大多数 Oracle 数据类型。下表显示了使用时支持的 Oracle 源数据类型 AWS DMS 以及与 AWS DMS 数据类型的默认映射。
注意
除了 LONG 和 LONG RAW 数据类型之外,从 Oracle 源复制到 Oracle 目标(同构复制)时,所有源数据类型和目标数据类型都相同。但是 LONG 数据类型将映射到 CLOB,LONG RAW 数据类型将映射到 BLOB。
有关如何查看目标中映射的数据类型的信息,请参阅有关所使用的目标终端节点的部分。
有关 AWS DMS 数据类型的更多信息,请参见AWS Database Migration Service 的数据类型。
Oracle 数据类型 |
AWS DMS 数据类型 |
---|---|
BINARY_FLOAT |
REAL4 |
BINARY_DOUBLE |
REAL8 |
BINARY |
BYTES |
FLOAT (P) |
如果精度小于或等于 24,请使用 REAL4。 如果精度大于 24,请使用 REAL8。 |
NUMBER (P,S) |
当小数位数大于 0 时,请使用 NUMERIC。 当小数位数为 0 时:
当小数位数小于 0 时,请使用 REAL8。 |
DATE |
DATETIME |
INTERVAL_YEAR TO MONTH |
STRING (带 interval year_to_month 指示) |
INTERVAL_DAY TO SECOND |
STRING (带 interval day_to_second 指示) |
TIMESTAMP |
DATETIME |
TIMESTAMP(有时区) |
STRING (带 timestamp_with_timezone 指示) |
带本地时区的 TIMESTAMP |
STRING (带 timestamp_with_local_ timezone 指示) |
CHAR |
string |
VARCHAR2 |
|
NCHAR |
WSTRING |
NVARCHAR2 |
|
RAW |
BYTES |
REAL |
REAL8 |
BLOB |
BLOB 要将此数据类型与一起使用 AWS DMS,必须允许将 BLOB 数据类型用于特定任务。 AWS DMS 仅在包含主键的表中支持 BLOB 数据类型。 |
CLOB |
CLOB 要将此数据类型与一起使用 AWS DMS,必须为特定任务启用 CLOB 数据类型。在 CDC 期间,仅在包含主键的表中 AWS DMS 支持 CLOB 数据类型。 |
NCLOB |
NCLOB 要将此数据类型与一起使用 AWS DMS,必须允许将 NCLOB 数据类型用于特定任务。在 CDC 期间,仅在包含主键的表中 AWS DMS 支持 NCLOB 数据类型。 |
LONG |
CLOB 批量优化应用模式(TurboStream CDC 模式)不支持 LONG 数据类型。 要将此数据类型与一起使用 AWS DMS,请启用 LOB 来执行特定任务。 在 CDC 或满载期间,仅在具有主键的表中 AWS DMS 支持 LOB 数据类型。 此外, AWS DMS 不支持用于加载长列的完整 LOB 模式。但您可以使用受限的 LOB 模式将 LONG 列迁移到 Oracle 目标。在受限 LOB 模式下,将您设置为长度超过 64 KB 的长列的所有数据 AWS DMS 截断为 64 KB。有关中 LOB 支持的更多信息 AWS DMS,请参阅 在 AWS DMS 任务中设置对源数据库的LOB支持 |
LONG RAW |
BLOB 批量优化应用模式(TurboStream CDC 模式)不支持 LONG RAW 数据类型。 要将此数据类型与一起使用 AWS DMS,请启用 LOB 来执行特定任务。 在 CDC 或满载期间,仅在具有主键的表中 AWS DMS 支持 LOB 数据类型。 此外, AWS DMS 不支持用于加载 LONG RAW 列的完整 LOB 模式。但您可以使用受限 LOB 模式将 LONG RAW 列迁移到 Oracle 目标。在受限 LOB 模式下,如果您设置为长度超过 64 KB 的 LONG RAW 列,则会将所有数据 AWS DMS 截断为 64 KB。有关中 LOB 支持的更多信息 AWS DMS,请参阅 在 AWS DMS 任务中设置对源数据库的LOB支持 |
XMLTYPE |
CLOB |
SDO_GEOMETRY |
BLOB(当 Oracle 迁移到 Oracle 时) CLOB(当 Oracle 迁移到 PostgreSQL 时) |
不支持且无法复制作为源的包含以下数据类型的列的 Oracle 表。复制带这些数据类型的列会生成 null 列。
-
BFILE
-
ROWID
-
REF
-
UROWID
-
用户定义的数据类型
-
ANYDATA
-
VARRAY
注意
不支持虚拟列。
迁移 Oracle 空间数据类型
空间数据 可识别空间中对象或位置的几何信息。在 Oracle 数据库中,空间对象的几何描述存储在 SDO_GEOMETRY 类型的对象中。在此对象中,几何描述存储在用户定义表的单列中的单行中。
AWS DMS 支持将 Oracle 类型 SDO_GEOMETRY 从 Oracle 源迁移到 Oracle 或 PostgreSQL 目标。
使用迁移 Oracle 空间数据类型时 AWS DMS,请注意以下注意事项:
-
迁移到 Oracle 目标时,请确保手动传输包含类型信息的 USER_SDO_GEOM_METADATA 条目。
-
从 Oracle 源端点迁移到 PostgreSQL 目标端点时 AWS DMS ,会创建目标列。这些列具有默认的几何和地理类型信息,其 2D 维度和空间参考标识符 (SRID) 等于零 (0)。例如,
GEOMETRY, 2, 0
。 -
对于迁移到 PostgreSQL 目标的 Oracle 12.1 版或更早版本的源,请使用
SDO2GEOJSON
函数或spatialSdo2GeoJsonFunctionName
额外的连接属性,将SDO_GEOMETRY
对象转换为GEOJSON
格式。有关更多信息,请参阅 使用 Oracle 作为来源时的终端节点设置 AWS DMS。 -
AWS DMS 仅在完整 LOB 模式下支持 Oracle 空间列迁移。 AWS DMS 不支持受限 LOB 或内联 LOB 模式。有关 LOB 模式的更多信息,请参阅在 AWS DMS 任务中设置对源数据库的LOB支持。
由于 AWS DMS 仅支持用于迁移 Oracle Spatial 列的完整 LOB 模式,因此列的表需要主键和唯一键。如果表没有主键和唯一键,在迁移时会跳过此表。