進程體繫結構 -用戶進程:連接到Oracle DB的應用程式或工具 -資料庫進程 -伺服器進程:連接到Oracle實例,在用戶建立會話時啟動 -後臺進程:在啟動Oracle實例時啟動 -守護程式/應用程式進程 -網路監聽程式 -Grid infrastructe守護程式 專用伺服器,對於每個會話,運 ...
進程體繫結構

-用戶進程:連接到Oracle DB的應用程式或工具 -資料庫進程 -伺服器進程:連接到Oracle實例,在用戶建立會話時啟動 -後臺進程:在啟動Oracle實例時啟動 -守護程式/應用程式進程 -網路監聽程式 -Grid infrastructe守護程式 專用伺服器,對於每個會話,運行資料庫應用程式的用戶進程都由執行Oracle DB伺服器的伺服器進程提供服務。 共用伺服器,不必為每個連接都提供一個專用伺服器進程。分派程式會將多個傳入網路會話請求定向到共用伺服器進程池。共用伺服器進程為所有客戶端請求提供服務。 伺服器進程 -對通過應用程式發出的SQL語句進行語法分析並運行語句 -從磁碟上的數據文件中將必要的數據塊讀取到SGA的共用資料庫緩衝區中(如果這些數據塊目前尚未在SGA中) -返回結果,使應用程式可以處理信息 後臺進程 Oracle DB系統使用的進程統稱為“後臺進程”,一個Oracle DB實例可以有多個後臺進程。 非RAC、非ASM環境中常見後臺進程 -DBWn 資料庫寫進程 -LGWR 日誌寫進程 -CKPT 檢查點進程 -SMON 系統監控進程 -PMON 進程監控進程 -RECO 恢復器進程 -CJQ0 作業隊列協調程式 -Jnnn 作業從屬進程 -ARCn 歸檔進程 -QMNn 隊列監控進程 更高級的配置(如RAC)會有其他後臺進程。有關後臺進程的詳細信息,請參考V$BGPROCESS視圖 有些後臺進程是在啟動實例時自動創建的,而另外一些則是根據需要創建的。 其他進程結構不是單個資料庫獨有的,而是可以在同一個伺服器上的多個資料庫間共用的。Grid Infrastructure進程和網路進程則屬於此類。 Liunx和Unix系統上Grid Infrastructure進程包括 -ohasd:Oracle高可用性服務守護程式,負責啟動Oracle Clusterware進程。 -ocssd:集群同步服務守護程式 -diskmon:磁碟監視守護程式,負責監視HP Oracle Exadata Storage Server的輸入和輸出 -cssdagent:啟動、停止和檢查CSS守護程式ocssd的狀態 -orarootagent:一種專用的Oracle代理進程,可幫助管理root用戶所擁有的資源(如網路) DBWn數據寫進程 參數:db_writer_processes 將資料庫緩衝區高速緩存中經過修改的緩衝區(臟數據)寫入磁碟有兩種方式: -在執行其它處理時非同步執行 -推進檢查點 資料庫寫進程(DBWn)將緩衝區的臟數據寫入數據文件。大多數系統來說,一個資料庫寫進程(DBWn)已經足夠,但如果系統需要頻繁修改數據,也可以配置附加進程(DBW1到DBW9或DBWa到DBWz)來改善寫入性能。這些附加進程在單處理器系統中沒有作用。 當資料庫緩衝區高速緩存中的某個緩衝區數據被修改時,系統會將其標記為臟數據,並將其添加到按SCN順序排列的檢查點隊列的頭中。因此,該順序與這些更改的緩衝區的重做條目寫入重做日誌的順序一致。當緩衝區高速緩存中的可用緩衝區的數量低於某個內部閘值時,DBWn會將不經常使用的緩衝區寫入數據文件,寫入順序是從LRU列表的尾部開始,從而使進程可以在需要緩衝區時替換它們。DBWn也會從檢查點隊列的尾部寫入,以保護檢查點向前推進。 SGA中有一個記憶體結構保存了重做流中位置的重做位元組地址(RBA),當實例發送故障時,將從該位置開始恢復。此結構充當指向重做的指針,並且由CKPT進程按照每三秒一次的頻率寫入控制文件。由於DBWn按照SCN順序寫入臟數據,而重做按照SCN順序執行,因此每當DBWn從LRU列表寫入臟數據時,還會將SGA記憶體結構中保持的指針前移,以便實例恢復(如果需要)從近似正確的位置開始讀取重做,並避免不必要的I/O。這稱為"增量檢查點"。 LRU演算法將更頻繁訪問的塊保存在緩衝區高速緩存中,以儘可能地減少磁碟讀取。可對錶使用cache選項,以幫助延長塊在記憶體中的保留時間。 DB_WRITER_PROCESSES初始化參數指定了DBWn進程的數量。DBWn進程的最大數量為36。如果用戶在啟動過程中未指定該進程數,Oracle DB將根據CPU和處理器組的數量來決定如果設置DB_WRITER_PROCESSES。 DBWn資料庫寫進程觸發條件: -產生檢查點CKPT - 臟數據緩衝區達到閥值 預設10% -掃描整個data buffer 沒有空閑data buffer 中包含髒的和未髒的,優先寫臟數據列表再寫未臟塊 - timeout 超時,如果DBWn 沒事做 會被每三秒喚醒一次去巡檢 寫不寫不一定 - 表級別的truncate 或 drop 也會觸發數據寫 - 修改表空間的 read only - 做表空間的offline (離線) - 熱備份 begin backup 命令 在所有情況下,DBWn均執行批量(多塊)寫操作以提高效率。多塊寫操作中寫入的塊數因操作系統而異。 LGWR日誌寫進程 將重做日誌緩衝區寫入磁碟上的重做日誌文件中。重做日誌緩衝區是迴圈緩衝區,當LGWR將重做日誌緩衝區的重做條目寫入重做日誌文件時,伺服器進程隨後可以複製新條目,覆蓋重做日誌緩衝區中的那些已寫入磁碟的條目。LGWR的寫入速度通常足夠快,可以確保緩衝區中始終有空間可供新條目使用,即使對重做日誌的訪問量很大時也是如此。LGWR將緩衝區的一個連續部分寫入磁碟。 LGWR日誌寫進程觸發條件: -用戶進程提交事務處理時 -重做日誌緩衝區的三分之一已滿時 -DBWn進程將經過修改的緩衝區寫入磁碟(如果需要)之前 -重做日誌緩衝區達到1M的redo條目 -每隔3秒 CKPT檢查點進程 “檢查點”是一種數據結構,它定義了資料庫的重做線程中的系統更改號(SCN)。檢查點記錄在控制文件和每個數據文件頭中。它們是恢復操作的關鍵元素。 CKPT檢查點進程在DBWn將高速緩衝區中的臟數據寫入數據文件時觸發,它會校驗寫入所有相關的數據文件的頭部,還將校驗點號碼、重做日誌序列號、歸檔日誌名稱和最低/最高SCN號都會寫入控制文件中。 CKPT檢查點進程觸發條件: -log_checkpoint_timeoute時間閥值達到 -log_checkpoint_interval*操作系統塊大小 -redo log switch & alter system checkpoint,日誌切換和顯式生成檢查點 -熱備 begin backup -表空間offline&read only、shutdown immediate和direct read SMON系統監控進程 -實例啟動時執行恢復。執行前滾,將已經寫入重做日誌文件但是還沒寫入到數據文件中的數據(scn號來識別提交的記錄),打開資料庫,回滾沒有提交的事務。 -清除不使用的臨時段。回收或合併數據文件相連的空閑區,釋放臨時段。 PMON進程監控進程 -在用戶進程失敗時執行進程恢復 -清除資料庫緩衝區高速緩存 -釋放該用戶進程使用的資源 -監控會話,查看是否發生空閑會話超時 -在監聽程式中動態註冊資料庫服務

