您的组织中是否有无法承受停机的关键 Oracle OLTP 数据库? 您是否希望在尽量缩短停机时间或不停机的情况下将 Oracle 数据库迁移到 AWS? 在当今应用程序和数据库 24/7 全天候可用的快节奏世界中,将本地数据库迁移到云时,某些应用程序可能无法承受大量停机时间。
本博文讨论了使用 AWS Database Migration Service (AWS DMS) 及其更改数据捕获 (CDC) 功能将本地 Oracle 数据库迁移到 Oracle的 Amazon Relational Database Service (RDS) 的解决方案,以最大程度地缩短停机时间。
AWS DMS 概述
AWS DMS 是一项云服务,可帮助您将数据库迁移到 AWS。AWS DMS 可以将关系数据库、数据仓库、NoSQL 数据库和其他类型的数据存储迁移到 AWS 云中。AWS DMS 支持不同数据库平台之间的同质和异类迁移。您可以执行一次迁移,也可以复制正在进行的更改,以使源数据库和目标数据库保持同步。要使用 AWS DMS,至少一个数据库端应位于 AWS 中,即源数据库或目标数据库。
当仅使用 AWS DMS 复制数据更改时,必须指定一个时间或系统更改号 (SCN),AWS DMS 将从该时间或系统更改号开始读取数据库日志更改。请务必在服务器上保留这些日志一段时间,以确保 AWS DMS 可以访问这些更改。
迁移 LOB
如果您的源数据库具有大型二进制对象 (LOB),并且您必须将其迁移到目标数据库,则 AWS DMS 提供以下选项:
- 完全 LOB 模式 – AWS DMS 将所有 LOB 从源数据库迁移到目标数据库,无论其大小如何。尽管迁移速度较慢,但优势是数据不会被截断。为了获得更好的性能,您应该在新的复制实例上创建一个单独的任务,以迁移 LOB 大于数兆字节的表格。
- 受限 LOB 模式 – 您指定 LOB 列数据的最大大小,使 AWS DMS 可以预分配资源并批量应用 LOB。如果 LOB 列的大小超过任务中指定的大小,则 AWS DMS 会截断数据,并将警告发送到 AWS DMS 日志文件。如果您的 LOB 数据大小在受限 LOB 大小以内,则可以通过使用受限 LOB 模式来提高性能。
- 内联 LOB 模式 – 通过复制小型和大型 LOB,您可以迁移 LOB,而不用截断数据或降低任务性能。首先,为 InlineLobMaxSize 参数指定一个值,该值仅在完全 LOB 模式设置为 true 时可用。AWS DMS 任务以内联方式传输小型 LOB,此方式更加高效。然后,AWS DMS 通过从源表执行查找来迁移大型 LOB。但是,内联 LOB 模式仅在完全加载阶段有效。
解决方案概览
本博文使用 Amazon EC2 for Oracle 数据库实例作为源数据库,并假设您的本地数据库和 Amazon RDS for Oracle 数据库作为目标数据库。本博文还使用 Oracle Data Pump 将数据从源 Oracle 数据库导出和导入到目标 Oracle RDS for Oracle 数据库,并使用 AWS DMS 将 CDC 更改从源 Oracle 数据库复制到 Amazon RDS for Oracle 数据库。本博文假设您已在 AWS 云环境中预置 Amazon RDS for Oracle 数据库作为目标数据库。
下图展示了我们的解决方案架构。


