执行 Oracle Data Guard 切换
在 Oracle Data Guard 环境中,主数据库支持一个或多个备用数据库。您可以执行从主数据库到备用数据库的基于切换的托管式角色转换。
Oracle Data Guard 切换概述
切换是主数据库和备用数据库之间的角色反转。在切换期间,原始主数据库转换为备用角色,而原始备用数据库转换为主角色。

Amazon RDS 支持 Oracle Database 副本的完全托管式、基于切换的角色转换。副本可以驻留在单独的 Amazon 区域中,也可以驻留在单个区域的不同可用区(AZ)中。您只能启动到已挂载或以只读方式打开的备用数据库的切换。
主题
Oracle Data Guard 切换的优势
就像 RDS for Oracle 只读副本一样,托管式切换依赖于 Oracle Data Guard。该操作旨在实现零数据丢失。Amazon RDS 可自动执行切换的以下各个方面:
-
反转主数据库和指定备用数据库的角色,将新的备用数据库置于与原始备用数据库相同的状态(已挂载或只读)
-
确保数据一致性
-
在转换后维护您的复制配置
-
支持重复性反转,允许您的新备用数据库恢复其原来的主角色
支持的 Oracle 数据库版本
以下版本支持 Oracle Data Guard 切换:
-
Oracle Database 19c
-
Oracle Database 12c 第 2 版 (12.2)
-
Oracle Database 12c 第 1 版(12.1),使用 PSU 12.1.0.2.v10 或更高版本
Amazon 区域支持
Oracle Data Guard 切换在以下 Amazon 区域中可用:
-
亚太地区(孟买)
-
亚太地区(大阪)
-
亚太地区(首尔)
-
亚太地区(新加坡)
-
亚太地区(悉尼)
-
亚太地区(东京)
-
加拿大(中部)
-
欧洲(法兰克福)
-
欧洲(爱尔兰)
-
欧洲(伦敦)
-
欧洲(巴黎)
-
欧洲(斯德哥尔摩)
-
南美洲(圣保罗)
-
美国东部(弗吉尼亚州北部)
-
美国东部(俄亥俄州)
-
美国西部(北加利福尼亚)
-
美国西部(俄勒冈州)
-
Amazon GovCloud(美国东部)
-
Amazon GovCloud(美国西部)
Oracle Data Guard 切换的成本
Oracle Data Guard 切换功能不会产生额外费用。Oracle Database 企业版支持挂载模式下的备用数据库。要以只读模式打开备用数据库,您需要 Oracle Active Data Guard 选项。
Oracle Data Guard 切换的工作原理
Oracle Data Guard 切换是一项完全托管式操作。您可以通过发出 CLI 命令 switchover-read-replica
启动备用数据库的切换。然后,Amazon RDS 修改您的复制配置中的主角色和备用角色。
原始备用角色和原始主角色是切换前存在的角色。新备用角色和新主角色是切换后存在的角色。旁观者副本是一个副本数据库,它在 Oracle Data Guard 环境中用作备用数据库,但不切换角色。
Oracle Data Guard 切换的各个阶段
要执行切换,Amazon RDS 必须执行以下步骤:
-
阻止原始主数据库上的新事务。在切换期间,Amazon RDS 会中断您的 Oracle Data Guard 配置中所有数据库的复制。在切换期间,原始主数据库无法处理写入请求。
-
将未应用的事务发送到原始备用数据库,并应用它们。
-
以只读或挂载模式重新启动新的备用数据库。该模式取决于切换前原始备用数据库的打开状态。
-
以读/写模式打开新的主数据库。
Oracle Data Guard 切换之后
Amazon RDS 切换主数据库和备用数据库的角色。您负责重新连接应用程序并执行任何其他所需的配置。
成功标准
当原始备用数据库执行以下操作时,Oracle Data Guard 切换获得成功:
-
转换到其作为新的主数据库的角色
-
完成其重新配置
为了限制停机时间,新的主数据库会尽快变为活动状态。由于 Amazon RDS 异步配置旁观者副本,因此这些副本可能会在原始主数据库之后变为活动状态。
与新的主数据库的连接
切换后,Amazon RDS 不会将您当前的数据库连接传播到新的主数据库。在 Oracle Data Guard 切换完成后,将您的应用程序重新连接到新的主数据库。
新的主数据库的配置
为了切换到新的主数据库,Amazon RDS 将原始备用数据库的模式更改为打开。角色的更改是对数据库的唯一更改。Amazon RDS 未设置多可用区复制等功能。
如果您使用不同的选项切换到跨区域副本,则新的主数据库会保留自己的选项。Amazon RDS 不会迁移原始主数据库上的选项。如果原始主数据库具有 SSL、NNE、OEM 和 OEM_AGENT 等选项,则 Amazon RDS 不会将它们传播到新的主数据库。
为 Oracle Data Guard 切换做准备
在启动 Oracle Data Guard 切换之前,请确保您的复制环境满足以下要求:
-
原始备用数据库已挂载或以只读方式打开。
-
在原始备用数据库上启用自动备份。
-
原始主数据库和原始备用数据库处于可用状态。
-
原始主数据库和原始备用数据库没有待处理的维护操作。
-
原始备用数据库处于复制状态。
-
当主数据库或备用数据库当前处于切换生命周期时,您不要尝试启动切换。如果在切换后正在重新配置副本数据库,Amazon RDS 会阻止您启动另一次切换。
注意
旁观者副本是 Oracle Data Guard 配置中的副本,它不是切换的目标。在切换期间,旁观者副本可以处于任何状态。
-
原始备用数据库的配置与原始主数据库所需的配置尽可能接近。假设原始主数据库和原始备用数据库具有不同选项的场景。切换完成后,Amazon RDS 不会自动将新的主数据库重新配置为具有与原始主数据库相同的选项。
-
在启动切换之前,您需要配置所需的多可用区部署。Amazon RDS 不将多可用区作为切换的一部分进行管理。多可用区部署保持原样。
假设 db_maz 是多可用区部署中的主数据库,而 db_saz 是单可用区副本。您启动从 db_maz 到 db_saz 的切换。之后,db_maz 是多可用区副本数据库,而 db_saz 是单可用区主数据库。新的主数据库现在不受多可用区部署的保护。
-
在为跨区域切换做准备时,主数据库不使用与复制配置之外的数据库实例相同的选项组。要成功进行跨区域切换,当前主数据库及其只读副本必须是仅有的使用当前主数据库的选项组的数据库实例。否则,Amazon RDS 会阻止切换。
启动 Oracle Data Guard 切换
您可以将 RDS for Oracle 只读副本切换为主角色,并将以前的主数据库实例切换为副本角色。
将 Oracle 只读副本切换为主数据库角色
-
登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在 Amazon RDS 控制台中,选择数据库。
随后会显示数据库窗格。每个只读副本在角色列中显示副本。
-
选择要切换为主角色的只读副本。
-
对于 Actions(操作),选择 Switch over replica(切换副本)。
-
选择 I acknowledge(我确认)。然后选择 Switch over replica(切换副本)。
-
在 Databases(数据库)页面,监控切换的进度。
切换完成后,切换目标的角色将从 Replica(副本)更改为 Source(源)。
要将 Oracle 副本切换为主数据库角色,请使用 Amazon CLI switchover-read-replica
命令。以下示例使名为 replica-to-be-made-primary
的 Oracle 副本成为新的主数据库。
例
对于 Linux、macOS 或 Unix:
aws rds switchover-read-replica \ --db-instance-identifier
replica-to-be-made-primary
对于 Windows:
aws rds switchover-read-replica ^ --db-instance-identifier
replica-to-be-made-primary
要将 Oracle 副本切换为主数据库角色,请使用所需参数 DBInstanceIdentifier
调用 Amazon RDS API SwitchoverReadReplica
操作。此参数指定要承担主数据库角色的 Oracle 副本的名称。
监控 Oracle Data Guard 切换
要检查实例的运行状况,请使用 Amazon CLI 命令 describe-db-instances
。以下命令检查数据库实例 orcl2
的状态。该数据库在切换之前是备用数据库,但在切换之后是新的主数据库。
aws rds describe-db-instances \ --db-instance-identifier
orcl2
要确认切换成功完成,请查询 V$DATABASE.OPEN_MODE
。检查新的主数据库的值是否为 READ WRITE
。
SELECT OPEN_MODE FROM V$DATABASE;
要查找与切换相关的事件,请使用 Amazon CLI 命令 describe-events
。以下示例查找有关 orcl2
实例的事件。
aws rds describe-events \ --source-identifier
orcl2
\ --source-type db-instance