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. 最佳实践
- 参数文件:备份
- 控制文件:多路
- alert log:监控
- 分步启动:诊断
- 日志:检查
- 测试:故障
- 文档:配置
- 备份:定期
- 监控:状态
- 原理:理解
13. 参考资料
[1] Eygle, “Oracle 数据库启动原理”, https://www.eygle.com [2] 盖国强, 《深入解析 Oracle》