使用 AWS DMS 配置反向复制,将 Oracle 数据库迁移到 Amazon RDS for O
  • 22

使用AWS DMS配置反向复制以迁移Oracle数据库至Amazon RDS for Oracle

by Abhishek Verma Vivekananda Mohapatra 和Jeevan Shetty于2023年11月20日发布在高级(300),Amazon RDS,AWS数据库迁移服务,RDS for Oracle,技术指南

永久链接 评论

关键要点

在将数据库迁移到云时,应制定故障恢复计划以防万一迁移失败。AWS DMS支持反向复制,可实现最小停机时间的故障回退策略。本文将介绍如何配置AWS DMS进行反向复制,并在迁移过程中实现故障回退。

在将数据库迁移到云时,需要准备一个故障回退计划或恢复计划,以防迁移失败。为了提供故障回退功能,AWS数据库迁移服务AWS DMS支持反向复制,您可以利用这一功能作为从本地Oracle迁移至Amazon关系数据库服务Amazon RDS for Oracle,Amazon弹性计算云Amazon EC2或Amazon RDS自定义版Oracle时的最小停机时间故障回退策略。故障回退通过AWS DMS更改数据捕获CDC反向复制功能实现,该功能与AWS DMS CDC正向复制类似,唯一不同的是复制配置是在相反的端点完成的。

实施反向复制设置是一项重要策略,可以作为安全网,能够在不会丢失关键数据或遇到长期停机的情况下回滚更改。这在多种情况下都非常有用,例如数据完整性问题、应用程序不兼容、性能下降、意外停机、迁移失败、安全漏洞或合规失败等。

您应规划、记录并测试一种故障回退方法,以便在迁移期间或之后出现问题时可以恢复到源数据库。该故障回退方法应最大限度地减少停机时间,并确保数据不会丢失。

在本文中,我们将展示如何配置AWS DMS进行反向复制,作为故障回退方法。在迁移本地Oracle数据库到RDS for Oracle数据库期间,该方法的停机时间最小化。

术语

为方便理解,请熟悉以下概念:

AWS DMS CDC 我们使用AWS DMS CDC任务来捕获迁移过程中源数据库的持续变更。AWS DMS在从源端点复制持续变更时所使用的CDC流程,通过数据库引擎的本地API收集数据库日志中的变更。AWS DMS CDC反向复制的工作原理类似于AWS DMS CDC正向复制,但复制配置是在相反的端点完成的。对于正向和反向复制,AWS DMS根据SCN读取在线或归档重做日志中的持续变更。SCN 本解决方案基于 系统更改号SCN,这是Oracle数据库使用的逻辑内部时间戳。SCN用于对数据库中的事件进行排序,以满足事务的ACID属性。Oracle数据库使用SCN来标记所有更改已写入磁盘的位置,以便恢复操作不会应用已经写入的更改。Oracle还使用SCN标记没有重做存在的数据信息的位置,以便可以停止恢复。LSN 重做日志序列号LSN是一个递增的编号,唯一标识每个重做日志文件。每当进行日志切换时,日志序列会增加。

解决方案概述

在接下来的部分中,我们将展示如何设置反向复制并在从本地Oracle数据库迁移到RDS for Oracle数据库的过程中实现它。在这个示例中,我们使用RDS for Oracle数据库作为源,而本地Oracle数据库作为反向复制的目标,但您也可以使用相同的步骤将Amazon EC2上运行的Oracle作为源,且本地Oracle数据库作为目标。

反向复制有两种设置方式:回落到相同的源数据库或不同的数据库。

方法 A:针对同一本地数据库的故障回退反向复制设置

在此设置中,从Amazon RDS for Oracle到本地Oracle数据库不需要初始加载。唯一的要求是在切换后从目标数据库的当前SCN创建AWS DMS CDC任务到源数据库。在该任务开始后,它将继续复制Amazon RDS for Oracle中的任何新变更到本地数据库。这使您能够在确认没有更多变更需要从RDS for Oracle数据库应用后回滚到本地数据库。

除了数据库故障回退,依赖组件如应用程序、共享文件系统上的非结构化数据等也需要故障回退策略。组件如应用程序、数据库、共享存储等在故障回退前应确保源和目标之间的一致性。建议在生产切换到AWS之前进行故障回退测试。在此测试中,您可以评估执行集成组件的故障回退所需的步骤和持续时间。

