当前位置: 首页 > news >正文

Oracle 数据库启动失败:ORA-29701、ORA-01565、ORA-17503 故障处理记录_20260429

数据库服务器重启后,Oracle Grid/HAS 未正常恢复,ASM 磁盘组未挂载,导致数据库未能自动启动。

一、故障背景

Oracle 服务器重启,数据库无法正常启动。登录服务器后,首先检查文件系统空间,发现磁盘空间正常,并没有出现根目录、Oracle 目录或备份目录空间满的情况。

df -h

结果显示/oracle/backup等目录空间都比较充足,因此基本可以排除磁盘空间不足导致数据库无法启动的问题。

随后切换到 Oracle 用户,检查监听状态:

su - oracle lsnrctl status

返回如下错误:

TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error TNS-00511: No listener Linux Error: 111: Connection refused

初看像是监听器没有启动,但继续检查数据库实例时,发现问题并不只是监听器。

执行:

sqlplus / as sysdba

连接后提示:

Connected to an idle instance.

说明数据库实例当前并未启动。

尝试启动数据库:

startup

结果报错:

ORA-01078: failure in processing system parameters ORA-01565: error in identifying file '+SYSTEM/mesdb/spfilemesdb.ora' ORA-17503: ksfdopn:2 Failed to open file +SYSTEM/mesdb/spfilemesdb.ora ORA-29701: unable to connect to Cluster Synchronization Service

二、故障现象分析

这几个错误信息很关键。

1. ORA-01078

ORA-01078: failure in processing system parameters

表示数据库在读取启动参数时失败。

2. ORA-01565 和 ORA-17503

ORA-01565: error in identifying file '+SYSTEM/mesdb/spfilemesdb.ora' ORA-17503: ksfdopn:2 Failed to open file +SYSTEM/mesdb/spfilemesdb.ora

说明数据库启动时需要读取 spfile 文件:

+SYSTEM/mesdb/spfilemesdb.ora

但是这个文件不是放在普通文件系统中,而是放在 ASM 磁盘组+SYSTEM里面。

也就是说,数据库启动前,ASM 必须先正常运行,并且SYSTEM磁盘组必须已经挂载。

3. ORA-29701

ORA-29701: unable to connect to Cluster Synchronization Service

这个错误才是关键。

它说明数据库无法连接到 CSS,也就是 Cluster Synchronization Service。

在使用 ASM 的环境中,CSS 是基础组件。CSS 没起来,ASM 就无法正常工作;ASM 没起来,磁盘组就无法挂载;磁盘组无法挂载,数据库自然无法读取放在 ASM 中的 spfile。

所以这次问题的真正链路是:

HAS / Grid Infrastructure 未正常启动 ↓ CSSD 未正常运行 ↓ ASM 未启动 ↓ +SYSTEM 磁盘组未挂载 ↓ 数据库无法读取 spfile ↓ 数据库启动失败

因此,最开始的TNS:no listener只是表象,不是根因。

真正的问题不是监听,也不是数据库文件损坏,而是Grid / HAS / ASM 没有正常启动


三、排查过程

首先查看相关进程:

ps -ef | egrep "ohasd|ocssd|crsd|evmd|asm_pmon|pmon|tnslsnr" | grep -v grep

最初只看到:

/bin/sh /etc/init.d/init.ohasd run

但没有看到以下关键进程:

ohasd.bin ocssd.bin asm_pmon_+ASM tnslsnr ora_pmon_mesdb

这说明 Oracle Restart / Grid 相关组件并没有正常起来。

继续查看 Grid Home:

cat /etc/oracle/olr.loc

返回:

olrconfig_loc=/oracle/app/11.2.0/grid/cdata/localhost/rezha174.olr crs_home=/oracle/app/11.2.0/grid

由此确认 Grid Home 为:

/oracle/app/11.2.0/grid

检查 HAS 状态:

/oracle/app/11.2.0/grid/bin/crsctl check has

返回:

CRS-4639: Could not contact Oracle High Availability Services

说明 HAS 没有正常启动。


四、故障处理过程[重点]

使用 root 用户启动 HAS:

