Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 平台下多個 Oracle 實例啟動/關閉操作指南

編輯:Linux 教學

場景說明

同一台伺服器運行多個 Oracle 實例(SID 不同),需分別管理。本文以 orcl1、orcl2 為例,示範在 Oracle 用戶環境下的啟動/關閉標準流程。

前置條件

  • 已建立對應的 $ORACLE_HOME、$ORACLE_BASE、參數檔(spfile/pfile)、密碼檔。
  • /etc/oratab 已註冊實例(可選,供 dbstart/dbshut 使用)。
  • 監聽器 listener.ora 已配置所有實例的 SID_LIST。

啟動單一實例步驟

# 1. 切換至 oracle 用戶
su - oracle

# 2. 啟動監聽器(一次即可,服務所有實例)
lsnrctl start

# 3. 設定當前環境的 ORACLE_SID
export ORACLE_SID=orcl1

# 4. 以 SYSDBA 身分連線並啟動資料庫
sqlplus / as sysdba <<'EOF'
startup;
exit;
EOF

# 5. 驗證實例狀態
sqlplus / as sysdba <<'EOF'
select instance_name, status from v$instance;
exit;
EOF

啟動第二個實例

export ORACLE_SID=orcl2
sqlplus / as sysdba <<'EOF'
startup;
exit;
EOF

關閉實例(正常關閉)

export ORACLE_SID=orcl1
sqlplus / as sysdba <<'EOF'
shutdown immediate;
exit;
EOF

關閉模式對比:

模式行為適用場景
shutdown normal等待所有用戶斷線、不允許新連線計畫維護窗口
shutdown immediate回滾未提交交易、斷開所有連線、不執行檢查點最常用、最快正常關閉
shutdown transactional等待當前交易完成、不允許新交易需保證交易完整性
shutdown abort直接終止進程、不回滾、下次啟動需實例恢復緊急故障、其他模式失效時

自動化腳本範例(啟動所有實例)

#!/bin/bash
# start_all_oracle.sh
# 依賴 /etc/oratab 格式:SID:ORACLE_HOME:Y|N

ORATAB=/etc/oratab
if [ ! -f "$ORATAB" ]; then
    echo "找不到 $ORATAB"
    exit 1
fi

# 啟動監聽器
su - oracle -c "lsnrctl start"

# 遍歷 oratab 中標記為 Y 的實例
grep -E '^[^#]*:.*:Y$' "$ORATAB" | while IFS=: read -r SID OHOME AUTO; do
    echo "啟動實例: $SID (ORACLE_HOME=$OHOME)"
    su - oracle -c "
        export ORACLE_SID=$SID
        export ORACLE_HOME=$OHOME
        export PATH=\$ORACLE_HOME/bin:\$PATH
        sqlplus / as sysdba <<'EOFSQL'
startup;
EOFSQL
    "
done
echo "所有實例啟動完成"

常見問題排查

  • ORA-01031: insufficient privileges:確認 oracle 用戶屬於 dba 群組(id oracle)。
  • ORA-12514: TNS:listener does not currently know of service:檢查 listener.ora 的 SID_LIST、執行 lsnrctl reload。
  • ORA-01078: failure in processing system parameters:spfile 損壞或路徑錯誤,嘗試用 pfile 啟動:startup pfile=/path/to/init.ora。
  • 共享記憶體不足:檢查 /dev/shm 大小、kernel.shmmax/shmall 參數。

總結

多實例管理的核心在於環境變數隔離(ORACLE_SID、ORACLE_HOME)與監聽器統一服務。建立標準化的啟動/關閉腳本、納入 /etc/oratab、配合 systemd 服務單元,即可實現生產級的自動化與高可用管理。

Copyright © Windows教程網 All Rights Reserved