该解决方案包括以下步骤:
- 设置带有源和目标终端节点的 AWS DMS 复制实例
- 使用 Oracle Data Pump 从本地 Oracle 数据库导出架构
- 使用 Oracle 数据泵将架构导入到 Amazon RDS for Oracle 数据库中
- 使用 CDC 创建 AWS DMS 复制任务以执行实时复制
- 在目标 Amazon RDS for Oracle 数据库上验证数据库架构
先决条件
根据应用程序,在确定要迁移到 Amazon RDS for Oracle 数据库的 Oracle 数据库架构之后,必须在启动迁移之前收集一些架构详细信息,例如架构大小、基于对象类型的对象总数和无效对象。
要使用 AWS DMS CDC 功能,请在源 Oracle 数据库上启用数据库级和表格级补充日志记录。完成前提条件后,您可以预置 AWS DMS 实例。
预置 AWS DMS 实例
使用 DMS_instance.yaml AWS CloudFormation 模板来配置 AWS DMS 复制实例及其源和目标终端节点。请执行以下步骤:
- 在 AWS 管理控制台的服务下,选择 CloudFormation。
- 选择创建堆栈。
- 对于指定模板,选择上传模板文件。
- 选择选择文件。
- 选择 DMS_instance.yaml 文件。
- 选择下一步。
- 在指定堆栈详细信息页面上,根据需要编辑预定义参数:
- 对于堆栈名称,输入您的堆栈名称。
- 在 AWS DMS 实例参数下,输入以下参数:
-
- DMSInstanceType – 为 AWS DMS 复制实例选择所需的实例。
- DMSStorageSize – 输入 AWS DMS 实例的存储大小。
- 在源 Oracle 数据库配置下,输入以下参数:
-
- SourceOracleEndpointID – Oracle 数据库的源数据库服务器名称
- SourceOracleDatabaseName – 源数据库服务名称或适用的 SID
- SourceOracleUserName – 源数据库用户名。默认为系统。
- SourceOracleDBPassword – 源数据库用户名的密码
- SourceOracleDBPort – 源数据库端口
- 在“目标 RDS for Oracle“数据库配置下,输入以下参数:
-
- TargetRDSOracleEndpointID – 目标 RDS 数据库终端节点
- TargetRDSOracleDatabaseName – 目标 RDS 数据库名称
- TargetRSOracleUserName – 目标 RDS 数据库名称
- TargetRDSOracleDBPassword – 目标 RDS 密码
- TargetOracleDBPort – 目标 RDS 数据库端口
- 在 VPC、子网和安全组配置下,输入以下参数:
-
- VPCID – 复制实例的 VPC
- VPCSecurityGroupId – 复制实例的 VPC 安全组
- DMSSubnet1 – 可用区 1 的子网
- DMSSubnet2 – 可用区 2 的子网
- 选择下一步。
- 在配置堆栈选项页上的标签”中,输入任何可选值。
- 选择下一步。
- 在 Review 页面上选中 I acknowledge that AWS CloudFormation might create IAM resources with custom names(我确认 AWS CloudFormation 可能会使用自定义名称创建 IAM 资源)。
- 选择创建堆栈。 预置应在大约 5 到 10 分钟内完成。当 AWS CloudFormation Stacks 控制台显示 Create Complete时,此操作完成。
- 在 AWS 管理控制台中,选择服务。
- 选择数据库迁移服务。
- 在资源管理下,选择复制实例。 以下屏幕截图显示复制实例页面,可用于检查输出。


- 在资源管理下,选择终端节点。 以下屏幕截图显示终端节点页面,您可以在其中看到源终端节点和目标终端节点。


源终端节点和目标终端节点的状态显示为“活动”后,应测试连接。为每个终端节点选择运行测试,以确保状态显示为成功。


现在,您已经创建 AWS DMS 复制实例及其源和目标终端节点,并执行了终端节点连接测试,确保其可以成功建立连接。
将源数据库架构迁移到目标数据库
现在,您可以使用 Oracle Data Pump 将 Oracle 数据库架构迁移到 Amazon RDS for Oracle 数据库。Oracle Data Pump 提供了服务器端基础结构,可在 Oracle 数据库之间快速进行数据和元数据移动。对于大型数据库而言,它是理想的选择,可通过高性能数据移动为数据库管理员节省大量时间。Data Pump 自动管理多个并行的卸载和加载流,以实现最大吞吐量。
导出数据
当源数据库处于联机状态并且正在被应用程序使用时,请使用 Oracle Data Pump 从源本地 Oracle 数据库开始数据导出。您还必须从源数据库生成 SCN,以在数据泵导出中使用 SCN,从而确保数据一致性,并在 AWS DMS 中将 SCN 用作更改数据捕获的起点。
要导出数据库模式,请完成以下步骤:


6. 记录生成的 SCN,以便在导出数据和用于 AWS DMS 时使用。
7. 创建一个参数文件以导出架构。查看参数文件的内容:
8. # Use the generated SCN in step#1 for the flashback_scn parameter and create the required database directory if default DATA_PUMP_DIR database directory is not being used.
9.
10.
11. $ cat export_sample_user.par
12. userid=dms_sample/dms_sample
13. directory=DATA_PUMP_DIR
14. logfile=export_dms_sample_user.log
15. dumpfile=export_dms_sample_data_%U.dmp
16. schemas=DMS_SAMPLEflashback_scn=7097405
17. 使用 expdp 实用程序执行导出。请参阅以下代码:




