Oracle Eygle 数据库启动原理深度

Oracle Eygle 数据库启动原理深度

来源:盖国强 (Eygle) / eygle.com 适用版本:Oracle Database 全版本 文档版本:v1.0 / 2026-07-22


1. 概述

Eygle 对 Oracle 启动流程有深入讲解[1]。

详细见:Oracle 启动流程详解Oracle 数据库启动关闭流程详解


2. 启动阶段

2.1 nomount

- 读参数文件
- 分配 SGA
- 启动后台进程
- 实例启动

2.2 mount

- 读控制文件
- 关联实例与数据库
- 数据文件/Redo 名字已知
- 但未打开

2.3 open

- 打开数据文件
- 打开 Redo Log
- 检查一致性
- 恢复(如需)
- 可访问

3. nomount 阶段

3.1 参数文件

- SPFILE(二进制)
- PFILE(文本)
- 顺序:SPFILE > PFILE

3.2 启动

sqlplus / as sysdba
STARTUP NOMOUNT;

3.3 SGA 分配

- Buffer Cache
- Shared Pool
- Redo Buffer
- Large Pool
- Java Pool

3.4 后台进程

- PMON
- SMON
- DBWn
- LGWR
- CKPT
- ARCn

3.5 状态

SELECT status FROM v$instance;
-- STARTED

4. mount 阶段

4.1 控制文件

- 读取 control_files 参数
- 定位控制文件
- 加载控制文件

4.2 启动

ALTER DATABASE MOUNT;

4.3 信息

- 数据库名
- 数据文件位置
- Redo Log 位置
- 归档模式
- 检查点

4.4 状态

SELECT status FROM v$instance;
-- MOUNTED

5. open 阶段

5.1 打开文件

- 数据文件
- Redo Log
- Temp 文件

5.2 一致性检查

- 检查点 SCN
- 数据文件 SCN
- Redo SCN
- 如不一致 → 实例恢复

5.3 实例恢复

- 前滚(Redo)
- 回滚(Undo)
- 打开

5.4 启动

ALTER DATABASE OPEN;

5.5 状态

SELECT status FROM v$instance;
-- OPEN

6. Eygle 深度分析

6.1 参数文件丢失

- PFILE 重建
- 或 SPFILE 备份
- nomount 失败

6.2 控制文件丢失

- mount 失败
- 重建控制文件
- 或恢复备份

6.3 数据文件丢失

- open 失败
- 恢复数据文件
- 或 offline

6.4 Redo 丢失

- open 失败
- 不完全恢复
- RESETLOGS

7. 启动故障案例

7.1 ORA-01078

- 参数文件问题
- 检查路径
- 重建

7.2 ORA-00205

- 控制文件问题
- 检查路径
- 重建

7.3 ORA-01157

- 数据文件问题
- 检查文件
- 恢复

7.4 ORA-01113

- 需要恢复
- RECOVER DATABASE
- OPEN

8. 启动命令

8.1 完整启动

STARTUP;
-- 等同 STARTUP OPEN

8.2 分步

STARTUP NOMOUNT;
ALTER DATABASE MOUNT;
ALTER DATABASE OPEN;

8.3 强制

STARTUP FORCE;
-- ABORT + STARTUP

8.4 限制

STARTUP RESTRICT;
-- 仅 DBA

8.5 特殊

STARTUP MOUNT;
STARTUP OPEN READ ONLY;
STARTUP OPEN RESETLOGS;

9. 关闭流程

9.1 SHUTDOWN NORMAL

- 等待会话退出
- 干净
- 慢

9.2 SHUTDOWN IMMEDIATE

- 回滚活动事务
- 关闭
- 推荐

9.3 SHUTDOWN TRANSACTIONAL

- 等待事务完成
- 中等

9.4 SHUTDOWN ABORT

- 立即终止
- 不回滚
- 下次启动恢复
- 慎用

10. Eygle 诊断建议

10.1 日志

- alert log
- trace 文件
- 启动日志

10.2 顺序

- nomount 问题:参数
- mount 问题:控制文件
- open 问题:数据文件/Redo

10.3 工具

- oradism
- sysresv
- ipcs

11. 实战案例

11.1 参数文件重建

1. 找 PFILE 备份
2. 或 SPFILE 备份
3. 重建 PFILE
4. 启动

11.2 控制文件重建

ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
-- 编辑 trace
-- CREATE CONTROLFILE...

11.3 不完全恢复

1. mount
2. RESTORE DATABASE
3. RECOVER DATABASE UNTIL TIME '...'
4. ALTER DATABASE OPEN RESETLOGS

12. 最佳实践

  1. 参数文件:备份
  2. 控制文件:多路
  3. alert log:监控
  4. 分步启动:诊断
  5. 日志:检查
  6. 测试:故障
  7. 文档:配置
  8. 备份:定期
  9. 监控:状态
  10. 原理:理解

13. 参考资料

[1] Eygle, “Oracle 数据库启动原理”, https://www.eygle.com [2] 盖国强, 《深入解析 Oracle》