liuziyi

liuziyi

Oracle 突然宕机的处理思路及命令

说明:本文按"分析排查思路 + 可用的检查入口与资源"组织,属于排查方向与资源清单,不含具体处置方案;实际处置需结合现场日志证据判定后再定。


一、问题理解与分析方向

Oracle"突然宕机"在现象上表现为实例不可用、连接全部中断,但底层成因分属两个完全不同的层面,排查第一步必须先区分,否则方向会走偏:

层面 本质 判断依据
实例崩溃 / 实例驱逐 数据库实例被终止,节点本身还在 数据库 alert 日志中有明确提示
节点驱逐 / 节点重启 集群层面把整台节点踢出或重启 操作系统日志有 reboot 记录,CRS alert(ocssd.log)有驱逐记录

关键区分点(这是最容易误判的地方):

  • 实例驱逐:数据库 alert 日志会出现 Instance terminated by LMD0, pid = ... 或 Instance terminated by USER, pid = ...,说明实例被终止。
  • 节点驱逐:OS 日志可观察到重启记录(如 syslogd ... restart),CRS alert 日志(ocssd.log)中出现 CRS-1610: node ... at 90% heartbeat fatal, eviction in ... seconds、CRS-1607: CSSD evicting node ...,说明集群服务因心跳超时等原因驱逐了节点。

分析方向可归为四条主线:

  1. 确认是实例级还是节点级故障(决定后续查数据库日志还是集群/OS 日志);
  2. 确认是否有实例恢复发生及其完成情况(决定是否需要人工干预);
  3. 确认触发者是内部错误(ORA-00600 等)、后台进程异常终止、资源耗尽,还是集群心跳/时间同步问题;
  4. 确认是否为 RAC 环境、是否伴随节点间通信异常(IPC/CF enqueue/LMS/LMON 相关)。

二、建议检查的数据库对象与入口

2.1 数据库诊断日志入口(ADR)

入口 用途 关联说明
V$DIAG_INFO 定位 alert 日志与 trace 文件路径 取 Diag Trace、Default Trace File、Diag Alert 的 VALUE 即为日志目录/文件
alert 日志 实例终止时间点与错误码的第一现场 查 Instance terminated by、ORA- 错误、SMON: Performing instance recovery 等关键字
后台进程 trace 崩溃进程的调用栈(call stack) 注意:存在"后台进程异常死亡但未生成 trace"的情形,需结合系统状态判断

定位日志路径(已核对视图与字段在 Oracle 中存在):

SELECT name, value FROM v$diag_info
 WHERE name IN ('Diag Trace','Default Trace File','Diag Alert');

使用 ADRCI 查看(无需进入具体目录):

adrci
adrci> show homes
adrci> show alert -tail 200          # 查看 alert 日志尾部
adrci> show problem                  # 查看 ADR 汇总的问题
adrci> show incident                 # 查看事件(incident)列表
adrci> show tracefile                # 查看 trace 文件清单

2.2 集群与操作系统入口(RAC / 单机通用)

入口 用途
crsctl stat res -t 查看集群资源与各节点实例/监听状态
crsctl stat res -t -init 查看集群初始资源状态
CRS alert 日志 / ocssd.log 查看节点驱逐(CRS-1610、CRS-1607)与 CSS 心跳异常
srvctl status database -d <db> 查看数据库各实例运行状态
OS 日志(/var/log/messages、dmesg、journalctl) 查看 reboot、soft lockup、NMI watchdog、内存/硬件报错
时间同步服务状态 核对 NTP/chrony 是否发生时间回退(OPROCD 时间回退会触发驱逐)

常用命令示例:

# 集群资源与实例状态
crsctl stat res -t
srvctl status database -d <db_name>

# 节点是否发生过重启 / 内核层异常
journalctl -b -1 | grep -iE "reboot|panic|lockup|oom"
dmesg -T | grep -iE "error|reset|timeout"

# 集群日志(路径随版本不同,通常在 GI_HOME/log/<host> 下)
ls -l $GRID_HOME/log/$(hostname)/cssd/ocssd.log

