oracle 有很多的后臺進程,在遇到特殊情況的時候如鎖表,如果等待的是一個后臺進程,那這時就需要考量是不是能殺掉這個后臺進程?殺掉這個后臺進程會不會引起實例崩潰?本著實踐出真知,本文針對oracle 11g,oracle 19c,和oracle 23ai三個版本,將系統的后臺進程輪流殺掉看看會不會引起實例崩潰。
1.數據庫實例
1.1測試腳本輪流kill后臺進程?
大家已經熟知的pmon,smon,dbwr,lgwr,ckpt,mman這六個核心進程 殺掉肯定會實例崩潰,所以腳本中剔除了這六個
#!/bin/sh
?
function startup()
{
sqlplus / as sysdba<<EOF
startup
exit
EOF
}
?
started=`ps -ef | grep pmon | grep -v grep | awk '{print $2}'`
test -z "$started" && startup >> /dev/null
sleep 5
?
# List of Oracle background processes to exclude from killing
exclude_processes="pmon|smon|dbw0|dbw1|lgwr|ckpt|mman"
?
# Get list of Oracle processes
prolist=`ps -ef | grep ora | egrep -v "bash|su|h|ps|grep|more|sleep|awk|LOCAL|sy sdba|log|$exclude_processes" | awk '{print $NF}'`
?
for i in $prolist
do
proc_key=`echo $i | awk -F _ '{print $2}'`
pid=`ps -ef | grep $proc_key | grep -v grep | awk '{print $2}'`
?
test -z $pid && echo "$proc_key does not exist" || {
echo "Killing process $proc_key with PID $pid"
kill -9 $pid
sleep 20
?
# Check if PMON process exists
pc=`ps -ef | grep pmon | grep -v grep | wc -l`
echo "Number of PMON processes: $pc"
?
if [ $pc -eq 0 ]; then
echo "Killed process $proc_key has caused instance crash!"
startup >> /dev/null
sleep 5
else
echo "Killed process $proc_key has not caused instance crash."
fi
?
}
done
?
這里給出三個版本的測試結果
oracle 11g
Killed process vktm has caused instance crash!
Killed process gen0 has caused instance crash!
Killed process dbrm has caused instance crash!
oracle 19c
Killed process clmn has caused instance crash!
Killed process vktm has caused instance crash!
Killed?process?gen0?has?caused?instance?crash!
Killed process lg00 has caused instance crash!
Killed process lg01 has caused instance crash!
Killed process lreg has caused instance crash!
Killed process dbrm has caused instance crash!
Killed process pman has caused instance crash!
oracle?23ai
Killed process clmn has caused instance crash!
Killed process vktm has caused instance crash!
Killed?process?gen0?has?caused?instance?crash!
Killed process lg00 has caused instance crash!
Killed process lg01 has caused instance crash!
Killed process lreg has caused instance crash!
Killed process dbrm has caused instance crash!
Killed?process?pman?has?caused?instance?crash!
Killed process bg02 has caused instance crash!
?
1.2總結哪些數據庫后臺進程不能殺
oracle11g (9個)
oracle 19c (9+4=13個)
?
?官方文檔中沒有bgnn介紹?
-
PMON (Process Monitor):
-
負責監視后臺進程和用戶進程的狀態。當檢測到用戶進程異常或斷開連接時,PMON負責清理相關資源并釋放鎖定。
-
-
SMON (System Monitor):
-
處理系統級別的事務和數據庫實例的恢復。SMON負責維護數據庫的一致性,包括回滾未完成的事務和清理臨時段。
-
-
DBWR (Database Writer):
-
負責將緩沖區中的數據寫回磁盤。DBWR根據需要執行檢查點(Checkpoint),以確保數據庫的一致性和持久性。
-
-
LGWR (Log Writer):
-
將重做日志緩沖區中的日志記錄寫入重做日志文件。LGWR確保事務的持久性,允許數據庫在崩潰后進行恢復。
-
-
CKPT (Checkpoint Process):
-
負責在數據庫實例中定期執行檢查點操作。檢查點將數據庫緩沖區中的已修改數據寫入數據文件,以便恢復操作。
-
-
MMAN (Memory Manager):
-
管理數據庫實例中的內存分配和使用。MMAN負責自動調整共享池和其他內存結構的大小,以優化數據庫性能。
-
-
VKTM (Virtual Keeper of Time):
-
提供數據庫實例中的時間服務。VKTM管理數據庫中所有時間相關操作,包括等待事件和事務時間戳。
-
oracle 11g新引入的后臺進程。
-
-
DBRM (Database Resource Manager):
-
管理數據庫資源的分配和使用,包括CPU、I/O和連接數等。DBRM確保不同用戶和應用程序之間的資源分配公平和有效。
-
oracle 11g新引入的后臺進程
-
-
GEN0 (Generic Background Process):
-
通用后臺進程,用于處理數據庫實例中的各種系統任務和管理操作。
-
oracle 10g引入的后臺進程
23ai?(13+1=14個)
?新增bgnn進程,23ai確實有多個后臺bgnn進程,kill掉還會實例崩潰?應該是關鍵進程,但是在官方的reference卻沒有?非常奇怪!有知道的大佬留言指教一下!
-
CLMN (Cleanup Main Process):
-
功能:負責在Oracle實例中執行清理任務。
-
職責:管理清理死進程、終止會話、事務、網絡連接、空閑會話、已分離事務以及超過空閑超時的網絡連接。
oracle 12c引入和clnn一起協助pmon處理一些清理工作
-
-
LGnn ( Log Writer Worker):
-
功能:lgwr輔助進程。
-
職責:在多處理器系統中,LGWR創建worker提高進程寫入性能
-
oracle19c引入協助lgwr進程處理并發提高log寫入性能
-
-
LREG ( Listener Registration Process):
-
功能:將Oracle實例注冊到監聽器。
-
職責:通知監聽器有關實例、服務、處理程序和端點的信息。確保監聽器知道可以連接的數據庫服務。
-
oracle 12c引入
-
-
PMAN (Process Manager):
-
功能:管理Oracle數據庫中的各種后臺進程。
-
職責:根據需要監視、啟動和停止分發器和共享服務器進程、連接代理、用于數據庫駐留連接池的池化服務器進程、作業隊列進程以及可重啟后臺進程。
-
oracle 12c引入
-
-
2.ASM實例
除了以上的還有集群環境下ASM實例相關后臺進程,有如下四個ASM關鍵進程不能殺
-
ASMB (ASM Background Process):
-
功能:ASMB 是 Automatic Storage Management (ASM) 的后臺進程。它主要用于維護 ASM 實例與 Oracle 實例之間的通信。ASMB 管理與 Oracle 實例的連接,處理 ASM 實例與客戶端之間的元數據操作請求,并協調數據重新平衡操作。
-
-
RBAL (ASM Rebalance Master Process):
-
功能:RBAL 是另一個與 ASM 相關的進程。它負責分發重新平衡任務給其他 ASM 實例中的 ARBx 從屬進程。重新平衡操作在添加或刪除 ASM 磁盤時執行,以確保數據在磁盤組中的均勻分布。
-
-
PSP0 (Process Spawner Process):
-
功能:PSP0 是 Process Spawner Process,負責生成和管理 Oracle 實例中的其他后臺進程。它確保所需的后臺進程在實例啟動時啟動,并在需要時生成新的進程。
-
-
GMON (ASM Disk Group Monitor Process):
-
功能:GMON 是 ASM 磁盤組監控進程。它主要用于監控和管理 ASM 磁盤組的狀態和運行狀況。GMON 確保磁盤組的一致性,并在檢測到磁盤組中的錯誤或不一致時采取糾正措施。
-
ps :oracle?23ai還有一個變化后臺進程的名字由原來的ora_xxxx改為了db_xxxx,放棄了沿用數十年的規則
19c
23ai?(不確定正式EE版本是否沿用ora_還是使用db_)