Oracle 数据库启动与关闭流程
Oracle 数据库启动与关闭流程
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
数据库启动/关闭是 DBA 核心操作[1]:
阶段:
- NOMOUNT
- MOUNT
- OPEN
2. 启动流程
2.1 NOMOUNT
STARTUP NOMOUNT;
操作:
- 读参数文件(SPFILE / PFILE)
- 分配 SGA
- 启动后台进程
- 不读控制文件
用途:
- 创建数据库
- 重建控制文件
- 恢复控制文件
2.2 MOUNT
STARTUP MOUNT;
-- 或
ALTER DATABASE MOUNT;
操作:
- 读控制文件
- 不打开数据文件
- 实例与数据库关联
用途:
- 重命名数据文件
- 归档模式切换
- 完全恢复
- Flashback
2.3 OPEN
ALTER DATABASE OPEN;
-- 或
STARTUP;
操作:
- 打开数据文件
- 打开 Redo Log
- 检查一致性
- 实例恢复(如需要)
3. 启动选项
3.1 完全启动
STARTUP;
-- NOMOUNT → MOUNT → OPEN
3.2 限制模式
STARTUP RESTRICT;
-- 仅 DBA 可连接
3.3 强制启动
STARTUP FORCE;
-- 先 ABORT 再启动
3.4 指定 PFILE
STARTUP PFILE='/u01/init.ora';
3.5 升级模式
STARTUP UPGRADE;
-- 升级使用
4. 关闭流程
4.1 SHUTDOWN NORMAL
SHUTDOWN;
-- 或
SHUTDOWN NORMAL;
流程:
- 不允许新连接
- 等待所有会话断开
- 检查点
- 关闭数据库
4.2 SHUTDOWN TRANSACTIONAL
SHUTDOWN TRANSACTIONAL;
流程:
- 不允许新连接
- 不允许新事务
- 等待事务完成
- 检查点
- 关闭
4.3 SHUTDOWN IMMEDIATE
SHUTDOWN IMMEDIATE;
流程:
- 不允许新连接
- 回滚未提交事务
- 检查点
- 关闭
4.4 SHUTDOWN ABORT
SHUTDOWN ABORT;
流程:
- 立即终止
- 不回滚
- 不检查点
- 重启需实例恢复
5. 关闭对比
| 模式 | 等待会话 | 等待事务 | 回滚 | 检查点 |
|---|---|---|---|---|
| NORMAL | 是 | 是 | 否 | 是 |
| TRANSACTIONAL | 否 | 是 | 否 | 是 |
| IMMEDIATE | 否 | 否 | 是 | 是 |
| ABORT | 否 | 否 | 否 | 否 |
6. 启动状态查看
6.1 v$database
SELECT name, open_mode, log_mode FROM v$database;
6.2 v$instance
SELECT instance_name, status, database_status FROM v$instance;
6.3 状态
- STARTED:NOMOUNT
- MOUNTED:MOUNT
- OPEN:OPEN
7. 启动失败
7.1 ORA-01078 / LRM-00109
- 参数文件问题
- 检查 SPFILE / PFILE
7.2 ORA-00205
- 控制文件问题
- 检查路径
- 恢复控制文件
7.3 ORA-01113
- 需要恢复
- RECOVER DATABASE
7.4 ORA-01122 / 01110
- 数据文件损坏
- RESTORE / RECOVER
8. 静默关闭
8.1 QUIESCE
ALTER SYSTEM QUIESCE RESTRICTED;
-- 等待活跃会话
ALTER SYSTEM UNQUIESCE;
8.2 用途
- 维护
- DBA 独占
9. 挂起
9.1 SUSPEND
ALTER SYSTEM SUSPEND;
-- 暂停 I/O
ALTER SYSTEM RESUME;
9.2 用途
- 存储快照
- 一致性备份
10. RAC 启动
10.1 集群
# 集群
crsctl start cluster -all
# 数据库
srvctl start database -db orcl
# 实例
srvctl start instance -db orcl -instance orcl1
详细见:Oracle RAC 架构详解。
11. 自动启动
11.1 /etc/oratab
orcl:/u01/app/oracle/product/19.0.0/dbhome_1:Y
11.2 systemd
# /etc/systemd/system/oracle.service
[Unit]
Description=Oracle Database
After=network.target
[Service]
Type=forking
User=oracle
ExecStart=/u01/.../bin/dbstart /u01/...
ExecStop=/u01/.../bin/dbshut /u01/...
Restart=always
[Install]
WantedBy=multi-user.target
11.3 启用
systemctl enable oracle
systemctl start oracle
12. PDB 启动
12.1 状态
SELECT name, open_mode FROM v$pdbs;
12.2 启动
ALTER PLUGGABLE DATABASE hrpdb OPEN;
ALTER PLUGGABLE DATABASE ALL OPEN;
ALTER PLUGGABLE DATABASE hrpdb CLOSE;
12.3 SAVE STATE
ALTER PLUGGABLE DATABASE hrpdb SAVE STATE;
-- CDB 启动时自动启动
13. 监控
13.1 启动日志
SELECT * FROM v$diag_info WHERE name = 'Alert Log';
13.2 告警
- ORA- 错误
- 启动信息
- 检查点
13.3 历史启动
SELECT * FROM dba_alert_history
WHERE message_text LIKE '%STARTUP%' OR message_text LIKE '%SHUTDOWN%';
14. 常见坑与排错
14.1 启动慢
- SGA 大
- 实例恢复长
- 检查点优化
14.2 ORA-01102
- 已有实例运行
- 共享内存残留
- ipcs / ipcrm
14.3 启动到 MOUNT 后无法 OPEN
-- 1. 恢复
RECOVER DATABASE;
-- 2. OPEN
ALTER DATABASE OPEN;
15. 最佳实践
- IMMEDIATE 推荐:平衡
- ABORT 紧急:故障
- NORMAL 等待:维护
- MOUNT 维护:操作
- PDB SAVE STATE:自动
- systemd 自启:现代
- 监听先启:连接
- 监控告警日志:问题
- 测试流程:可行
- 文档化:SOP
16. 参考资料
[1] Oracle Database Administrator’s Guide 19c, “Startup and Shutdown” https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/starting-up-and-shutting-down.html