2.3 需要重点关注的错误码/关键字(用于快速归类)

  • ORA-29740:实例驱逐(Instance eviction);
  • ORA-00484 / ORA-00481 / ORA-27300 / ORA-27302:后台进程异常终止,常伴随 PMON 终止实例;
  • ORA-00600(内部错误)、ORA-07445:代码缺陷/内存损坏/硬件类问题;
  • ORA-27504 / ORA-00603 / ORA-27506:网络接口/节点间通信异常;
  • ORA-15064 / ASM 实例终止:ASM 侧故障连带数据库实例崩溃;
  • SMON: Performing instance recovery:确认已发生实例恢复。

三、相关机制与背景知识

1)节点驱逐机制
Oracle Clusterware 通过 CSS 心跳(网络心跳 + 磁盘心跳)与 OPROCD 监控进程维持集群一致性;一旦心跳超时或时间回退,会执行节点驱逐(fencing),目的是防止脑裂、保证数据一致性。触发条件包括:CSS 心跳丢失、磁盘 I/O 挂起、NTP 时间回退。

2)实例恢复(Instance Recovery)机制
实例异常终止后,由 SMON 执行实例恢复:前滚(Roll forward)已提交事务 → 打开数据库 → 回滚(Roll back)未提交事务。未提交事务在故障后被自动撤销,不会出现"部分提交",这是崩溃一致性的基本保证。alert 日志中会有典型阶段输出(如 SMON: Instance crash detected、SMON: Performing instance recovery、SMON: Rolling forward transaction logs、SMON: Database opened、SMON: Rolling back uncommitted transactions),可用于确认恢复是否发生、耗时与是否成功。RAC 环境的实例恢复还涉及 LMON 同步、全局资源目录重配置等步骤。恢复时间可由 FAST_START_MTTR_TARGET、redo log 大小等参数影响。

3)RAC 特有的进程与通信链路
LMS(全局缓存服务)、LMON、LMD0 等进程参与实例间通信;CF enqueue 超时、IPC Send timeout、LMS 无法响应 DRM 同步等,都可能由 LMON 终止实例(对应 ORA-29740 等)。实例驱逐与节点驱逐在日志位置和触发原因上存在显著区别,需结合数据库 alert 日志与 CRS/OS 日志分别诊断。


四、可能关联的故障模式

故障模型 关键特征 别名/标识
数据库崩溃 实例异常终止、连接中断,需实例恢复;成因含硬件故障、Oracle bug、OS 异常、磁盘空间耗尽 数据库崩溃(严重级别 critical)
数据库实例崩溃 发生无法恢复的内部错误(如访问非法内存地址);OS 生成核心转储 oracle_instance_crash
节点驱逐故障 CSS 心跳丢失/磁盘 I/O 挂起/NTP 时间回退;alert.log 出现 CSSD eviction、节点重启、ORA-29740 节点驱逐故障
实例驱逐 ORA-29740 网络心跳超时或集群软件异常导致节点被踢出,实例终止并触发集群重配置 实例驱逐 ORA-29740
LMON 进程终止导致 PMON 终止实例 LMON 报 ORA-00600 后 PMON 终止实例,LMS/LMD 报 ORA-00481 LMON 进程终止导致 PMON 终止实例
RAC 实例宕机后应用无序切换引发 DRM 争用 实例宕机后应用未使用 SERVICE_NAME 而经 IP 直连,无序转移触发 DRM 严重争用 —
mapid 溢出导致 ASM 实例终止并引发 RAC 实例崩溃 mapid 达上限溢出,触发 ORA-600 [kffilCreate01]、ORA-15064,ASMB 终止 ASM 实例 —
Avahi-daemon 导致数据库实例崩溃 mDNS 自动重分配网络接口 IP,Oracle 使用的 IP 被撤销,alert 出现 ORA-27504、ORA-00603 —
热备份过程中实例崩溃导致的数据文件不一致 热备份模式实例崩溃,文件头 SCN 与数据块 SCN 不一致,文件处于"模糊"状态 —

posted on 2026-10-08 11:42  刘子毅  阅读(4)  评论(0)    收藏  举报

导航