如果存储老旧要淘汰,新存储划了盘过来,怎么平移过去的呢?
假设新存储划了 3 块 LUN 过来,建立了一个新磁盘组叫 +NEWOCR。
遇到这种绝境,平时如果没有深刻的底层认知和反复的实战演练,当场就得蒙。
今天,我们将以 Oracle 19c RAC 为例,彻底盘透 OCR磁盘组。不仅告诉你它里面到底装了什么、怎么规划、日常怎么维护;
最硬核的是,我还会手把手带大家模拟如何在线迁移/替换 OCR 磁盘组,并给出完整闭环的恢复方案。
首先给大家科普一下Oracle RAC OCR的概念和原理:
一、 核心概念
在动手之前,不把理论摸透操作起来心里没有底,因此我们先来揭开OCR磁盘组的神秘面纱。RAC集群搭建初期,
我们通常会专门划分一个或几个小容量的 ASM 磁盘组(比如叫 +CRS 或 +OCR),很多朋友不理解,
这个磁盘组里到底放了哪些什么数据,让它地位如此高,如此神秘?
[思考一下:为什么不把 OCR 和数据文件放到同一个大磁盘组里?]
提示:1. 不能把鸡蛋放在同一个篮子里,一旦一个磁盘组损坏,则全部损坏。
2. 核心元数据需要更高的冗余度策略和更快的IO响应,混在一起一旦大规模IO拥塞, 容易导致节点被踢出集群。
在 Oracle 19c 架构中,OCR 的磁盘组通常存放了以下几个核心组件:
1. OCR (Oracle Cluster Registry) - 集群的“大脑”
OCR 类似 Windows 系统的注册表。它是一个以树形结构组织的文件,存储了整个集群所有的元数据信息。
存储内容:
集群节点列表、数据库实例到节点的映射关系、监听器(Listener)配置、VIP配置、SCAN IP信息、应用资源组的信息
以及依赖关系等。
重要性: 没有它,Clusterware 根本不知道集群里跑了哪些服务,服务该由谁来接管。
2. Voting Disk (表决盘/仲裁盘) - 集群的“心脏”
如果在高可用的架构中出现了集群节点间网络通信中断,也就是传说中的“脑裂” Split-Brain,该听谁的?
这时候就需要 Voting Disk。
作用: 每个节点会定期(秒级)向 Voting Disk 发送 “心跳”(Heartbeat)。当网络心跳丢失时,节点去查看大家
在 Voting Disk 的签到记录,通过一套算法选出应该存活的节点组合(通常是节点数多的一半留下),
并把处于隔离状态的少数派强行踢出集群(Node Eviction/Reboot)。
重要性: 它是保证数据一致性、防止多节点同时写坏同一个存储块的最关键防线。
3. Oracle 19C RAC新特性:ASM SPFILE 和 Password File
在 Oracle 12cR2(包含19c)之后,ASM 的架构大放异彩。ASM 实例自身的启动参数文件(SPFILE)和密码文件,
通常也是保存在这个 OCR 磁盘组中。不仅如此,Grid Infrastructure Management Repository (GIMR)
有时也会和 OCR 放在一起,不过在 19c Standalone 模式下也可以选配。
4. 怎么规划和设计这个磁盘组?
很多新手图省事,或者受限于存储环境,把 OCR 磁盘组设置为 External(外部冗余)。这是绝对是不运行,绝对是大忌!
一旦那块盘坏了或者有坏块,整个集群就完蛋了。
生产环境的黄金准则如下:
容量规划:通常不需要太大。OCR 和表决盘本身只占几百兆,但考虑到 ASM spfile 以及未来可能存放 GIMR,
建议分配 30GB - 50GB 的空间即可。
冗余度选择(高度强调):
强烈建议使用 Normal Redundancy(常规冗余,至少需要 3 块磁盘)或者 High Redundancy
(高冗余,至少需要 5 块磁盘)。 这样在坏掉 1 块或 2 块物理盘时,集群照样丝滑运行,甚至业务层都感受不到。
性能保证: 因为 Voting Disk 需要满足极高的 I/O 时延要求,条件允许的情况下,OCR 磁盘组尽量分配 全闪存(SSD)LUN。
命名规范: 推荐命名为 +CRS 或 +OCR 或 +GRID,以示区分。
二、 案例实战操作:
OCR磁盘组日常巡检与管理
1. 怎么查看 OCR 和 Voting Disk 的状态?
在任意一个集群健康的节点上,以 grid 用户登录(注意环境变量配置正确):
# 查看 OCR 的状态和位置
ocrcheck
# 输出:
[grid@zlf-lis-uat-c1 ~]$ ocrcheck Status of Oracle Cluster Registry is as follows : Version : 4 Total space (kbytes) : 491684 Used space (kbytes) : 84592 Available space (kbytes) : 407092 ID : 1853856809 Device/File Name : +OCRVOTE Device/File integrity check succeeded Device/File not configured Device/File not configured Device/File not configured Device/File not configured Cluster registry integrity check succeeded Logical corruption check bypassed due to non-privileged user
# 查看 Voting Disk 的情况
crsctl query css votedisk
[grid@zlf-lis-uat-c1 ~]$ crsctl query css votedisk ## STATE File Universal Id File Name Disk group -- ----- ----------------- --------- --------- 1. ONLINE 048771fc9c7b4fb7bf2437e5afcac2c5 (/dev/asmdisks/su003_lvvote) [OCRVOTE] 2. ONLINE 5f9c48f33f1e4ff0bff83e1f794a4cff (/dev/asmdisks/su004_lvvote) [OCRVOTE] 3. ONLINE 50c6f346d64b4fe4bf6f0dd3a9a9985d (/dev/asmdisks/su005_lvvote) [OCRVOTE] Located 3 voting disk(s). [grid@zlf-lis-uat-c1 ~]$
2. 备份 OCR
记住一个铁律:给你的数据买份保险!Oracle 会每 4小时、每天、每周 自动备份 OCR,
但当你要做重大升级或维护前,别忘了手动备一份。
# 查看自动备份的位置和时间
ocrconfig -showbackup
## 节点1结果
[grid@zlf-lis-uat-c1 ~]$ ocrconfig -showbackup zlf-lis-uat-c1 2026/09/07 11:52:54 +ocrvote:/dbcluster/OCRBACKUP/backup00.ocr.263.1243338773 760403972 zlf-lis-uat-c1 2026/09/07 07:52:53 +ocrvote:/dbcluster/OCRBACKUP/backup01.ocr.265.1243324373 760403972 zlf-lis-uat-c1 2026/09/07 03:52:52 +ocrvote:/dbcluster/OCRBACKUP/backup02.ocr.258.1243309971 760403972 zlf-lis-uat-c1 2026/09/06 07:52:45 +ocrvote:/dbcluster/OCRBACKUP/day.ocr.262.1243237967 760403972 zlf-lis-uat-c1 2026/08/26 23:51:28 +ocrvote:/dbcluster/OCRBACKUP/week.ocr.260.1242345089 760403972 zlf-lis-uat-c1 2025/11/20 15:06:25 +ocrvote:/dbcluster/OCRBACKUP/backup_20251120_150625.ocr.261.1217689587 760403972 [grid@zlf-lis-uat-c1 ~]$
# 手动发起一次 OCR 备份 (root用户执行)
[root@zlf-lis-uat-c1 ~] ocrconfig -manualbackup zlf-lis-uat-c1 2026/09/09 15:46:23 +ocrvote:/dbcluster/OCRBACKUP/backup_20260907_154622.ocr.271.1224248966 760509983
# 把 OCR 导出为一个单文件,拷贝到/u01或外部存储
[root@zlf-lis-uat-c1 ~] ocrconfig -export /u01/ocr_export_backup_`date +%Y%m%d`.dmp PROT-58: successfully exported the Oracle Cluster Registry contents to file '/u01/ocr_export_backup_20260907.dmp'
OCR 虽然会自动备份,但默认备份在 $ORACLE_BASE/crsdata/<hostname>/ocr 下(也就是本地盘)。你必须确保这些备份定期被捞到其他安全的灾备服务器存放。
[grid@zlf-lis-uat-c1 ~]$ ls -l $ORACLE_BASE/crsdata/`hostname`/ocr total 7620 -rw------- 1 root root 2600960 Sep 7 11:52 backup00.ocr -rw------- 1 root root 2600960 Sep 6 07:52 day.ocr -rw------- 1 root root 2600960 Sep 7 07:52 day_.ocr [grid@zlf-lis-uat-c1 ~]$
3. 如何在线迁移/替换 OCR 磁盘组?
现在开始我们今天实验, 如果存储老旧要淘汰,新存储划了盘过来,怎么平移过去的呢?
假设新存储划了 3 块 LUN 过来,建立了一个新磁盘组叫 +NEWOCR。
注意:
# 以下操作在root用户下执行 source /home/grid/.bash_profile
# 步骤1:将 OCR 镜像添加到新的磁盘组
ocrconfig -add +NEWCRS
# 步骤2:检查 OCR 状态,确认新旧都在
ocrcheck
[grid@zlf-lis-uat-c1 ~]$ ocrcheck Status of Oracle Cluster Registry is as follows : Version : 4 Total space (kbytes) : 491684 Used space (kbytes) : 84592 Available space (kbytes) : 407092 ID : 1853856809 Device/File Name : +OCRVOTE Device/File integrity check succeeded Device/File Name : +NEWOCR Device/File integrity check succeeded Device/File not configured Device/File not configured Device/File not configured Device/File not configured Cluster registry integrity check succeeded Logical corruption check bypassed due to non-privileged user
# 步骤3:将 OCR 从旧磁盘组剔除(慎重)
ocrconfig -delete +OCR
# 步骤4:迁移 Voting Disk 到新磁盘组
crsctl replace votedisk +NEWOCR
就这么简单,OCR磁盘在线全部在线迁移/替换 OCR 磁盘组完成。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12798004/viewspace-3181741/ ,如需转载,请注明出处,否则将追究法律责任。