資料庫重啟非單純 shutdown/startup,生產環境需嚴格遵循 SOP 確保交易完整性、備份可用性、服務平滑切換。本文提供 10 步驟標準重啟流程,適用於計畫維護、修補套用、參數調整等場景。
$ lsnrctl stop
防止重啟過程中新連線嘗試導致錯誤日誌暴增。SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
產生可讀的 CREATE CONTROLFILE 腳本,災難時重建控制檔之用。SQL> ALTER SYSTEM SWITCH LOGFILE;
強制將記憶體 Redo Buffer 刷入線上 Redo Log,縮短復原時間、確保無交易遺失。SET HEAD OFF FEEDBACK OFF NEWPAGE NONE
SPOOL /oracle_backup/bin/kill_all_session.sql
SELECT 'ALTER SYSTEM KILL SESSION ''' || sid || ',' || serial# || ''';'
FROM v$session WHERE username IS NOT NULL;
SPOOL OFF
SQL> @/oracle_backup/bin/kill_all_session.sql
強制釋放使用者鎖定資源,避免 SHUTDOWN IMMEDIATE 長時間等待。SQL> SHUTDOWN IMMEDIATE;
-- 或舊版 SVRMGRL> SHUTDOWN IMMEDIATE;
$ lsnrctl start
$ sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> STARTUP;
-- 或舊版 SVRMGRL
| 模式 | 行為 | 適用場景 | 風險 |
|---|---|---|---|
| NORMAL | 等所有使用者斷線、不允許新連線 | 維護窗口極長、使用者配合度高 | 可能永遠等不到 |
| IMMEDIATE | 回滾未認可交易、斷開所有連線、檢查點 | 標準生產重啟首選 | 長交易回滾耗時 |
| TRANSACTIONAL | 等待作用中交易完成(不回滾)、不允許新交易 | 極不願回滾長交易、可接受等待 | 若交易卡住會無限等待 |
| ABORT | 立即終止進程、不檢查點、下次啟動需 Instance Recovery | 緊急故障、IMMEDIATE 卡住 | 資料一致性風險最高,非計畫維護禁用 |
#!/bin/bash
# oracle_restart_sop.sh
ORACLE_SID=ORCL
export ORACLE_SID
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_HOME
PATH=$ORACLE_HOME/bin:$PATH
echo "$(date) Stopping Listener..."
lsnrctl stop
echo "$(date) Backing up controlfile to trace..."
sqlplus -s / as sysdba < /tmp/kill_sessions.sql
SET HEAD OFF FEEDBACK OFF NEWPAGE NONE
SELECT 'ALTER SYSTEM KILL SESSION ''' || sid || ',' || serial# || ''';'
FROM v\$session WHERE username IS NOT NULL;
EOF
echo "$(date) Killing sessions..."
sqlplus -s / as sysdba @/tmp/kill_sessions.sql
echo "$(date) Shutting down IMMEDIATE..."
sqlplus -s / as sysdba <
ORA- 錯誤SELECT STATUS FROM V$INSTANCE 顯示 OPENONLINE(SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES)lsnrctl status 顯示服務 READY將此 SOP 納入變更管理流程、自動化腳本納入版控、每季演練一次,讓資料庫重啟成為「零驚喜、可追蹤、可驗證」的常態作業。