OCR文件损坏的紧急修复

梁铭图 2021-10-09 17:31:00
作者介绍

梁铭图,新炬网络首席架构师。具有十余年数据库运维、数据库设计、数据治理以及系统规划建设经验,拥有Oracle OCM和ACE Director、Togaf企业架构师(鉴定级)、IBM CATE等认证,曾获dbaplus年度MVP、华为云MVP等荣誉,并参与数据资产管理国家标准的编写工作。在数据库运维管理和架构设计、运维体系规划、数据资产管理方面有深入研究。

 

背景

 

OCR文件是存放在共享存储中的,存储了所有与集群,RAC数据库相关的配置信息的一个文件。它就好比Windows的一个注册表(对于windows来说注册表存储的是所有的软件对应用户和相关的配置信息)。

 

OCR文件是存放在共享存储中的,所以在整个集群中每个节点都通过本地的OCR进程去访问OCR缓存在其内存中维护着的一个副本。

 

OCR包含着如下内容:

  • 节点成员信息

  • 数据库实例,节点,以及其他映射关系

  • 资源配置信息

  • ASM信息

  • Oracle集群中相关进程的信息

 

一般的OCR文件,会4小时自动备份一次,可以使用如下方式检查:

 

[grid@orcl1 bin]$ ./ocrconfig -showbackup

 

问题描述

 

某个客户的数据库OCR文件出现损坏,集群重启后出现OCR丢失,导致Oracle集群软件无法正常启动,需要尝试从备份中恢复。

 

问题处理

 

1)查看现象

 

[grid@rac1 ~]$ tail -200f /u01/app/11.2/grid/log/rac1/alertrac1.log

[root@rac1 grid]# crsctl start crs

 

然后发现日志出现以下报错信息:

 

说明集群找不到voting盘文件,ocr记录的是集群配置信息



使用ocrcheck检测报错也无法显示信息:

 

[root@rac1 ~]# ocrcheck

PROT-602: Failed to retrieve data from the cluster registry

PROC-26: Error while accessing the physical storage

 

2)强制停止CRS

 

[root@rac1 ~]# crsctl stop crs –f

[root@rac1 ~]# ps -ef|grep crs

[root@rac1 ~]# ps -ef|grep css

[root@rac1 ~]# ps -ef|grep ohas

[root@rac1 ~]# ps -ef|grep evm

 

确认集群停止成功

 

3)以独占模式启动crs


crsctl start crs -excl –nocrs

CRS-4123: Oracle High Availability Services has been started.
CRS-2673: Attempting to stop 'ora.drivers.acfs' on 'rac1'
CRS-2677: Stop of 'ora.drivers.acfs' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.mdnsd' on 'rac1'
CRS-2676: Start of 'ora.mdnsd' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.gpnpd' on 'rac1'
CRS-2676: Start of 'ora.gpnpd' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.cssdmonitor' on 'rac1'
CRS-2672: Attempting to start 'ora.gipcd' on 'rac1'
CRS-2676: Start of 'ora.cssdmonitor' on 'rac1' succeeded
CRS-2676: Start of 'ora.gipcd' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.cssd' on 'rac1'
CRS-2672: Attempting to start 'ora.diskmon' on 'rac1'
CRS-2676: Start of 'ora.diskmon' on 'rac1' succeeded
CRS-2676: Start of 'ora.cssd' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.drivers.acfs' on 'rac1'
CRS-2679: Attempting to clean 'ora.cluster_interconnect.haip' on 'rac1'
CRS-2672: Attempting to start 'ora.ctssd' on 'rac1'
CRS-2681: Clean of 'ora.cluster_interconnect.haip' on 'rac1' succeeded
CRS-2672: Attempting to start 'ora.cluster_interconnect.haip' on 'rac1'
CRS-2676: Start of 'ora.drivers.acfs' on 'rac1' succeeded


说明:

 

-excl 该参数指定使用独占模式
-nocrs 该参数指定忽略查找crs及voting

 

