Oracle RAC 全方位教程
目录
-
第一部分:初识 Oracle RAC
(图片来源网络,侵删)- 1 什么是 Oracle RAC?
- 2 RAC 的核心价值与优势
- 3 RAC 的基本架构
- 4 RAC 的核心组件
- 5 RAC 与单实例数据库的根本区别
-
第二部分:RAC 环境准备与架构
- 1 硬件要求
- 2 操作系统要求
- 3 网络规划 (重中之重)
- 4 存储规划 (重中之重)
- 5 软件包要求
- 6 架构图示例
-
第三部分:安装与配置 RAC (实战步骤)
- 1 准备工作:配置主机名、IP、用户等
- 2 配置共享存储 (使用 ASM)
- 3 安装 Grid Infrastructure (集群ware)
- 4 使用 DBCA 创建 RAC 数据库
- 5 验证 RAC 安装
-
第四部分:RAC 日常管理与维护
- 1 集群管理
- 2 实例管理 (启动/关闭)
- 3 数据库管理
- 4 管理投票盘 和 OCR
- 5 备份与恢复
-
第五部分:RAC 应用开发与连接
(图片来源网络,侵删)- 1 如何连接 RAC 数据库?
- 2 TAF (Transparent Application Failover)
- 3 FCF (Fast Connection Failover)
- 4 开发最佳实践
-
第六部分:常见问题与故障排查
- 1 常见问题列表
- 2 关键日志文件
- 3 诊断思路
-
第七部分:学习资源与进阶
- 1 官方文档
- 2 书籍推荐
- 3 实验环境搭建建议
第一部分:初识 Oracle RAC
1 什么是 Oracle RAC?
Oracle Real Application Clusters (RAC) 是 Oracle Database 的一项核心高可用性技术,它允许多个 Oracle 数据库实例(通常运行在不同的服务器上)同时访问同一个物理数据库,这些服务器通过高速网络连接,并共享存储。
RAC 就是一个“集群数据库”,你可以把它想象成一个由多个“大脑”(服务器/实例)组成的“身体”(数据库),所有大脑都能同时思考和处理关于这个身体的任何事情,并且共享同一个“记忆”(数据文件)。