/oracle/app/11.2.0/grid/bin/crsctl start has

启动后再次检查:

/oracle/app/11.2.0/grid/bin/crsctl check has

返回:

CRS-4638: Oracle High Availability Services is online

说明 HAS 已经恢复正常。

继续检查资源状态:

/oracle/app/11.2.0/grid/bin/crsctl stat res -t

刚开始看到 ASM 还处于启动过程中:

ora.asm ONLINE OFFLINE Instance Shutdown, STARTING

此时说明 HAS 和 CSSD 已经起来,但 ASM 还没有完全启动成功,数据库仍然不能启动。

随后继续观察,ASM 进程已经出现:

ps -ef | egrep "asm_pmon|asm_smon|asm_lgwr|ohasd|ocssd|evmd|tnslsnr" | grep -v grep

可以看到:

asm_pmon_+ASM asm_lgwr_+ASM asm_smon_+ASM

说明 ASM 已经正常启动。

最终再次查看资源状态:

/oracle/app/11.2.0/grid/bin/crsctl stat res -t

状态恢复正常:

ora.DATA.dg ONLINE ONLINE ora.DGGRID01.dg ONLINE ONLINE ora.LISTENER.lsnr ONLINE ONLINE ora.RECOVERY.dg ONLINE ONLINE ora.SYSTEM.dg ONLINE ONLINE ora.asm ONLINE ONLINE Started ora.cssd ONLINE ONLINE ora.evmd ONLINE ONLINE ora.mesdb.db ONLINE ONLINE Open

再使用 grid 用户检查 ASM 磁盘组:

su - grid export ORACLE_HOME=/oracle/app/11.2.0/grid export PATH=$ORACLE_HOME/bin:$PATH asmcmd lsdg

结果显示所有磁盘组均已挂载:

DATA MOUNTED DGGRID01 MOUNTED RECOVERY MOUNTED SYSTEM MOUNTED

其中SYSTEM磁盘组已经挂载,数据库也就可以读取:

+SYSTEM/mesdb/spfilemesdb.ora

最终数据库资源显示:

ora.mesdb.db ONLINE ONLINE Open

说明数据库已经正常打开。


五、为什么一开始无法启动数据库?

这次数据库一开始启动失败,根本原因是:

Oracle High Availability Services 没有正常启动,导致 CSSD、ASM 和 ASM 磁盘组都没有正常工作。

而数据库的 spfile 文件存放在 ASM 磁盘组中:

+SYSTEM/mesdb/spfilemesdb.ora

当 ASM 没起来时,数据库无法读取 spfile,所以执行startup就会报:

ORA-01078 ORA-01565 ORA-17503 ORA-29701

所以本次故障不是普通的数据库启动问题,也不是简单的监听器问题。

正确理解应该是:

监听没起来,是现象; 数据库 idle,是结果; ASM 没起来,是直接原因; HAS/CSSD 没起来,是根因。

六、正确恢复顺序

这类使用 ASM 的 Oracle 数据库,不建议一上来就直接执行:

startup

更推荐按照下面顺序恢复。

1. root 用户启动 HAS

/oracle/app/11.2.0/grid/bin/crsctl start has

2. 检查 HAS 状态

/oracle/app/11.2.0/grid/bin/crsctl check has

3. 检查资源状态

/oracle/app/11.2.0/grid/bin/crsctl stat res -t

重点关注:

ora.cssd ora.asm ora.SYSTEM.dg ora.DATA.dg ora.LISTENER.lsnr ora.mesdb.db

4. 如果数据库未自动启动,使用 srvctl 启动数据库

su - oracle srvctl status database -d mesdb srvctl start database -d mesdb srvctl status database -d mesdb

5. 最后进入数据库验证

sqlplus / as sysdba

执行:

select instance_name,status from v$instance; select name,open_mode,database_role from v$database;

七、经验总结

本次故障处理的关键点是:不要被监听器错误误导。

虽然一开始看到的是:

TNS-12541: TNS:no listener

但真正导致数据库启动失败的原因,是 Grid / HAS / ASM 没有正常起来。

