发布于: Aug 26, 2022
众多亚马逊云科技用户都在使用 Amazon 关系数据库服务产品组合来减少沉重繁琐且无差异化的数据库日常维护工作。其中 Amazon RDS for Oracle 也切实帮助用户显著减少了 Oracle 数据库的管理与维护负担
关系数据库管理工作复杂而耗时,不过现在众多亚马逊云科技用户都在使用 Amazon 关系数据库服务产品组合 Amazon Relational Database Service,简称 Amazon RDS 来减少沉重繁琐且无差异化的数据库日常维护工作。其中 Amazon RDS for Oracle 也切实帮助用户显著减少了 Oracle 数据库的管理与维护负担。
Amazon RDS for Oracle 提供多可用区部署方案,可针对特定区域内的数据库实例提供更出色的可用性与持久性,同时带来高效灾难恢复解决方案。当然,一部分运行关键任务数据库的客户希望自己的灾难恢复配置能够跨越多个区域,以满足特殊的业务需求。此外,这些客户还希望利用灾难恢复的投资来处理某些只读生产工作负载。
现在,大家已经可以任选以下方法,为您的 Amazon RDS for Oracle 建立起自我管理型灾难恢复解决方案:
- 使用数据库快照为 Amazon RDS for Oracle 建立起低成本、跨区域的灾难恢复方案。关于更多详细信息,请参阅使用数据库快照与 Amazon Web Services Lambda 在 Amazon RDS for Oracle 上建立跨区域自动灾难恢复机制。
- 使用 Amazon Web Services 数据库迁移服务(Amazon Web Services Database Migration Service,简称 Amazon Web Services DMS)为 Amazon RDS for Oracle 建立灾难恢复机制。关于更多详细信息,请参阅使用 Amazon Web Services DMS 在 Amazon RDS for Oracle 上建立灾难恢复机制。
- 使用 Oracle GoldenGate 在 Amazon RDS for Oracle 上部署跨区域灾难恢复机制。关于更多详细信息,请参阅使用 Oracle GoldenGate 在 Amazon RDS for Oracle 上实现跨区域灾难恢复机制。
借助 Amazon RDS for Oracle 区域内与跨区域只读副本功能,我们可以使用 Oracle Active Data Guard 轻松创建多个只读副本。本文将讨论如何使用 Amazon RDS for Oracle 只读副本建立托管灾难恢复与只读副本。此外,本文还将涵盖其他用例,例如如何从主数据库实例中转移读取工作负载、通过只读副本服务扩展读取工作负载,以及优化读取延迟等。
Amazon RDS for Oracle 只读副本(分区域内与跨区域两类),在主数据库实例与物理备用数据库(只读副本)之间使用 Oracle Active Data Guard。Amazon RDS for Oracle 在主实例与只读副本之间配置异步 Data Guard 复制机制,保证只读副本处于只读模式且 Redo Apply 处于活动状态。主实例与只读副本运行在 Data Guard 最大性能模式,该模式使用日志写入器(LGWR)异步传输(ASYNC),而且只读副本 I/O 没有任何确认(NOAFFIRM)。在这种模式下,一旦产生的 redo 被写入在线 redo 日志,即提交相应事务。此外,redo 还会被异步写入至只读副本的 redo 日志。这套解决方案在最大程度提升数据保护水平的同时,又不会对主数据库实例的性能造成任何影响。
根据数据库工作负载及其所生成 redo 日志的具体数量,我们可以将 RPO 与 RTO 控制在不超过 10 分钟的时间之内。RDS Oracle 会在主实例与只读副本之间建立安全的通信通道,并通过安全组和访问控制列表,实现主实例和只读副本之间安全的 redo 传输。
区域内只读副本使用场景
下面来看区域只读副本的几种常见用例:
- 转移读取工作负载——客户可以将读取工作负载从主数据库实例转移至只读副本数据库实例,借此提高运行在主数据库上的读取与写入事务的性能表现。
- 读取工作负载横向扩展——客户最多可以创建 5 个只读副本,借此实现读取工作负载的横向扩展。
- 可用性——客户可以将指定的只读副本提升为新的独立数据库保证在主数据库发生故障时带来更高的可用性。
下图所示,为 Amazon RDS for Oracle 区域内只读副本的基本架构。
跨区域只读副本使用场景
下面来看跨区域只读副本的几种常见场景:
- 托管灾难恢复——使用托管灾难恢复方案,客户可以将其他区域内的只读副本提升为新的独立生产数据库。
- 优化数据邻近度——客户可以将副本部署在更靠近应用程序用户的特定区域内,借此降低读取延迟。
- 转移读取工作负载——客户可以将读取工作负载从主数据库实例转移至只读副本数据库实例。只读副本可以部署在任意服务区域内。
- 读取工作负载横向扩展——客户可以在任意区域中部署最多 5 个只读副本,借此实现读取工作负载的横向扩展。
下图所示,为 Amazon RDS for Oracle 跨区域只读副本的基本架构。
您可以使用首选客户端连接只读副本实例;本文将使用 SQL * Plus,具体如下所示。关于更多接入 RDS Oracle 数据库的详细信息,请参阅接入您的示例 Oracle 数据库实例。要使用 SQL * Plus 接入只读副本,请输入以下操作代码:
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL> set lines 250 pages 10000 SQL> show parameter db_uniq NAME TYPE VALUE ------------------------------------ ----------- db_unique_name string MYDB_B SQL> select open_mode,database_role from v$database; OPEN_MODE DATABASE_ROLE -------------------- ---------------- READ ONLY WITH APPLY PHYSICAL STANDBY
您可以在 Amazon CloudWatch 控制台、Amazon RDS 控制台、Oracle Enterprise Manager(OEM)或者 Oracle Data Guard 视图 (v$archived_log, v$dataguard_stats, v$dataguard_status) 上监控复制延迟。
如果希望在 Amazon RDS 控制台中进行监控,请在 Databases 页面下选择您的只读副本实例。
在 Monitoring 选项卡中,搜索 replica lag。
您也可以使用首选客户端连接只读副本实例;本文将使用 SQL Deverloper。关于接入 RDS Oracle 数据库的更多详细信息,请参阅接入您的示例 Oracle 数据库实例。具体操作代码如下:
您也可以在只读副本实例上运行以下查询,使用 Oracle Active Data Gurad 视图检查关于副本延迟的更多详细信息。以下为使用 SQL Deverloper 并通过管理员用户连接只读副本的输出结果
SQL> Select * from v$standby_event_histogram where upper(name)='APPLY_LAG';
SQL> Select name,value,datum_time,time_computed from v$dataguard_stats where upper(name)='APPLY_LAG';
一旦发生灾难,请完成以下步骤,将特定的跨区域只读副本提升为新的独立生产数据库:
- 停止仍在访问旧有生产数据库的应用程序。
- 保证所有可用的 redo 日志都已被正确应用于跨区域只读副本,且不存在复制滞后。
- 提升该跨区域只读副本。
- 将应用程序指向提升后数据库的监听器端点。
- 为提升后的新独立数据库重新创建只读副本。
要手动提升只读副本,请完成以下操作步骤:
- 在 Databases 页面中,选择 mydbinstance-ro。
- 在 Actions 下拉菜单中,选择 Promote。
- 在 Promote Read Replica 页面中的 Enable automatic backups 位置,选择 Yes。
- 在 Backup retention period 部分,选择 1 days。
- 在 Backup window 部分,选择 No preference。
- 选择 Continue。
现在,您会看到确认页面。 - 选择 Promote Read Replica。
整个过程大概需要 5 分钟。在成功完成后,您可以在 Amazon RDS 控制台上验证主实例与副本实例的状态。二者的角色都应显示为 Instance。
如果需要修改数据库实例标识符,您可以选定该实例并选择 Modify。
要在 Amazon Web Services CLI 上提升只读副本,请输入以下操作代码:
aws rds promote-read-replica \ --db-instance-identifier mydbinstance-ro\