標籤:mon 主機 執行個體 監聽 pmon 重做 開始 src 隔離
(1) oracle database server = 執行個體+資料庫 通常情況下,我們把那個承載我們核心資料的系統稱為資料庫伺服器,但從嚴格意義上來說,它是由兩個部分組成的。 1.執行個體由記憶體結構和後台進程構成。每當啟動一個執行個體時,都會分配一個稱為系統全域區(SGA)的共用記憶體區,並啟動後台進程。 2.資料庫包括物理結構和邏輯結構。由於物理結構和邏輯結構是分開的,因此管理資料的實體儲存體時不會影響對邏輯儲存結構的訪問。(2) 串連到資料庫 1)串連:使用者進程和執行個體之間的通訊,可以看做一條實體路徑。 2)會話:使用者通過使用者進程與執行個體建立的特定的串連,可以看做是邏輯上的使用者同伺服器的通訊互動。 一個串連上可以建立0個、1個或多個會話。各個會話是單獨而且獨立的。(3)使用者進程和伺服器處理序互動 ①在安裝了oracle db 的節點(通常稱為“主機”或“資料庫伺服器)上啟動一個執行個體。 ②使用者啟動一個應用程式,該程式衍生了一個使用者進程。該應用程式嘗試建立一個與伺服器的串連(此串連可能是本地串連、客戶機/伺服器串連或來自中介層的三層串連)。 ③伺服器運行具有相應oracle net services處理常式的監聽程式監聽程式檢測到應用程式發出的串連請求,並建立一個代表使用者進程的專用伺服器處理序。 ④使用者運行一條DML類型的sql語句並提交交易處理。例如,使用者更改表中的客戶地址並提交更改 ⑤伺服器處理序接受該語句,並檢查共用池中是否包含相同的sql語句的共用sql地區。如果找到sql地區,伺服器處理序檢查使用者對於所請求資料的存取權限, 並且使用現有的共用sql地區處理該語句。如果沒有找到共用sql地區,則為該語句分配一個新的共用sql地區,以便對該語句進行分析和處理。 ⑥伺服器處理序從實際資料檔案(表)或資料庫緩衝區快取中儲存的值中檢索任何必須的資料值。 ⑦伺服器處理序修改SGA中的資料。因為提交了四五處理,所以日誌寫進程(LGWR)會立即將該事物處理記錄到重做記錄檔中。資料庫寫進程(DBWn)會待執行效率高時將修改後的塊永久寫入磁碟。 ⑧如果交易處理成功,則伺服器處理序將通過網路嚮應用程式發送一條訊息。如果交易處理不成功,則傳送一條錯誤訊息。 ⑨在整個過程中,其它後台進程同時在運行,用於監視是否有需要幹預的情況。此外,資料庫伺服器管理其他使用者的交易處理,並防止在請求相同資料的交易處理之間發生爭用。(4)記憶體結構詳解 PGA(Program Global Area):進程全域區,由每個服務進程、後台進程專有;每個進程都有一個PGA。 包含某個伺服器處理序或後台進程的資料及控制資訊的記憶體地區。 SGA(System Global Area):系統全域區,由所有服務進程和後台進程共用。包含一個oracle db執行個體的資料和控制資訊。 主要包含以下資料結構 1)database buffer cache(資料庫緩衝區快取):存放從資料檔案讀取的資料區塊的副本。 Oracle DB 使用者進程第一次需要特定資料片段時,將在資料庫緩衝區快取中搜尋資料。如果該進程在快取中找到 資料(稱為快取命中),則直接從記憶體中讀取資料。如果進程在快取中找不到資料(稱為快取未命中),則 在訪問資料之前,必須將磁碟上的資料檔案中的資料區塊複製到快取中的緩衝區中。快取命中時訪問資料要比快取未命中時訪問資料快。 2)redo log buffer(重做日誌緩衝區):迴圈緩衝區,用於存放有關對資料庫所做更改的資訊,包含重做條目,這些條目包含由DML和DDL等操作進行的 重要更改的資訊。如果需要,將使用重做條目進行資料庫恢複。 3)shared pool(共用池):用來緩衝可在使用者間共用的各種結構,包含庫告訴緩衝、資料字典快取、sql查詢結果告訴緩衝、 PL/SQL函數結果快取、並執行訊息的緩衝區以及控制結構。 4)large pool(大型池):為某些大型進程(例如oracle備份和恢複操作)、I/O伺服器處理序、共用伺服器的會話記憶體和Oracle XA介面(在交易處理與多個資料庫互動時使用)提供大型記憶體配置的可選地區。 5)Java池:用於java虛擬機器(jvm)中特定於會話的所有Java代碼和資料。 6)streams pool(流池):oracle streams使用它來儲存捕獲和應用操作所需的資訊。(5)進程體繫結構 oracle db 系統的進程主要分為兩組: 1.運行應用程式或oracle工具代碼的使用者進程 2.運行oracle db伺服器代碼的oracle db進程(包括伺服器處理序和後台進程) 當使用者運行應用程式或oracle工具(例如sql*plus)時,oracle db會建立一個“使用者進程”以運行該使用者的應用程式。oracle db 還會建立一個“伺服器處理序”以執行該使用者進程發出的命令。此外,oracle伺服器還會為執行個體建立一組“後台進程”,這些進程不僅彼此互動,而且還與作業系統互動,以便管理記憶體結構,通過非同步執行I/O操作將資料寫入磁碟,並執行其它需要的任務。 進程結構圖
1)伺服器處理序
參考資料:http://blog.csdn.net/sunansheng/article/details/51281605?locationNum=4&fps=1
:http://www.cnblogs.com/lamiyiyi/p/lamiyiyi_oracle.html
oracle db建立伺服器處理序以處理串連到執行個體的使用者進程的請求。在某些情況下,當應用程式和oracle db在同一台電腦上操作時,可以將使用者進程和相應的伺服器處理序合并為一個進程,以減少系統開銷。但是,當應用程式和oracle db在不同電腦上運行時,使用者進程總是通過單獨的伺服器處理序與oracle db通訊。
代表每個使用者的應用程式建立的伺服器處理序可以執行以下一項或多項操作:
①對通過應用程式發出的sql語句進行文法分析和運行。
②從磁碟上的資料檔案中將必要的資料區塊讀取到SGA的共用資料庫緩衝區中(如果相應的資料區塊目前尚未在SGA中)。
③返回結果,使應用程式可以處理資訊。
2)後台進程
1.database write--資料寫入 DBWn
作用:把SGA中被修改的資料同步到磁碟檔案中。保證Buffer Cache中有足夠的空閑資料區塊數量。
PS:如果LGWR出現故障,DBWR不會聽從CKPT命令罷工,因為Oracle在將資料緩衝區資料寫到磁碟前,會先進行日誌緩衝區寫進記錄檔的操作,並耐心的等待其先完成,才會去完成這個記憶體刷到磁碟的動作,這就是所謂的凡事有記錄。
觸發條件:1、檢查點CKPT 觸發DBWn進程
2、一個服務進程在設定的時間內沒有找到空閑塊
3、每三秒自動喚醒一次
對於一個大型資料庫或者修改非常頻繁的系統而言,僅靠一個DBWn 進程為所有資料檔案的寫 操作提供服務,可能會力不從心。因此,Oracle 允許同時運行多個 DBWn 進程,以分擔繁重的寫負 載。這就是 DBWn 中n 的來曆。資料庫中最多可以使用 20 個DBWn 進程(n 從0~9 ,a~i)。資料庫 初始化參數DB_WRITER_PROCESSES 就是用來定義DBWn 進程數量。如果沒有定義這個參數, Oracle 預設時按照 CPU 的數量來決定需要的進程個數。每8 個CPU 分配一個進程。
Oracle 推薦在增加 DBWn 進程數量之前,要先考慮使用非同步 IO,有可能非同步 IO就能夠解決問 題,不需要增加進程數量。
設定:DB_WRITER_PROCESS用來定義DBWn進程數量。(commit命令只是把記錄修改寫入記錄檔,不是把修改後的資料寫入資料檔案)
2.log write:--記錄檔寫入 LGWR
作用:LGWR 進程的作用是吧Log Buffer中的日誌內容寫到聯機記錄檔中,從而釋放 Log 使用者Buffer 空間。資料庫的所有修改操作(增、刪、改)都會組建記錄檔,這些日誌最初先儲存在 Redo Log Buffer 中,然後在某個時刻由LGWR 進程寫入到磁碟的聯機記錄檔中。
觸發條件:1、使用者發出commit命令。(在oracle中稱為快速提交機制(fast commit)):把redo log buffer中的記錄寫入記錄檔,寫入一條提交的記錄
2、每三秒定時喚醒;
3、如果使用的 Log Buffer 超過了配置的 1/3 時,即 1/3 滿會觸發 LGWR 的寫操作;
4、Log Buffer 中的日誌數量超過 1MB 時,即 1MB 限制也會觸發 LGWR 的寫操作;
5、聯機記錄檔切換也將觸發LGWR;
6、DBWR進程觸發:DBWn視圖將髒資料區塊寫入磁碟先檢測他的相關redo記錄是否寫入聯機記錄檔,如果沒有就通知LGWR進程。在oracle中成為提前寫機制(write ahead):redo記錄先於資料記錄被寫入磁碟。
(1)提前寫。
Oracle 使用的是提前寫(Write-Ahead)機制,即和一個資料區塊相關聯的的 Redo記錄必須先於 資料區塊本身被記錄到磁碟中。這就意味著,當DBWn 進程試圖把一個髒資料區塊寫到磁碟上之前, DBWn 進程會先確定和這個資料區塊相關聯的所有Redo記錄都已經被寫到聯機記錄檔中了,如果 沒有滿足這個前提條件,那麼 DBWn 進程就會通知 LGWR 進程,等待 LGWR 進程把相關日誌都寫 完後,DBWn 進程再把資料區塊內容寫到磁碟檔案中。
(2)快速提交。
每當使用者發出Commit命令時,Oracle 只是會把Redo Log Buffer 中的記錄寫到記錄檔中,同 時會在日誌中寫入一條代表事務已經提交的記錄(Commit Record)。但是這個事務所修改到的資料 塊並不會被寫到資料檔案中。或者說Oracle 對Commit操作成功的定義是這樣的:只要這個事務的 Redo Record被寫到記錄檔中,這個事務就算是 Commit成功了,至於事務修改的資料是否記錄到 資料檔案沒有任何關係。這也就是Oracle 的快速提交(Fast Commit)機制。
提前寫(Write Ahead)和快速提交(Fast Commit)是 Oracle 兩個很重要的運行機制,這兩個機 制保證了事務提交不必等待資料寫到磁碟,而之所以採用這種機制,也是平衡效能和可用性的結果。
對於一個繁忙的OLTP 系統來說,同時會有大量的事務發生,因此同時會有大量的Commit請 求,這時LGWR 進程就可以把許多的 Commit請求批量的寫入記錄檔,而不是針對每個Commit 請求立即處理,這種機制也叫做Group Commit。
3.checkpoint:--檢查點事件 CKPT
作用:“檢查點”是一種資料結構,用於定義資料庫的重做線程中的系統更改號(SCN(system change number或者system commit number))。檢查點被記錄在控制檔案和每個資料檔案頭中,它們是恢複操作的關鍵元素。出現檢測點時刻資料檔案的內容與SGA中的內容一致,這不是一個單獨的進程,要和前兩個進程一起工作呦。DBWR寫入髒資料,同時觸發LGWR進程,而 CKPT 進程只負責更 新控制檔案中的檢查點記錄,它的任務量並不像 DBWn 進程和 LGWR 進程那麼繁重.
注意:檢查點所代表的資料一致和交易隔離等級所說的讀一致性不是一個概念,後者是從資料完整性角度 來說的。而檢查點的資料一致僅指記憶體和磁碟的資料一樣,是從恢複的角度來說的,二者一定不能 混淆。雖然在檢查點時刻,系統中會有很多未提交事務,修改後的髒資料最終可能被提交,永久生 效,也有可能復原,還原成修改前的樣子,但這不是檢查點所關心的。檢查點只關心恢複操作是否 可以從這一時刻開始。
CKPT更新控制檔案中的檢查點記錄。通過設定某參數調整來控制CKPT的觸發時間。參數是FAST START MTTR TARGET。 觸發條件:日誌切換(log switch)會觸發檢查點。
4.system monitor:--執行個體維護進程 系統監控器 SMON
如果遭遇資料庫異常關閉,SGA 中還沒有來得及寫到磁碟的資訊就丟失了,資料庫再次啟動時,就先要進行恢複工作,這種恢複叫做執行個體恢複(Instance Recovery )。SMON 進程負責執行個體恢複,執行個體恢複分成3 個階段。
前滾(Roll Forward):這一階段是讀取聯機日誌,找到最後一次檢查點之後的日誌內容, 並重做這些日誌,把資料庫恢複到上次執行個體關閉時的狀態,這時系統包含著提交和未提交的 事務。
開啟資料庫:為了減少使用者等待時間,Oracle 選擇儘可能早地開啟資料庫,開啟資料庫以 後,再繼續進行恢複工作。現在使用者就可以使用資料庫。
復原(Roll Back) :SMON 進程復原未提交的事務,Server Process 也可以進行部分復原工作。
除了執行個體恢複,SMON 進程還負責部分空間管理工作,包括:
如果使用字典管理資料表空間(DMT) ,SMON 進程需要合并空閑 Extents,以避免磁碟片段, 這個功能叫做 Coalesce,這個任務每 3 秒執行一次;
SMON 進程負責清理臨時段,以釋放空間;
觸發條件:SMON 進程也是定期被喚醒或者被其他進程主動喚醒
5.process monitor:--維護使用者進程 進程監控器 PMON
作用:1、發現使用者進程異常終止,並進行清理。釋放佔用資源。(清理異常終止使用者使用的鎖)
2、向監聽程式動態註冊執行個體。
觸發條件:定時被喚醒,其它進程也會主動喚醒它。
6.Distributed Database Recovery :-- 用於分散式資料庫的恢複 RECO
作用:某個應用跨越多個資料庫,需要都提交成功,事務才會成功,否則全部復原
7.archive:--歸檔操作 ARCn
作用:歸檔(Archiver)進程負責歸檔模式的資料庫的歸檔操作。我們知道每個資料庫都必須要建立 至少兩組聯機日誌,這些日誌是迴圈使用的,也就是一組日誌寫滿後,LGWR 就切換到另一組日誌 繼續寫入,周而復始。因此稍早產生日誌終將被新的日誌覆蓋掉,這是非歸檔模式。而歸檔模式比 非歸檔模式多出的處理就是,在發生日誌切換時,ARCn 進程被喚醒,把之前寫滿的日誌做一個文 件拷貝,這個拷貝被儲存到一個特殊的目錄下——歸檔目錄,這個拷貝就叫做歸檔日誌。每個聯機 日誌能夠被覆蓋的前提條件也相應地多了一個,除了要完成檢查點,還必須完成歸檔操作。
歸檔模式就是確保資料庫所有動作記錄都被保留下來,這樣能夠最大程度的保證資料庫的可恢 複性。
ARCn進程就是完成這個拷貝動作,和DBWn進程一樣,ARCn進程可以有多個,最多是10個(n取值範圍為0~9)。資料庫的初始化參數LOG_ARCHIVE_MAX_PROCESSES 就是定義資料庫啟動時啟動並執行ARCn的個數。
觸發條件:日誌切換時被LGWR喚醒。
8.LCKn 僅適用於RAC資料庫,最多可有10個進程(LCK0,LCK1,...,LCK9),用於執行個體間的封鎖。
oracle 體繫結構(一)