下图说明了该复制策略。

建议使用VPN连接,或者也可以使用AWS Direct Connect。

对于反向复制,在完成源和目标数据库之间的数据验证后的切换期间,请执行以下步骤:

使用闪回SCN从本地Oracle导出并导入数据到Amazon RDS for Oracle。从本地Oracle创建CDC复制任务到Amazon RDS for Oracle。使用步骤1中捕获的闪回SCN启动CDC任务。

执行切换。

从RDS for Oracle数据库获取当前SCN。创建从RDS for Oracle数据库到本地Oracle数据库的反向CDC复制任务。针对步骤4中捕获的SCN配置反向复制任务并启动从RDS for Oracle数据库到本地Oracle数据库的反向CDC复制任务。

在某些情况下,您可能希望采用分阶段迁移。在分阶段迁移中,多个共享相同数据库的应用程序会按阶段迁移,每个阶段中已迁移的应用程序及其相关数据库对象会一起迁移。这使您可以选择先从较小的非关键任务应用程序开始,最终迁移关键应用程序,从而降低与数据库迁移相关的风险。在这种情况下,您可以先将这些应用程序及其数据迁移到Amazon RDS for Oracle。在此情境中,应用程序的工作负载在本地Oracle数据库和RDS for Oracle数据库之间分配。对于此类迁移,保持数据库一致性并设计适当的故障回退策略是很重要的,您可能考虑使用AWS DMS可用的双向复制特性。

考虑以下关于双向复制的指南:

为使AWS DMS支持双向复制,必须为数据库P本地Oracle数据库和RRDS for Oracle数据库配置源和目标端点。然后创建两个任务:一个任务将源P的数据移动到目标R,另一个任务将源R的数据移动到目标P。同时,确保为每个任务配置循环预防。这可以防止相同变更被应用到两个任务的目标,从而避免至少一个目标的数据被损坏。在创建任务期间,您可以使用循环预防设置。

例如,AWS DMS任务1的循环预防设置如下:

json{

LoopbackPreventionSettings { EnableLoopbackPrevention true SourceSchema OPSCHEMA TargetSchema RDSSCHEMA }

}任务2的设置如下:

json{

LoopbackPreventionSettings { EnableLoopbackPrevention true SourceSchema RDSSCHEMA TargetSchema OPSCHEMA }

}此外,如果您需要防止DDL更改的循环回退,可以根据需求使用更改处理DDL处理的任务设置。请注意双向复制的局限性。

使用 AWS DMS 配置反向复制,将 Oracle 数据库迁移到 Amazon RDS for O

方法 B:反向复制以便故障回退到不同的本地数据库

在此场景中,我们设置反向复制到不同的本地数据库。确保您有额外的数据库许可证来设置反向复制。

在此设置中,我们需要将数据从源本地数据库复制到一个不同的数据库。创建任务从源到目标,再从目标到不同的本地数据库以维护数据一致性,以便在任何时候都可以进行故障回退。

下图展示了正向和反向复制的设置。在正向复制过程中,数据从本地数据库迁移到Amazon RDS for Oracle。然后您创建新的AWS DMS CDC任务,从RDS for Oracle复制增量变更到本地数据库不同的数据库。

要为您的数据库迁移设置正向复制,请完成以下步骤:

使用闪回SCN从本地Oracle导出数据。将同样导出的数据导入到一个不同的本地Oracle数据库中,该数据库将在故障回退期间使用。

对于数据库迁移的反向复制,请继续执行以下步骤:

创建从RDS for Oracle数据库到Oracle本地CP数据库的反向复制任务。启动反向复制任务,并检查任务是否正常运行,没有错误。使用步骤1中获得的闪回SCN从RDS for Oracle数据库到Oracle本地数据库创建CDC任务。启动步骤5中创建的CDC任务。来自数据库P的数据到数据库R将通过步骤3中创建的反向复制任务复制到CP数据库。

此设置后,您可以随时进行故障回退,但您需要确保在故障回退之前已完成数据验证。在故障回退期间,您需要将应用程序指向CP数据库,该数据库将作为新的生产数据库。

先决条件

以下是反向复制设置的先决条件步骤:

