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 启动时自动启动

详细见:Oracle 多租户 CDB/PDB 管理


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. 最佳实践

  1. IMMEDIATE 推荐:平衡
  2. ABORT 紧急:故障
  3. NORMAL 等待:维护
  4. MOUNT 维护:操作
  5. PDB SAVE STATE:自动
  6. systemd 自启:现代
  7. 监听先启:连接
  8. 监控告警日志:问题
  9. 测试流程:可行
  10. 文档化: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