ITPub博客

首页 > 数据库 > Oracle > 第82期 Oracle 19c RAC集群:如何在线迁移/替换 OCR 磁盘组

第82期 Oracle 19c RAC集群:如何在线迁移/替换 OCR 磁盘组

原创 Oracle 作者:pxbibm 时间:2026-09-07 16:32:44 0 删除 编辑

如果存储老旧要淘汰,新存储划了盘过来,怎么平移过去的呢?

假设新存储划了 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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE。ACOUG核心成员,Oracle用户组年轻专家。熟悉Oracle的体系结构,擅长Oracle数据库架构规划、SQL优化、OWI方面性能的优化。曾服务于航天、航空、机车、大型制造行业数据库的维护以及系统开发工作,开发过基于Oracle数据库的大型ERP系统。
  • 博文量
    345
  • 访问量
    2476000