當資料庫鎖死無法正常關閉,需用 UNIX kill 強制終結所有相關進程並釋放共享記憶體/訊號。本文提供標準化操作流程與單行指令。
ORACLE_SID 相關的所有 Oracle 進程ipcs -pmb 識別佔用的共享記憶體段ipcrm -m 釋放共享記憶體ipcs -sa 顯示訊號,ipcrm -s 釋放訊號ps -ef | grep $ORACLE_SID | \
grep -v grep | awk '{print $2}' | xargs -i kill -9 {}
root> ipcs -pmb IPC status from /dev/kmem as of Mon Sep 10 16:45:16 2001 T ID KEY MODE OWNER GROUP SEGSZ CPID LPID Shared Memory: m 24064 0x4cb0be18 --rw-r----- oracle dba 28975104 1836 23847 m 1 0x4e040002 --rw-rw-rw- root root 31008 572 572 ... # 釋放 Oracle 擁有的 ID=24064 root> ipcrm -m 24064
ipcs -sa # 找到 Oracle 擁有的 semaphore ID ipcrm -s
kill -9 為強制終止,進程無法執行清理邏輯,**必須**後續手動釋放 IPC 資源shutdown immediate/abort 均失效時使用ipcs 輸出,防誤刪其他進程資源ipcrm -sSQLNET.EXPIRE_TIME 偵測死連線PROCESSES / SESSIONS 參數避免連線耗盡alert.log 中的死鎖、掛起跡象