1 認識Oracle后臺進程
Oracle數據庫后臺進程是Oracle數據庫管理系統(DBMS)的核心組件,它們在后臺運行,負責數據庫的各種管理和維護任務。
主要包括以下幾種:
SMON (System Monitor)
SMON負責數據庫的恢復操作,如處理系統故障(例如,實例失敗)。
當檢測到數據庫實例崩潰時,SMON會嘗試恢復控制文件和數據文件的一致性。
PMON (Process Monitor)
PMON負責監控用戶進程的狀態,并在用戶進程異常終止時進行清理工作。
它確保不會留下孤兒進程占用資源。
DBWn (Database Writer)
DBWn負責將緩沖區緩存中的臟數據寫入數據文件。
它通過減少臟緩沖區的數量來提高性能,并保證數據的一致性和持久性。
LGWR (Log Writer)
LGWR負責將重做日志緩沖區中的日志條目寫入到在線重做日志文件中。
這是保證事務持久性的關鍵部分,確保即使在系統崩潰的情況下,也能通過重做日志恢復數據。
CKPT (Checkpoint)
CKPT進程負責在數據庫中創建檢查點,以確保數據文件和在線重做日志的一致性。
檢查點減少了恢復操作的時間,因為它允許數據庫從最近的檢查點開始恢復。
ARCn (Archiver)
ARCn負責將在線重做日志文件歸檔到指定的歸檔日志目錄中。
前面5個是必須啟動的;
這些不是在Windows服務里看到的哪些;
如何能看到這些進程和它們的狀態呢;
在Windows任務管理器看不到;
Oracle數據庫 在Windows平臺運行時默認以單一 oracle.exe 進程運行。
這句話是網上的;
目前我任務管理器里看到的如下,包括我打開了SQL Developer,這可能還增加一個進程;
我沒發現oracle.exe,這是不是版本的問題,我的是11g r2;
根據資料,用Oracle安裝以后的Administration Assistant for Windows工具,可以查看Oracle的進程;
但是打開此工具,我的看不到什么,上圖的上部是網上的,我的在電腦名下面只有性能監視器、Oracle主目錄兩項;
根據資料,執行如下圖的SQL(需要SYSDBA權限),可以查看Oracle包含的進程的狀態;?
看一下它顯示的,后臺進程都是包含在ORACLE.EXE里;
SELECT s.sid, s.serial#, p.spid, s.username, s.status, s.osuser, s.machine, s.program
FROM v$session s, v$process p
WHERE s.paddr = p.addr;
2 Oracle內存結構學習
Oracle內存由2大部分組成:SGA(系統全局區),PGA(程序全局區)。
PGA不是實例的一部分,服務器進程啟動時,才分配PGA。
SGA是數據庫實例的一部分,數據庫實例啟動時,會首先分配系統全局區。
? ? 系統全局區包括幾個重要的內存區;數據庫高速緩存,重做日志緩存,共享池,大池,Java池。
2.1 共享池(Shared Pool)
共享池包括庫高速緩存和數據字典高速緩存。
? ? 庫高速緩存存儲了最近使用過的SQL和PL/SQL語句。Oracle采用LRU算法管理庫高速緩存。沒有直接設置庫高速緩存的指令,只能通過設置共享池的大小間接地更改。共享池是SGA的一部分,所以共享池不能超過SGA的大小。
? ? 數據字典高速緩存存儲了數據文件、表、索引、列、用戶、權限信息和其它一些數據庫對象的定義。在SQL語句的解析階段,需要這些信息來解析用戶名和用戶的訪問權限。同樣的,設置數據字典高速緩存的大小通過設置共享池的大小間接實現。