对于使用 ASM 的 Oracle 数据库,启动顺序应该是:

HAS / Grid ↓ CSSD ↓ ASM ↓ ASM 磁盘组 ↓ Listener ↓ Database

如果跳过前面的基础组件,直接进入数据库执行startup,数据库就无法访问 ASM 里的 spfile、控制文件、数据文件等资源,自然会启动失败。

本次处理完成后,HAS、CSSD、ASM、磁盘组、监听和数据库均恢复正常,数据库状态为Open


八、最终结论

本次 Oracle 数据库无法启动的根因是:

Oracle High Availability Services 未正常运行,导致 CSSD、ASM 及 ASM 磁盘组未正常启动,数据库无法访问 ASM 中的 spfile 文件,从而启动失败。

处理方式是:

使用 root 用户启动 HAS,使 CSSD、ASM 和磁盘组恢复 online,随后数据库资源自动恢复 open。

核心恢复命令如下:

/oracle/app/11.2.0/grid/bin/crsctl start has /oracle/app/11.2.0/grid/bin/crsctl check has /oracle/app/11.2.0/grid/bin/crsctl stat res -t

如果数据库未自动启动,再执行:

su - oracle srvctl start database -d mesdb

一句话总结:

这不是监听器单点故障,也不是数据库文件损坏,而是 Grid/ASM 基础组件没起来。先救 Grid,再救 ASM,最后数据库自然就能打开。

http://www.jsqmd.com/news/723788/

相关文章:

  • 睡眠编译优化:软件测试从业者的专业效能提升指南
  • 跟着 MDN 学 HTML day_1:(全套原生Input+表单结构拆解)
  • 前端性能优化:JavaScript 性能优化详解
  • 房产看房记录口碑推荐|经筛选优质实用选择整理分享
  • baidupankey:极速一键智能获取百度网盘提取码的全自动解决方案
  • ARM PMSEVFR_EL1寄存器解析与性能监控实践
  • 【技术应用】PLA技术“点亮”蛋白互作,破解动脉粥样硬化新机制!
  • 2026年全国靠谱的网球场地租赁公司推荐,梅江南网球俱乐部上榜 - 工业品网
  • 2026最新鲁大师 6.2最终绿化版,去除无用功能和广告
  • 3步快速上手:用哔哩下载姬downkyi轻松搞定B站视频下载
  • 数据光合作用:软件测试从业者的专业视角
  • 【C++27安全红线】:3类已被标记为deprecated的异常传播模式(含std::exception_ptr隐式转换),9月30日前必须迁移!
  • Kubernetes集群基石:保姆级Containerd配置与CNI网络插件集成指南(含一键脚本)
  • 声定向系统改良设计——大功率集成化声频定向扬声器系统
  • 运维必看:如何用Java Oshi监控Linux服务器性能并接入Prometheus+Grafana
  • SeuratWrappers终极指南:如何在单细胞分析中轻松使用社区扩展工具
  • FDA新政落地,先觉生物类器官引领研发新变革
  • Go语言轻量级HTTP路由库Oatmeal:高性能微服务与API开发实践
  • 秘语盾技术博客:Ledger 设备恢复出厂设置教程
  • 分析2026年杭州靠谱美术集训推荐学校,哪家性价比高 - 工业品网
  • 泛微OA中如何实现,将选中的明细行数据内容,传送给其他系统或是单独存放
  • ADLINK Alder Lake-H COM模块技术解析与工业应用
  • 焦虑冷核聚变:软件测试从业者的技术焦虑与突破之道
  • 零基础药师用药指导入门指南,新手避坑看完就能直接上手
  • ARM异常处理与SMC指令陷阱机制详解
  • 探讨如何与讯灵AI的销售团队取得联系,开启企业数字化转型之旅 - 工业设备
  • 还在为截不全长网页而烦恼?轻松掌握完整网页截图的终极解决方案
  • 用 OpenCV 实现云顶之弈装备识别:从英雄框到装备 ID 的工程化拆解
  • 刚刚设置好我的jetson orin nano 4G上的yolo26 onnx
  • Java虚拟机精讲【2.0】