平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“Oracle数据库高可用之DG+RAC”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
一、DG的概念和原理
结合项目来看,Oracle Data Guard是Oracle数据库的一种高可用性解决方案,它借助在主数据库和一个或多个辅助数据库之间自动复制和同步数据,来实现数据库的持续可用性和灾难恢复能力。
以下是Oracle Data Guard的工作原理
- 从实现思路看,主数据库(Primary Database):主数据库是应用程序连接和执行事务的数据库。在主数据库中进行的所有更改都会被记录在归档日志中。
- 落到代码里,辅助数据库(StandBy database):辅助数据库是借助复制主数据库的归档日志来保持与主数据库同步的数据库。辅助数据库能够是物理备库或逻辑备库。
物理备份
主数据库将归档日志传输给辅助数据库。
这能够借助物理方式(借助网络传输二进制归档日志)进行
DG保护模式
| 模式 | 数据丢失风险 | 传输 | 特点 |
| 最大保护 | 零数据丢失 | 同步 | 只有备考确认收到日志,主库才进行下一步操作 |
| 最大可用 | 零数据丢失 | 同步 | 落到代码里,与最大保护不同,最大可用在日志传输超时和备库收到日志后都会进行下一步操作 |
| 最大性能 | 有少量数据丢失风险 | 异步 | 主数据库不等待备用数据库确认 |

- LGWR进程:将日志写入写入在线日志中,
- LNSN进程:将在线日志传输到备库
- ARcn:对在线日志进行归档
- RFS进程:远程接数据,连接备库的日志
- MRP进程:将日志应用恢复到备用数据库
业务中主库一般用作更新,备库一般用作读,查询操作。
二、RAC原理
落到代码里,Oracle RAC(Real Application Clusters)是一种高可用性和可伸缩性的数据库解决方案,它基于共享磁盘架构,允许多个服务器共享同一个数据库实例。
以下是Oracle RAC的工作原理:
- 共享存储:Oracle RAC采用共享存储,将数据库文件存储在共享的磁盘阵列上。这使得多个服务器能够同时访问和修改数据库文件。
- 共享缓存:Oracle RAC采用共享缓存(Shared Cache),也称为共享SGA(System Global Area),来缓存数据和SQL语句。每个服务器都能够访问同时更新共享缓存,这样能够提高性能和并发能力。
- 共享连接:Oracle RAC采用公共网络连接来提供对数据库的访问。客户端能够借助网络连接到任意一个服务器节点,随后借助Oracle Clusterware将请求路由到运行数据库实例的节点。
- 数据库实例:Oracle RAC包含多个数据库实例,每个实例都运行在独立的服务器上。每个实例都有自己的SGA和后台进程,但它们共享同一个数据库。
- 数据共享:共享存储和共享缓存使得所有的数据库实例都能够访问相同的数据。当一个实例修改数据时,其他实例能够立即看到这些修改。
- 数据同步:Oracle RAC采用高速的内部网络来保持所有数据库实例之间的数据同步。当一个实例修改数据时,这些修改会被写入共享存储,同时借助内部网络传播到其他实例,以确保数据的一致性。
- 故障转移:如果一个数据库实例故障,Oracle Clusterware会检测到这个故障,同时将数据库会话和工作负载迁移到其他正常运行的实例上,实现高可用性和容错能力。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多兼容脚本之家。
- Oracle和MySQL的高可用方案对比分析
- Oracle ADG相关查询的实现
- Oracle DG 的归档缺失修复方法
- Oracle区别ADG与DG案例详解
- DBCA命令行搭建Oracle ADG的流程
- Oracle 给rac新建单实例dg并做主从切换功能
- Oracle 10g DG 数据文件迁移的实现