環境準備
- OS 帳號:
oracle (屬於 dba 群組)
- 環境變數:
ORACLE_HOME、ORACLE_SID、PATH、LD_LIBRARY_PATH 已在 .bash_profile 設定。
啟動流程
- 切換 oracle 使用者
su - oracle
- 啟動 Listener
$ORACLE_HOME/bin/lsnrctl start
- 啟動資料庫
$ORACLE_HOME/bin/sqlplus /nolog
SQL> CONNECT / AS SYSDBA
-- 或指定帳號: CONNECT sys/password AS SYSDBA
SQL> STARTUP
- 驗證啟動成功
ORACLE instance started.
Total System Global Area 205520896 bytes
...
Database mounted.
Database opened.
關閉流程
- 關閉資料庫
sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> SHUTDOWN [OPTION]
- 關閉 Listener
lsnrctl stop
SHUTDOWN 選項詳細對比 (由溫和至強制)
| 指令 | 行為 | 適用場景 | 重啟耗時 |
SHUTDOWN NORMAL | 等所有使用者主動斷線/交易結束,不允許新連線 | 計畫性維護、有充足時間 | 最短 (乾淨關閉) |
SHUTDOWN TRANSACTIONAL | 等進行中交易 Commit/Rollback,強制斷開 Session | 需快速關閉但保護交易完整性 | 短 |
SHUTDOWN IMMEDIATE | 最常用:立即回滾未提交交易、釋放鎖、關閉檔案 | 緊急維護、參數修改生效 | 中 (含實例恢復) |
SHUTDOWN ABORT | 瞬間終止,不做 Checkpoint、不切換 Log、不回滾 | 系統當機、IMMEDIATE 卡住、極端情況 | 最長 (啟動時執行實例恢復) |
關閉成功訊息
Database closed.
Database dismounted.
ORACLE instance shut down.
常見問題排查
ORA-01031: insufficient privileges → 確認 OS 帳號屬於 dba 群組、使用 CONNECT / AS SYSDBA。
ORA-01109: database not open → 尚未執行 STARTUP 或處於 MOUNT 狀態。
- Listener 啟動失敗 → 檢查
$ORACLE_HOME/network/admin/listener.ora、埠號衝突、防火牆、主機名解析。
自動化腳本範例 (systemd)
[Unit]
Description=Oracle Database
After=network.target
[Service]
Type=forking
User=oracle
Environment=ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
Environment=ORACLE_SID=ORCL
ExecStart=/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbstart $ORACLE_HOME
ExecStop=/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbshut $ORACLE_HOME
TimeoutSec=0
[Install]
WantedBy=multi-user.target