我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
适用于甲骨文的亚马逊 RDS 中的 Oracle 闪回数据库功能的替代方案
由于托管服务 提供的好
例如,
适用于 Oracle 的 Amazon RDS 支持闪回表、闪回查询、闪回事务和
解决方案概述
您可以使用
在这篇文章中,我们将引导您通过
快照恢复
使用
如果您已在
下图说明了该解决方案的工作流程:
激活只读副本
对于只读副本激活方法,我们可以在计划中的潜在风险活动(例如大规模应用程序代码发布或数据库软件升级)之前创建一个新的数据库实例,该实例充当现有源数据库实例的只读副本,以提供快速回滚策略。就在源数据库实例上开始计划活动之前,只读副本数据库实例被提升为独立数据库实例。如果出现不可恢复的问题,需要禁用,我们可以通过连接到推广的副本数据库实例来快速回滚到之前的数据库状态。如果在原始 RDS 数据库实例上配置了
下图说明了这种架构。首先,我们配置 RDS 只读副本。
然后,我们将 RDS 只读副本提升为独立的 RDS 数据库实例。
然后,我们将客户端连接切换到升级后的 RDS 数据库只读副本,将其重命名为原始实例名称。
使用快照还原进行闪回
在本节中,我们演示如何通过 Amazon RDS 控制台或 亚马逊云科技 CLI 使用快照还原方法模拟 Oracle 中的闪回数据库功能。您可以进行快照备份或使用
拍摄快照备份
首先,我们在所需的时间点进行快照备份。
控制台
要使用控制台,请完成以下步骤:
- 在 Amazon RDS 控制台上, 在导航窗格中选择 数据库 。
- 选择要创建快照的数据库。
- 在 “ 操作 ” 菜单上,选择 “ 拍摄快照 ” 。
- 为快照命名,然后选择 “ 拍摄快照 ” 。
您可以在 Amazon RDS 控制台上检查备份的状态。
亚马逊云科技 命令行
要通过 亚马逊云科技 CLI 运行快照备份,请使用以下代码:
恢复快照
现在,我们将数据库恢复到快照备份。
控制台
要使用控制台,请完成以下步骤:
- 在 Amazon RDS 控制台上,选择我们刚才拍摄的快照,然后在 “ 操作 ” 菜单上选择 “ 恢复快照 ” 。
- 选择数据库实例标识符、分配给从中获取快照的数据库的安全组以及实例类。
- 选择 恢复数据库实例 。
恢复快照后,我们可以重命名数据库,这样就无需将应用程序更改指向新还原的数据库。
- 选择我们从中拍摄快照的数据库,然后选择 M odify 。
-
对于
数据库实例标识符
,使用前缀
-old更新实例名称。
- 选择 “ 继续 ” 。
- 选择 立即 应用 ,然后选择 修改数据库实例 。
-
恢复完成后,我们可以对还原的数据库执行重命名操作,将其命名为与我们最初从中获取备份的实例相同的实例名称(例如,
博客演示)。
重命名完成后,我们可以删除旧实例。
- 选择旧实例,然后在 “ 操作 ” 菜单上选择 “ 删除 ” 。
- 如果需要,您可以保留最终快照和自动备份。
- 输入 “删除我” 进行确认,然后选择 “ 删除 ” 。
亚马逊云科技 命令行
要使用 亚马逊云科技 CLI 实施解决方案,请完成以下步骤:
- 要恢复备份,请使用以下代码:
- 恢复完成后,重命名我们从中获取备份的实例:
- 重命名完成后,将恢复的数据库重命名为与我们拍摄快照的实例相同的名称:
- 现在我们可以删除我们重命名的初始数据库:
使用只读副本激活进行闪回
基于只读副本功能的闪回过程包括以下步骤:
- 准备源数据库。
- 在同一个可用区中创建已装载的 Oracle 副本。
- 检查副本延迟,并在计划维护时段开始时升级只读副本。
- 等待只读副本升级完成以达到一致点,以防出现回滚情况。
- 检查升级后的只读副本的状态并执行连接测试。
- 在源数据库上运行计划活动。
- 如果在计划活动结束后需要回滚,请将您的应用程序指向升级后的只读副本,将旧实例和升级后的实例重命名为原始实例名称。
如果您已在
准备源数据库
在本节中,我们提供了启用自动备份和强制记录模式所需的步骤。
启用自动备份
在数据库实例可用作源数据库实例之前,请确保在源数据库实例上启用自动备份。您可以通过控制台或 亚马逊云科技 CLI 检查自动备份是否已启用。
如有必要,将自动
备份设置 backupRetentionPeriod 启用为大于 0
。
控制台
要检查控制台上的自动备份,请完成以下步骤:
- 在 Amazon RDS 控制台上, 在导航窗格中选择 数据库 。
- 选择要验证的数据库实例。
- 在 “ 维护和备份 ” 选项卡上,检查 是否启用了 自动备份 。
- 要启用自动备份,请选择 修改 。
- 对于 备份保留期 ,选择一个非零的正值,例如 7 天。
- 选择 “ 继续 ” 。
- 选择 “ 立即 应用 ” 。
- 在确认页面上,选择 修改数据库实例 以保存您的更改并启用自动备份。
亚马逊云科技 命令行
使用以下代码验证
backupRetentionPeri
od 是否大于 0:
要启用备份保留期为 7 天的自动备份,请使用以下代码:
启用强制记录模式
我们建议您启用强制记录模式。在强制记录模式下,即使将
NOLO
GGING 模式与数据定义语言 (DDL) 语句一起使用,Oracle 数据库也会写入重做记录,以确保它们也适用于副本数据库实例。完成以下步骤以启用强制记录模式:
- 使用 SQL Developer 或 SQL*Plus 等客户端工具登录您的 Oracle 数据库。
- 通过运行以下过程启用强制记录模式:
创建只读副本
在同一可用区中为源 Oracle 数据库实例创建处于已装载状态的只读副本。在主数据库的计划活动开始前几个小时运行此任务,并确保在维护时段开始时有一个有效的副本。根据经验,您可以估计在您的特定系统上执行测试并增加至少两个小时的应急时间。只读副本数据库实例是在禁用备份的情况下创建的。除非另有规定,否则其他数据库实例属性(包括数据库安全组和数据库参数组)继承自源数据库实例。
控制台
要在控制台上创建只读副本,请完成以下步骤:
- 在 Amazon RDS 控制台的导航窗格中,选择 数据库 。
- 选择要用作副本源的 Oracle 数据库实例。
- 在 “ 操作 ” 菜单上,选择 “ 创建副本 ” 。
- 对于 副本模式 ,选择 “ 已装载 ” 。
- 对于 数据库实例标识符 ,输入只读副本的名称。
- 对于 可用区域 ,选择源数据库的区域。
- 对于其他设置,请验证它们是否与源数据库相同。
- 选择 创建只读副本 。
你可以在控制台上查看副本的状态。
创建副本操作完成后,我们可以选择将副本模式更改为已装载。
亚马逊云科技 命令行
要使用 亚马逊云科技 CLI 创建只读副本,请完成以下步骤:
- 使用以下代码创建只读副本:
- 使用以下代码查询实例:
- 创建副本操作完成后,我们可以选择将副本模式更改为开放只读(此选项需要额外 Oracle 许可证):
检查副本延迟
在计划运行计划活动的计划维护时段开始时,我们会将只读副本升级为具有一致的恢复点,以防最后需要回滚。
在提升只读副本之前,我们必须检查副本延迟,以确保副本数据库实例与源数据库实例同步。
连接到源数据库后,我们在检查副本延迟之前运行以下 logfile switch 命令以获取更新的延迟统计信息:
现在我们可以通过控制台或 亚马逊云科技 CLI 检查副本延迟。
控制台
要在控制台上检查副本延迟,请完成以下步骤:
- 在 Amazon RDS 控制台的导航窗格中,选择 数据库 。
- 选择 Oracle 数据库副本实例。
- 在 复制 部分中,我们可以验证 复制状态 和 延迟 列。
-
我们还可以在 “
监控
” 选项卡上查
看 Amazon CloudWatch 副本延迟 指标。
亚马逊云科技 命令行
要使用 亚马逊云科技 CLI 检查副本延迟,请使用以下代码:
提升只读副本
在继续进行只读副本升级之前,我们将检查源数据库和目标数据库的当前状态、整个源端点的连接、只读副本端点以及现在指向源端点的 CNAME DNS 别名。
- 通过 RDS 实例终端节点测试与源数据库的连接:
- 通过 RDS 实例终端节点测试与目标副本数据库的连接:
- 测试通过 CNAME DNS 别名与源数据库的连接:
现在我们可以升级只读副本。提升只读副本时,创建的新数据库实例会保留前一个只读副本的选项组和参数组。升级过程可能需要几分钟或更长时间才能完成,具体取决于只读副本的大小。将只读副本提升为新的数据库实例后,它就像其他数据库实例一样。
请记住以下几点:
- 备份持续时间是自上次备份以来数据库更改次数的函数。如果您计划将只读副本升级为独立实例,我们建议您在升级之前启用备份并完成至少一个备份。
- 当只读副本处于备份状态时,您无法将其升级为独立实例。如果您在只读副本上启用了备份,请配置自动备份窗口,以使每日备份不会干扰只读副本的提升。
控制台
要在控制台上升级只读副本,请完成以下步骤:
- 在 Amazon RDS 控制台上, 在导航窗格中选择 数据库 。
- 选择要升级的只读副本。
- 在 “ 操作 ” 菜单上,选择 “ 升级 ” 。
- 在 提升只读副本 页面上,将备份保留期输入为源数据库。
- 当设置符合您的要求时,选择 “ 继续 ” 。
- 在确认页面上,选择 提升只读副本 。
您可以在控制台上查看副本的状态。
亚马逊云科技 命令行
要使用 亚马逊云科技 CLI 将只读副本实例升级为独立实例,请使用以下代码:
等待只读副本促销完成
此时,我们将等待数据库副本升级完成,以便在发生回滚时验证一致性。我们还将检查与推广的只读副本实例的连接,以确保在回滚时它已准备好接受入站连接。
我们可以通过控制台或 亚马逊云科技 CLI 查看促销状态。
控制台
以下屏幕截图显示了控制台上的促销数据库实例状态。
亚马逊云科技 命令行
要使用 亚马逊云科技 CLI,请使用以下代码检查推广的数据库实例状态:
使用升级后的只读副本 RDS 端点运行连接测试:
在源数据库上运行计划中的活动
此时,我们已经启动并运行了源数据库的副本,它可以起到新的源数据库的作用,以防我们在计划活动结束后需要回滚应用于数据库的更改。在实际执行生产 RDS 实例上的计划活动之前,请确保升级的 RDS 实例具有预期的配置,以适应需要回滚的生产工作负载。例如,检查 RDS 实例类和大小、存储自动扩展选项以及任何其他配置,例如参数和选项组。
计划活动结束后回滚
在这种情况下,我们已经在源数据库上运行了计划中的活动,但结果并不如预期。我们下令禁止此活动,然后开始回滚。
要回滚到数据库的初始状态,我们必须重新创建原始 RDS 数据库实例 DNS 终端节点,通过重命名两个 RDS 数据库实例来指向升级的 RDS 数据库实例,如下所示:
-
将原始 RDS 数据库实例从
演示博客重命名为演示博客旧实例,然后停止原始实例 -
将推广的 RDS 数据库实例从 demo-blog-b 重命名为演示博客
这样,将重新创建原始 RDS 数据库实例 DNS 条目以指向升级后的 RDS 数据库实例。
重命名的数据库实例的新 DNS 名称将在大约 10 分钟后生效。
控制台
要在控制台上实现回滚,请完成以下步骤:
- 在 Amazon RDS 控制台的导航窗格中,选择 数据库 。
- 选择要停止的数据库实例。
- 选择 “ 修改” 。
-
输入原始 RDS 数据库实例标识符的新名称(d
emo-blog-old)。
- 选择 “ 立即 应用 ” ,然后选择 “ 修改数据库实例 ” 。
-
对推广的 RDS 数据库实例应用相同的步骤并将其重命名为 d
emo-blog。
亚马逊云科技 命令行
要使用 亚马逊云科技 CLI 进行回滚,请完成以下步骤:
- 重命名旧的源数据库实例:
-
使用原始源数据库实例名称重命名推广的 RDS 数据库实例
(demo-blog):
- 使用原始源数据库 RDS 端点测试与数据库的连接:
编辑 CNAME 条目
如前几节所预期的那样,如果您的应用程序连接字符串使用在指向初始主数据库实例终端节点的私有区域中定义的自定义 Route 53 CNAME 条目进行配置,则您只需更新 CNAME 以指向推广的数据库实例终端节点,而无需重命名这两个数据库实例。这样,与推广的 RDS 数据库实例的连接将在几秒钟内可用。高级步骤如下所示:
- 停止原始源数据库。
- 使用推广的只读副本的别名更新专用于您的源数据库的 Route 53 DNS 别名记录。
- 测试与新源数据库的连接。
控制台
要通过控制台编辑 CNAME 条目,请完成以下步骤:
- 在 Amazon RDS 控制台的导航窗格中,选择 数据库 。
- 选择要停止的数据库实例。
- 在 “ 操作 ” 菜单上,选择 “ 暂时 停止 ” 。
- 选择确认数据库实例将在 7 天后自动重启。
- 作为可选但建议的步骤,选择在 快照中 保存数据库实例, 然后在快照名称中输入 快照名称 。
- 选择 “ 暂时 停 止” 以停止数据库实例。
- 在 Route 53 控制台上, 在导航窗格中选择 托管区域 ,然后选择您的托管区域。
- 选择 编辑托管区域 。
- 在 记录 列表中,选择与源数据库关联的 CNAME。
- 选择 “ 编辑记录” 。
- 使用升级后的只读副本端点更新该值。
- 选择 “ 保存” 。
- 使用 CNAME 别名端点测试与数据库的连接:
结论
有了适用于 Oracle 的 Amazon RDS,我们可以使用亚马逊 RDS 功能来实现与 Oracle 闪回数据库功能相同的业务目标。在这篇文章中,我们讨论了如何在计划内且具有潜在风险的活动之前验证恢复点:我们可以在活动开始之前创建手动快照或升级只读副本。第二个选项更适合生产环境,因为它可以加快回滚速度,以防计划活动引入不可恢复的问题,因为您可以根据数据库大小和工作负载提前足够的时间配置只读副本,以减轻
如果您有任何意见或问题,请将其留在评论部分。
作者简介
Tony Mullen
是驻曼彻斯特的高级数据库专家解决方案架构师。他专注于关系数据库引擎,帮助客户将其数据库工作负载迁移到 亚马逊云科技 并对其进行现代化改造。
Giorgio Bonzi
是一位驻米兰的高级数据库专家解决方案架构师。他专注于 Oracle 数据库引擎,为客户提供指导和技术援助,帮助他们在 亚马逊云科技 上设计、部署和优化关系数据库工作负载。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。