配置用于反向复制的源端点Amazon RDS for Oracle。配置用于反向复制的目标端点本地Oracle实例。为目标数据库的端点用户授予权限。在目标数据库的反向复制中删除任何唯一键、外键约束和索引。创建一个源端点本地Oracle实例和目标端点Amazon RDS for Oracle用于正向复制。如果您使用涉及单独本地数据库的故障回退方法,请确保您具备配置该数据库的额外许可证。在RDS for Oracle数据库中启用补充日志记录,以确保对表列的任何更改都会复制到目标:

sqlexec rdsadminrdsadminutilaltersupplementallogging(ADD)

运行以下命令以启用主键补充日志记录:

sqlexec rdsadminrdsadminutilaltersupplementallogging(ADDPRIMARY KEY)exec rdsadminrdsadminutilaltersupplementallogging(ADDALL COLUMNS)

在源数据库上启用归档日志保留:

sqlexec rdsadminrdsadminutilsetconfiguration(archivelog retention hours 24)

使用方法 A 设置反向复制

本节中的步骤适用于方法A,即您为回退到相同的本地数据库设置反向复制。

在切换窗口期间,完成以下步骤:

停止任务1当前创建的复制任务,该任务正在将数据从本地数据库迁移到Amazon RDS for Oracle。获取CDC任务的起始点。以下查询将帮助您获取Amazon RDS for Oracle上的SCN:

sqlselect currentscn from vdatabase 4045471

您可以在创建反向复制任务时使用数据库SCN、时间戳或检查点。

为避免数据不一致,请小心选择复制仅任务的起始点。AWS DMS只捕获在所选CDC起始点之后开始的事务。如果您使用当前SCN启动CDC任务,则将会丢失任何未结事务的结果,并且未能迁移这些结果。请参阅从CDC起始点执行复制以获取详细信息。

您可以等几分钟,以确保在启动反向复制任务之前源中没有未结事务。否则,使用任务中的选项,在未结事务在指定时间内未关闭时使任务失败。

如果您希望在未结事务的时间未关闭时使任务失败,可以设置 TransactionConsistencyTimeout。有关详细信息,请参考全加载期间缺失记录。

现在我们创建反向复制任务,源为Amazon RDS for Oracle,目标为本地Oracle数据库。确保任务以CDC复制任务的形式创建,正在进行的更改的LSN为T1中的 currentscn即4045471。

对于源事务的自定义CDC起始点,启用自定义CDC起始模式。指定LSN。添加必要的映射规则。启用 详细调试 模式。创建任务。

有关从特定SCN启动和停止的更多信息,请参考如何使用AWS DMS中的本地CDC支持。

使用方法 B 设置反向复制

以下步骤适用于方法B,即为回退到不同的本地数据库设置反向复制。

如前所述,以下步骤在切换之前执行,此前首先将数据从Oracle源数据库加载到Amazon RDS for Oracle,并在开始CDC复制之前。

从Amazon RDS for Oracle获取 currentscn 值:

sqlselect currentscn from vdatabase 4045471

现在我们创建反向复制任务,源为Amazon RDS for Oracle,目标为本地Oracle数据库。确保任务以CDC复制任务的形式创建,正在进行的更改的LSN为Amazon RDS for Oracle中的 currentscn即4045471。

对于源事务的自定义CDC起始点,启用自定义CDC起始模式。指定LSN。添加必要的映射规则。启用 详细调试 模式。创建任务。

如果复制造作一段时间没有问题,则可以关闭详细调试。

使用反向复制进行数据库故障回退

在故障回退之前,请确保采取以下所有预防措施。如果未考虑到这些点,就存在故障回退后的数据不一致和数据丢失的风险。

tk加速器免费破解版准备RDS for Oracle数据库以进行切换。这包括停止应用程序、长时间运行的进程、无效会话等。当RDS for Oracle数据库准备好时,检查CDC任务日志是否有错误。如果有多个任务,请确保 CDCLatencySource 和 CDCLatencyTarget 最小化或接近于零。如果启用了验证,请确认表的验证状态显示为 验证。同时,确认表统计信息中的 最后更新 为当前的系统时间。停止所有CDC任务。创建必要的二级唯一键约束和外键约束。根据适用情况启用触发器并重置序列。完