当前位置:首页 > 问答 > 正文

Oracle运维|数据库管理|三种关闭Oracle数据库的方法及操作步骤

Oracle运维实战:三种关闭数据库的正确姿势

场景还原
凌晨2点,运维小王接到告警——Oracle服务器磁盘空间爆满,当他连上服务器准备维护时,却发现数据库异常活跃,强行kill进程可能导致交易数据丢失,这时候,选择合适的关闭方式就成了救命稻草...

作为DBA,关闭Oracle数据库看似简单,实则暗藏玄机,今天我们就来聊聊三种最常用的关闭方法及其适用场景,操作步骤精确到命令级别,建议收藏备用。


温柔一刀——NORMAL关闭

适用场景

  • 日常维护停机
  • 允许所有用户完成当前操作

核心特点

  • 等待所有活跃会话自行断开
  • 禁止新连接但不断开现有连接

操作步骤

  1. 登录SQL*Plus(建议用sysdba权限):
    sqlplus / as sysdba  
  2. 执行关闭命令:
    SHUTDOWN NORMAL;  
  3. 观察输出提示,直到显示"Database closed"(可能等待数分钟)

避坑指南
若发现有会话长时间不退出,可通过SELECT sid, serial# FROM v$session WHERE status='ACTIVE'查看顽固会话,必要时通知用户下线。

Oracle运维|数据库管理|三种关闭Oracle数据库的方法及操作步骤


限期离场——IMMEDIATE关闭

适用场景

  • 计划内的紧急维护
  • 需快速释放资源但保证数据一致性

核心特点

  • 回滚未提交事务
  • 自动断开所有用户连接

操作步骤

  1. 同样以sysdba身份登录SQL*Plus
  2. 执行快速关闭命令:
    SHUTDOWN IMMEDIATE;  
  3. 通常30秒内完成关闭,观察提示:
    Database closed.  
    Database dismounted.  
    ORACLE instance shut down.  

实战技巧
遇到大量未提交事务时,可通过ALTER SYSTEM CHECKPOINT提前写入脏数据,缩短关闭时间。


强制终结——ABORT关闭

适用场景

  • 数据库严重挂起无法响应
  • 服务器即将断电等极端情况

核心特点

  • 相当于数据库的"拔电源"操作
  • 下次启动需自动恢复(SMON进程执行崩溃恢复)

操作步骤

Oracle运维|数据库管理|三种关闭Oracle数据库的方法及操作步骤

  1. 终极关闭命令:
    SHUTDOWN ABORT;  
  2. 立即返回提示:
    ORACLE instance shut down.  

重要警告

  • 使用后必须立即执行完整重启:
    STARTUP;  
  • 检查alert日志确认恢复情况:
    cd $ORACLE_BASE/diag/rdbms/$ORACLE_SID/trace  
    tail -100 alert_$ORACLE_SID.log | grep -i recovery  

运维人员必备checklist

  1. 关闭前必查

    SELECT count(*) FROM v$transaction;  -- 查看活跃事务数  
    SELECT username, status FROM v$session WHERE type='USER';  -- 检查用户会话  
  2. 关闭后验证

    ps -ef | grep pmon  -- 确认后台进程已终止  
    lsnrctl status      -- 检查监听器状态  
  3. 特殊环境注意

    • RAC环境需在所有节点执行
    • 使用ASM存储时,确保ASM实例最后关闭

终极忠告
永远把ABORT作为最后选项!某金融系统曾因频繁ABORT导致控制文件损坏,最终引发8小时数据恢复事故,优雅的关闭,是DBA专业度的体现。

(本文操作验证基于Oracle 19c,2025年8月仍适用于主流版本)

发表评论