4)重建ASM spfile


[grid@rac1 ~]$ cat /tmp/asm_pfile.ora
+ASM1.asm_diskgroups='ARCHASMGROUP', 'DATAASMGROUP'#Manual Mount
+ASM2.asm_diskgroups='ARCHASMGROUP', 'DATAASMGROUP'#Manual Mount
*.asm_diskstring='/dev/oracleasm/disks/*'
*.asm_power_limit=1
*.diagnostic_dest='/u01/app/grid'
*.instance_type='asm'
*.large_pool_size=12M
*.remote_login_passwordfile='EXCLUSIVE'


5)启动ASM


[grid@rac1 ~]$ sqlplus / as sysasm
SQL>shutdown immediate

ASM diskgroups dismounted
ASM instance shutdown
SQL> startup pfile='/tmp/asm_pfile.ora';
ASM instance started
SQL> col path for a50
SQL> set linesize 170
SQL> select group_number, disk_number, mount_status, header_status, path from v$asm_disk;


6)创建CRS磁盘组


SQL> create diskgroup CVD normal redundancy disk '/dev/oracleasm/disks/CVD1','/dev/oracleasm/disks/CVD2', '/dev/oracleasm/disks/CVD3' attribute 'au_size'='1M' 'compatible.asm'='11.2.0.0.0', 'compatible.rdbms'='11.2.0.0.0';
create diskgroup CVD normal redundancy disk '/dev/oracleasm/disks/CVD01','/dev/oracleasm/disks/CVD02', '/dev/oracleasm/disks/CVD03'
*
ERROR at line 1:
ORA-15018: diskgroup cannot be created
ORA-15033: disk '/dev/oracleasm/disks/CVD3' belongs to diskgroup "CVD"


这里报错是因为CVD3没清除磁盘头信息

 

7)清除CVD03磁盘头信息

 

[root@rac1 dev]# dd if=/dev/zero of=/dev/oracleasm/disks/CVD03 bs=1024 count=1000
SQL> create diskgroup CVD normal redundancy disk '/dev/oracleasm/disks/CVD01','/dev/oracleasm/disks/CVD02', '/dev/oracleasm/disks/CVD03' attribute 'au_size'='1M' 'compatible.asm'='11.2.0.0.0', 'compatible.rdbms'='11.2.0.0.0';
Diskgroup created.

 

8)创建spfile参数文件


SQL> create spfile='+CVD' from pfile='/tmp/asm_pfile.ora';
File created.

 

9)利用备份恢复OCR


# ocrconfig -restore /u01/app/11.2/grid/cdata/rac/backup00.ocr

恢复voting disk

[root@rac1 ~]# crsctl replace votedisk +CVD
Successful addition of voting disk 429d9c75-6a804fdf-bfeb8f1d-fa8358e9.
Successful addition of voting disk af38c76f-9d474f1f-bfa5c594-64fb0368.
Successful addition of voting disk 185a41992e3d4f57bf86248889c08561.
Successfully replaced voting disk group with +CVD.
CRS-4266: Voting file(s) successfully replaced

10)Ocr状态检测

 

ocrcheck



crsctl query css votedisk



11)重启CRS


[root@rac1 ~]# crsctl stop crs
[root@rac1 ~]# crsctl start crs
[root@rac2 ~]# crsctl start crs
[root@rac1 ~]# crsctl stat res -t

 

小结

 

OCR文件是CRS的主要配置文件之一,损坏会直接导致数据库集群的故障,因此定期检查备份也应列为数据库日常巡检的项目之一。

最新评论
访客 2023年08月20日

230721

访客 2023年08月16日

1、导入Mongo Monitor监控工具表结构(mongo_monitor…

访客 2023年08月04日

上面提到: 在问题描述的架构图中我们可以看到,Click…

访客 2023年07月19日

PMM不香吗?

访客 2023年06月20日

如今看都很棒

活动预告