将转储文件传输到目标实例
有多种方法可以将 Oracle Data Pump 导出文件传输到 Amazon RDS for Oracle 实例。您可以使用 DBMS_FILE_TRANSFER 实用程序或 Amazon S3 集成功能来传输文件。
使用 DBMS_FILE_TRANSFER 传输转储文件
您可以使用 DBMS_FILE_TRANSFER 实用程序将数据泵文件直接传输到 RDS 实例。您必须在本地和 Amazon RDS for Oracle 数据库实例之间创建数据库链接。
以下代码创建一个数据库链接 ORARDSDB,该链接连接到目标数据库实例上的 RDS 主用户:


以下脚本使用名为 oradsdb 的数据库链接将名为export_dms_sample_data_01.dmp 的转储文件从源实例复制到目标 Amazon RDS for Oracle 数据库。


借助 S3 集成传输转储文件
借助 S3 集成,您可以将 Oracle 数据转储文件直接传输到 Amazon RDS for Oracle 实例。从源数据库实例导出数据后,可以将数据泵文件上传到 S3 存储桶,将文件从 S3 存储桶下载到 Amazon RDS for Oracle 实例,然后执行导入。您还可以使用此集成功能将数据转储文件从 Amazon RDS for Oracle DB 实例传输到本地数据库服务器。
Amazon RDS for Oracle 实例必须具有 S3 存储桶的访问权限才能与 Amazon RDS for Oracle S3 集成和 S3 结合使用。创建 IAM 策略和角色使用GetObject、ListBucket、PutObject 授予您的 IAM 策略。创建 IAM 角色,并将策略附加到该角色。
要使用 Amazon RDS for Oracle 与 S3 集成,您的 Amazon RDS for Oracle 实例必须与包含 S3_INTEGRATION 选项的选项组关联。
要创建 Amazon RDS 选项组,请完成以下步骤:
- 在 Amazon RDS 控制台上的选项组下,选择创建
- 在选项组详细信息下的名称下,输入选项组的名称。 输入rds-oracle12r2-option-group。
- 对于描述,输入您的组的描述。
- 对于引擎,选择要迁移的目标 Amazon RDS for Oracle 数据库的引擎。 本博文选择oracle-ee。
- 对于“主要引擎版本”,选择引擎版本。 本博文选择 12.2。
- 选择创建。


创建选项组后,必须将 S3_Integration 选项添加到选项组。请执行以下步骤:
- 在 RDS 控制台上,选择选项组。
- 选择您创建的组。
- 选择添加选项。
- 对于选项,选择 S3_INTEGRATION。
- 对于版本,选择 1.0。
- 对于立即申请,选择是。
- 选择添加选项。


在将 S3_Integration 添加到选项组之后,您必须将目标 Amazon RDS for Oracle 数据库修改为使用新的选项组。完成以下步骤,将选项组添加到现有 Amazon RDS for Oracle 数据库:
- 在 RDS 控制台的数据库下,选择要修改的数据库实例。
- 选择修改。 出现修改数据库实例页面
- 在数据库选项下,对于选项组,选择您新创建的选项组。


- 选择继续。
- 在安排修改下,选择立即应用。
- 选择修改数据库实例。
当适用于 Amazon RDS for Oracle 数据库反映了新的选项组时,您必须将 IAM 角色和 S3_Integration 功能与数据库实例相关联。请执行以下步骤:
- 在 RDS 控制台上,选择您的数据库实例。
- 在连接性和安全性标签下,选择管理 IAM 角色。
- 对于将 IAM 角色添加到此实例,选择 RDS_S3_Integration_Role(您创建的角色)。
- 对于功能,选择 S3_INTEGRATION。
- 选择添加角色。


在将 IAM 角色和 S3 集成功能与 Amazon RDS for Oracle 数据库关联之后,您就完成了 S3 与 Amazon RDS for Oracle 数据库的集成。现在,您可以使用以下代码将数据转储文件从本地 Oracle 数据库实例上传到 S3:


开始导入
数据转储文件可用后,在启动导入之前,在目标 Amazon RDS for Oracle 数据库上创建角色、架构和表空间。
使用 RDS 主用户帐户连接到目标 Amazon RDS for Oracle 数据库以执行导入。将 Amazon RDS for Oracle 数据库 tns-entry 添加到 tnsnames.ora,并使用连接字符串的名称执行导入。
如果要导入另一个表空间或使用另一个架构名称,则可以相应地添加表空间和架构的重映射。
使用以下代码所示的连接字符串名称,从本地开始将导入到 Amazon RDS for Oracle:
$ impdp admin@orardsdb directory=DATA_PUMP_DIR logfile=import.log dumpfile=export_dms_sample_data_01.dmp
所有评论(0)