2 RAC 的核心价值与优势
- 高可用性:这是 RAC 最核心的优势,如果集群中的一台服务器(节点)发生故障,数据库服务不会中断,客户端的连接会自动切换到其他健康的节点上,实现“无缝”切换,业务几乎无感知。
- 可扩展性:当业务增长,数据库负载过高时,可以通过向集群中添加新的节点来线性地提升数据库的处理能力,这种“Scale-Out”(横向扩展)方式比升级单台服务器的“Scale-Up”(纵向扩展)更灵活、成本效益更高。
- 负载均衡:客户端的连接可以自动分配到集群中负载较低的节点上,避免了单点过载,优化了整体性能。
- 灾难恢复:RAC 本身不是一个完整的 DR 解决方案,但它为构建强大的 DR 方案(如 RAC One Node + Data Guard)提供了坚实的基础。
3 RAC 的基本架构
RAC 架构主要由两部分组成:
- 集群ware:这是 RAC 的“骨架”和“神经系统”,它负责管理集群中的所有节点,确保它们之间的通信、协调和故障检测,Grid Infrastructure 是 Oracle 提供的集群ware 解决方案。
- Oracle Database:这是 RAC 的“血肉”,它被修改为可以在集群环境中运行,允许多个实例并发访问同一个数据库。
4 RAC 的核心组件
- 节点:集群中的一台独立的服务器,一个 2 节点的 RAC 集群就有两台服务器。
- 实例:运行在节点上的 Oracle 内存结构和后台进程集合,在 RAC 中,每个节点都有一个独立的实例。
- 数据库:存储在共享磁盘上的物理数据文件(控制文件、数据文件、日志文件等),所有实例共同访问和修改这份数据。
- Oracle Clusterware (Grid Infrastructure 的一部分):
- OCR (Oracle Cluster Registry):集群的核心注册表,它存储了集群的配置信息,如节点名、实例名、数据库信息、网络配置等,OCR 对集群的运行至关重要。
- Voting Disk (投票盘):用于“心跳”机制,集群中的所有节点会定期向投票盘写入信息(投票),如果一个节点在一定时间内没有成功写入,其他节点就会认为它已经“死亡”,并将其从集群中驱逐,从而避免“脑裂”(Split-Brain)问题。
- ASM (Automatic Storage Management):Oracle 提供的智能卷管理器和文件系统。强烈推荐在 RAC 环境中使用 ASM,因为它能简化存储管理,提供高性能、高可用性和自动化的数据冗余(如镜像)。
- 私有网络:节点之间的专用高速网络,用于 Clusterware 的心跳同步和实例间的缓存融合。
- 公共网络:客户端访问数据库的网络。
- SCAN (Single Client Access Name):一个为客户端配置的单一域名系统名称,它解析到集群中一个或多个虚拟 IP 地址,客户端通过 SCAN 连接,无需关心具体连接到哪个节点,由集群自动进行负载均衡和故障转移。
5 RAC 与单实例数据库的根本区别
| 特性 | 单实例数据库 | RAC 数据库 |
|---|---|---|
| 架构 | 一个实例,一个数据库 | 多个实例,一个数据库 |
| 高可用 | 依赖硬件冗余或 Data Guard | 节点级别的故障自动切换 |
| 可扩展性 | Scale-Up(升级硬件) | Scale-Out(增加节点) |
| 内存 | 实例内存独立 | 实例内存通过私有网络共享(缓存融合) |
| 管理 | 管理单个实例 | 管理整个集群和数据库 |
第二部分:RAC 环境准备与架构
搭建 RAC 环境是整个教程中最具挑战性的部分,规划至关重要。
1 硬件要求
- 服务器:至少 2 台,推荐使用类似架构的服务器。
- CPU:根据负载规划,每台服务器至少 2 个核心。
- 内存:根据负载规划,每台服务器至少 8GB。
- 网络:每台服务器至少需要 3 张物理网卡,强烈推荐使用 bonded NIC 以提高可靠性。
- 存储:共享存储,如 SAN、NAS 或 iSCSI,所有节点必须能同时访问。
2 操作系统要求
- 版本:选择 Oracle 官方支持且经过认证的 Linux 发行版,如 Oracle Linux (RHEL/CentOS 的下游版本,有 UEK 内核优化) 或 RHEL/CentOS。
- 内核参数:需要根据 Oracle 的官方文档调整大量内核参数(如
shmmax,shmall,file-max等)。 - 用户和组:创建
oracle和grid用户,以及相应的dba和oinstall组。
3 网络规划 (重中之重)
这是最容易出错的地方,每台服务器至少需要 3 个 IP 地址:
- 公共 IP:用于管理节点和客户端访问。
168.1.11(node1),168.1.12(node2)。 - 虚拟 IP:每个节点一个,当节点故障时,VIP 会自动漂移到其他节点上,客户端连接不变。
168.1.21(VIP for node1),168.1.22(VIP for node2)。 - SCAN IP:集群一个,DNS 中需要配置 SCAN,解析到 3 个 SCAN VIP(
scan1,scan2,scan3)。168.1.100,168.1.101,168.1.102。 - 私有 IP:节点间通信使用。
10.10.11(node1 private),10.10.12(node2 private)。
网络隔离:强烈建议将公共网络和私有网络在不同的物理网段上。
4 存储规划 (重中之重)
使用 ASM,你需要规划磁盘组。
- OCR/Voting Disk:通常放在一个高可用的磁盘组中,建议使用外部冗余或 NORMAL 冗余。
- Data/Flash Recovery Area:用于存放数据文件、控制文件、redo log 等,建议使用 NORMAL 或 HIGH 冗余(镜像)。
- Fast Recovery Area:可选,用于存放备份。
5 软件包要求
根据你选择的 Oracle Database 版本(如 19c, 21c)和操作系统版本,从 MOS (My Oracle Support) 下载对应的安装包:
- Grid Infrastructure:用于安装集群ware 和 ASM。
- Oracle Database:用于创建数据库。
6 架构图示例
+---------------------+ +---------------------+
| Node 1 | | Node 2 |
| (racnode1.example.com)| | (racnode2.example.com)|
|---------------------| |---------------------|
| Public IP: 192.168.1.11 | | Public IP: 192.168.1.12 |
| VIP: 192.168.1.21 | | VIP: 192.168.1.22 |
| Private IP: 10.10.10.11| | Private IP: 10.10.10.12 |
|---------------------| |---------------------|
| Oracle Instance 1 | | Oracle Instance 2 |
+---------------------+ +---------------------+
\ /
\ (Private Network) /
\ /
\ /
+-------------------------------------------------------+
| Shared Storage (SAN/NAS) |
| |
| +---------------------+ +---------------------------+ |
| | OCR/Voting Disk | | Data/Redo Logs | |
| | (e.g., +DATA/CRS) | | (e.g., +DATA) | |
| +---------------------+ +---------------------------+ |
| |
| Managed by ASM (Automatic Storage Management) |
+-------------------------------------------------------+
第三部分:安装与配置 RAC (实战步骤)
这部分将以 Oracle Linux 8 + Oracle Database 19c 为例,概述安装流程。
1 准备工作
- 安装操作系统:在两台节点上安装相同版本的 Oracle Linux。
- 配置网络:按照 2.3 节的规划,配置所有 IP 地址、主机名
/etc/hosts文件(关键文件,必须包含所有节点、VIP、SCAN 的解析)。 - 创建用户和组:
# 创建 grid 用户和组 /usr/sbin/groupadd -g 1000 oinstall /usr/sbin/groupadd -g 1001 dba /usr/sbin/groupadd -g 1002 oper /usr/sbin/groupadd -g 1003 asmadmin /usr/sbin/groupadd -g 1004 asmdba /usr/sbin/groupadd -g 1005 asmoper /usr/sbin/useradd -u 1100 -g oinstall -G dba,oper,asmadmin,asmdba,asmoper grid # 创建 oracle 用户和组 /usr/sbin/useradd -u 1101 -g oinstall -G dba,asmdba oracle # 设置密码 passwd grid passwd oracle
- 配置内核参数和资源限制:编辑
/etc/sysctl.conf和/etc/security/limits.conf,并运行sysctl -p使其生效。 - 配置 NTP:确保所有节点的时间同步。
- 配置无密码 SSH 信任:
grid和oracle用户需要在所有节点间实现无密码 SSH 登录。 - 挂载共享存储:在所有节点上识别共享磁盘,并确保权限正确。
2 配置共享存储 (使用 ASM)
在安装 Grid Infrastructure 的过程中,会自动配置 ASM,你需要提前规划好哪些磁盘用于 OCR/Voting,哪些用于数据。
3 安装 Grid Infrastructure (集群ware)
这是安装的核心步骤。
- 以
grid用户身份登录到第一个节点。 - 运行安装程序:
$ cd /path/to/grid_home $ ./runInstaller
- 遵循图形界面:
- 选择安装选项:通常选择 "Install and Configure Oracle Grid Infrastructure for a Cluster"。
- 配置集群:输入 SCAN 名称和 SCAN VIP。
- 添加节点:将第二个节点添加到集群中。
- 配置网络:选择公共网络、私有网络和 SCAN 网络。
- 配置存储:选择用于 OCR/Voting 和 ASM 的磁盘。
- 配置密码:为所有管理账户(如
sys,system,grid)设置统一的密码。 - 执行配置脚本:安装程序会提示你以
root身份在所有节点上执行脚本。务必按顺序执行。
安装完成后,集群ware 就已经运行起来了,你可以使用 crsctl status resource -t 查看集群资源状态。
4 使用 DBCA 创建 RAC 数据库
Grid Infrastructure 安装好后,就可以创建数据库了。
- 以
oracle用户身份登录。 - 运行 DBCA:
$ dbca
- 遵循图形界面:
- 选择操作:选择 "Create a Database"。
- 选择数据库类型:选择 "Oracle Real Application Clusters database"。
- 配置数据库:输入全局数据库名、SID(每个节点一个 SID,如
+ASM1,+ASM2对应 ASM 实例,RAC1,RAC2对应数据库实例)。 - 配置存储:选择 ASM,并指定磁盘组。
- 配置初始化参数:可以手动调整或使用默认模板。
- 配置管理选项:如启用的 ADR、Fast Start Failover 等。
- 创建选项:选择 "Create Database"。
DBCA 会自动在所有节点上创建实例、数据文件、控制文件和日志文件。
5 验证 RAC 安装
-
检查集群状态:
[grid@racnode1 ~]$ crsctl status resource -t
你应该能看到
ora.rac.db、ora.rac1.inst、ora.rac2.inst等资源都处于ONLINE状态。 -
检查实例状态:
[oracle@racnode1 ~]$ sqlplus / as sysdba SQL> select instance_name, status from v$instance;
在两个节点上分别执行,应该能看到
RAC1和RAC2实例都是OPEN状态。 -
测试客户端连接: 在客户端机器上,使用 TNS 连接字符串连接到 SCAN 名称。
sqlplus sys/your_password@SCAN_NAME:1521/SERVICE_NAME
第四部分:RAC 日常管理与维护
1 集群管理
- 启动/停止集群:
# 启动整个集群 (所有节点) crsctl start cluster # 停止整个集群 crsctl stop cluster
- 管理集群资源:
# 查看资源状态 crsctl status resource -t # 启动/停止单个资源 crsctl start resource ora.rac.db crsctl stop resource ora.rac.db
2 实例管理
- 启动/停止单个实例:
# 在节点1上启动实例1 srvctl start instance -d RAC -i RAC1 # 在节点1上停止实例1 srvctl stop instance -d RAC -i RAC1
- 滚动停止/启动集群:在不中断服务的情况下,对集群中的每个节点依次进行维护。
# 滚动停止所有实例 srvctl stop instance -d RAC -i RAC1,RAC2 -o immediate # 滚动启动所有实例 srvctl start instance -d RAC -i RAC1,RAC2
3 数据库管理
- 使用 SRVCTL:RAC 环境下的数据库管理主要通过
srvctl命令行工具进行。# 查看数据库状态 srvctl status database -d RAC # 添加/删除实例 srvctl add instance -d RAC -i RAC3 -n racnode3 srvctl remove instance -d RAC -i RAC3
4 管理投票盘 和 OCR
- 备份:Grid Infrastructure 会自动备份 OCR 和 Voting Disk,但 DBA 也需要手动备份。
# 备份 OCR ocrconfig -manualbackup
- 恢复:OCR 损坏,可以从自动备份或手动备份中恢复。
# 恢复 OCR ocrconfig -restore /path/to/backup_file.ocr
5 备份与恢复
- RMAN:RMAN 是 RAC 备份的首选工具,它天然支持多实例备份,可以并行执行,提高效率。
- 备份策略:
- 全库备份:定期对整个数据库进行备份。
- 控制文件和 SPFILE 自动备份:确保 RMAN 配置了
CONFIGURE CONTROLFILE AUTOBACKUP ON;。 - 归档日志备份:至关重要,用于 Point-in-Time Recovery。
- 恢复:恢复过程与单实例类似,但 RMAN 会自动协调所有实例,如果节点故障,可以在其他节点上执行恢复操作。
第五部分:RAC 应用开发与连接
1 如何连接 RAC 数据库?
客户端不需要知道集群中有多少个节点,它只需要连接到 SCAN 名称,SCAN 名称会解析到集群的 SCAN VIP,然后由集群的负载均衡器决定将连接路由到哪个节点的 VIP 上。
客户端的 tnsnames.ora 文件可以非常简单:
RAC_SCAN =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = your_scan_name)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = your_service_name) // RAC
)
)
2 TAF (Transparent Application Failover)
TAF 是 RAC 最重要的客户端特性之一,它允许在数据库会话期间,如果当前连接的实例发生故障,客户端会话(包括正在进行的事务)会自动、透明地重新连接到集群中的另一个健康实例。
- 配置方式:在
tnsnames.ora中指定FAILOVER_MODE。RAC_TAF = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_scan_name)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = your_service_name) (SERVER = DEDICATED) (FAILOVER_MODE = (TYPE = SELECT) // 或 BASIC (METHOD = BASIC) (RETRIES = 180) (DELAY = 5) ) ) )TYPE=SELECT:TAF 不仅会重连,还会尝试重新执行之前的查询,保持游标状态。TYPE=BASIC:只重连,不重执行查询。
3 FCF (Fast Connection Failover)
FCF 是针对连接池(如 UCP, WebLogic)的高级故障转移机制,当检测到实例故障时,连接池会立即将所有到该实例的连接标记为无效,并在后台异步地重新建立新连接,对应用几乎无影响。
4 开发最佳实践
- 不要硬编码节点名或 IP:始终使用 SCAN 名称和 Service Name。
- 使用连接池:应用服务器应使用连接池,并启用 FCF。
- 编写无状态应用:尽量避免在会话中存储大量状态信息,以便在故障转移后能更快地恢复。
- 处理 TAF 事件:如果应用使用
TYPE=SELECT的 TAF,需要准备好处理ROWID变化或游标失效的异常。
第六部分:常见问题与故障排查
1 常见问题列表
- 节点无法加入集群:通常是网络配置(
/etc/hosts)、防火墙、时间不同步或权限问题。 - VIP 漂移失败:可能是网卡配置、
udev规则或网络问题导致 VIP 无法在备用节点上启动。 - 实例启动失败:可能是 ASM 磁盘组未启动、参数文件问题或存储问题。
- 性能问题:可能是私有网络带宽不足、缓存融合效率低、SQL 语句本身的问题。
2 关键日志文件
- Grid Infrastructure 日志:
$GRID_HOME/log/crsd/:CRS 守护进程日志。evmd/:事件管理器日志。agent/:管理代理日志。racg/:RAC 守护进程日志。
- 数据库日志:
$ORACLE_BASE/diag/rdbms/<DB_UNIQUE_NAME>/<INSTANCE_NAME>/trace/alert_<instance_name>.log:实例的警报日志,最重要的诊断信息来源。
- ASM 日志:
$GRID_HOME/log/asm/
3 诊断思路
- 观察现象:哪个节点/实例/服务出问题了?
- 检查集群状态:
crsctl status resource -t,看资源状态。 - 检查实例状态:
sqlplus连接实例,看是否能正常操作。 - 检查日志:根据时间戳,查看相关的警报日志和 CRS 日志,寻找
ORA-错误信息。 - 检查网络:
ping,ssh,nslookup等。 - 检查存储:
asmcmd查看 ASM 磁盘组状态。 - 逐步排除:从最可能的原因开始排查。
第七部分:学习资源与进阶
1 官方文档
- Oracle Database Installation Guide:安装步骤的权威来源。
- Oracle Real Application Clusters Administration and Deployment Guide:RAC 管理的“圣经”。
- My Oracle Support (MOS):遇到问题时,首先搜索 MOS,里面有大量的文档、补丁和 Bug 说明。
2 书籍推荐
- 《Oracle RAC Hands-On》 by Mike Ault and Rampant TechPress:非常经典的实战书籍。
- 《Oracle Real Application Clusters 12c Administration Handbook》 by Oracle Press:官方出版的权威手册。
3 实验环境搭建建议
- 使用虚拟机:Oracle VM VirtualBox 或 VMware Workstation 是搭建本地 RAC 实验环境的绝佳选择。
- 使用共享磁盘:在虚拟机中配置共享磁盘(VirtualBox 的 VMDK 或 VMware 的 VMDK/RDM)来模拟共享存储。
- 简化网络:在虚拟机中多创建几块虚拟网卡,模拟公共和私有网络。
- 从 2 节点开始:2 节点 RAC 已经能让你掌握所有核心概念和操作。
学习 Oracle RAC 是一个系统工程,它不仅要求你懂 Oracle 数据库,还要求你懂操作系统、网络和存储,本教程为你提供了一个从入门到实践的路线图,最好的学习方法就是 动手实践,搭建一个自己的 RAC 环境,去安装、配置、管理,甚至人为地制造一些故障,然后去排查和解决,祝你学习顺利!