RECO(恢復器進程) -用於分散式資料庫配置 -分散式事務處理有問題時自動連接其它涉及的資料庫 -自動解決所有有問題的事務 -刪除對應有問題的事務的所有行 ARCn(歸檔進程) 資料庫開啟歸檔模式,alter database archivelog; -在發生日誌切換之後,將重做日誌文件複製到指定的存儲路徑 -收集事務處理重做數據,並將該數據傳輸到備用目標位置 目標位置log_archive_dest_1~31(11g),前1~10主要存放local本地路徑(也可以存放Service名),11~30存放Service不能存放local本地路徑。 ARCn歸檔進程最大數量的控制參數:LOG_ARCHIVE_MAX_PROCESSES https://docs.oracle.com/cd/E11882_01/server.112/e25494/archredo.htm#ADMIN00801 Jnnn(作業從屬進程)&CJQ0 (作業隊列協調程式 ) 它們可以被看作是一個調度程式服務,用來將作業Oracle資料庫實例上的PL/SQL語句或過程。 -Jnnn作業從屬進程(或作業隊列進程)是動態管理的。 -CJQ0 作業隊列協調程式會定期從JOB$表選擇並運行Jnnn作業 -CJQ0進程動態生成作業從屬進程(J000-J999) -Jnnn進程由CJQ0進程選擇的一個作業來執行。這些進程一次運行一個作業(job) -該進程完成後,它將輪詢更多的作業(job)。如果沒有計劃執行的作業則進入休眠狀態,並從中定期喚醒其他作業。如果進程沒有找到新的作業,則在預設的時間間隔後中止。 同時執行最大的Jnnn進程數的參數:job_queue_processes 這些進程與其他Oracle資料庫後臺進程不同,該進程故障不會導致實例失敗。 QMNn(隊列監控進程) QMNn隊列監控進程是Oracle Streams Advanced Queuing的可選後臺進程,用於監控消息隊列。 -最多可以配置10個QMNn隊列監控進程。 這些進程與其他Oracle資料庫後臺進程不同,該進程故障不會導致實例失敗。

參考: https://docs.oracle.com/cd/E11882_01/server.112/e40540/process.htm#CNCPT9840