Oracle DB 程序引數

2021-08-18 10:58:48 字數 4825 閱讀 9616

後台程序

後台程序負責保證資料庫的穩定工作,每當資料庫啟動時,這些後台程序會自動啟動,並且持續整 個例項的生命週期,每個程序負責乙個獨特的任務。

程序引數

程序縮寫

描述database writer

dbwn

負責把髒資料寫回磁碟

log writer

lgwr

負責把日誌資料寫到聯機日誌檔案

checkpoint

ckpt

負責檢查點操作

process monitor

pmon

負責維護使用者程序

system monitor

smon

負責例項恢復

archiver

arcn

負責歸檔操作,生成歸檔日誌

manageability monitor

mmon

和aw r

有關manageability monitor light

mmnl

和aw r

有關memory manager

mman

和自動sga

管理有關

job queue coordination process

cjqo

定時任務程序

recover writer

rvwr

和flashback database

功能有關

change tracking writer

ctwr

跟蹤資料塊變化,支援快速增量備份

1.dbwn

oracle 對於資料的修改都是在記憶體中進行的,oracle 不會直接修改磁碟上的資料,因此 oracle 在修改資料之前必須把資料從磁碟讀入到sga 中。這個模式就遇到兩個問題:首先,如何確保sga 中有足夠的空間來裝載這些資料?其次,修改後的資料終將寫回到磁碟上,這又是如何完成的?我 們就帶著這兩個問題來了解dbwn 程序的功能。

dbwn (database writer)程序的顯式作用是負責把 sga 中被修改的資料同步到磁碟檔案中。 每當sga 快取中的空閒空間變得過小時,dbwr程序就通過把髒資料寫到磁碟來釋放空間。dbwn 程序使用的是lru(least recently used )演算法工作的,也就是根據資料從最後一次被使用以來的 時間決定釋放那些資料,越久沒有用到的資料越先被清除。因此 dbwn 的隱式的作用是保證 buffer cache 中空閒資料塊的數量,避免 server process 從磁碟把資料讀入記憶體時沒有空間可用。

dbwn 的寫時機包括:

檢查點,即資料庫的檢查點動作會觸發 dbwn 程序工作;

如果乙個 sever process 在尋找可空閒資料塊時, 超過了一定閾值仍然沒能找到空閒塊,就 會觸發 dbwn 程序工作;

每 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就能夠解決問 題,不需要增加程序數量。

2.lgwr (log writer)

lgwr 程序的作用是吧log buffer中的日誌內容寫到聯機日誌檔案中,從而釋放 log 使用者buffer 空間。資料庫的所有修改操作(增、刪、改)都會生成日誌,這些日誌最初先儲存在 redo log buffer 中,然後在某個時刻由lgwr 程序寫入到磁碟的聯機日誌檔案中。

觸發lgwr 寫操作的原因有幾種:

使用者提交,即使用者發出 commit 指令時會觸發 lgwr 寫操作;

每三秒鐘定時喚醒;

如果使用的 log buffer 超過了配置的 1/3 時,即 1/3 滿會觸發 lgwr 的寫操作;

log buffer 中的日誌數量超過 1mb 時,即 1mb 限制也會觸發 lgwr 的寫操作;

由 dbwr 程序觸發

(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.ckpt(checkpoint)

所謂檢查點,代表著資料庫的一致性狀態。在檢查點時刻,資料檔案的內容和sga 中的內容 完全一致,也就是說在 sga 中進行的所有資料修改都被寫回到資料檔案上,而資料庫的一致性狀態 也正是從這個角度來描述的。

注意:檢查點所代表的資料一致和事務隔離級別所說的讀一致性不是乙個概念,後者是從資料完整性角度 來說的。而檢查點的資料一致僅指記憶體和磁碟的資料一樣,是從恢復的角度來說的,二者一定不能 混淆。雖然在檢查點時刻,系統中會有很多未提交事務,修改後的髒資料最終可能被提交,永久生 效,也有可能回滾,還原成修改前的樣子,但這不是檢查點所關心的。檢查點只關心恢復操作是否 可以從這一時刻開始。

在發生檢查點機制時,會同時有 dbwn 、lgwr 、ckpt 三組程序的活動。首先,dbwr程序 要把髒資料寫入的磁碟資料檔案中,當然這個操作也會觸發 lgwr 的工作。而 ckpt 程序只負責更 新控制檔案中的檢查點記錄,它的任務量並不像 dbwn 程序和 lgwr 程序那麼繁重.

4.pmon(process monitor)

這個後台程序用來監控使用者程序的。使用者程序可能由各種原因導致異常終止,比如網路故障、 使用者機器斷電等。這時使用者程序對應著的服務程序可能還占用著系統資源,如果這些資源不及時釋 放,就會影響正常使用者的工作。

pmon 程序就負責在發現使用者程序異常中止後的清理工作,以確保釋放占用的資源。比如,一 個使用者程序可以在異常中止之前正在處理事務,使用了若干鎖,突然使用者計算機斷電了,這些鎖沒 有被正常釋放,而且這些鎖永遠不會有機會被正常釋放,其他使用者可能就要永久等待這些鎖。這時 就需要pmon 程序強行進行清理工作,釋放這些被占用的資源,以保證其他使用者不會因為這些異常 中止程序的干擾。pmon 程序定期被喚醒,其他程序也會在需要時主動喚醒pmon 程序。

5.smon(system monitor)

如果遭遇資料庫異常關閉,sga 中還沒有來得及寫到磁碟的資訊就丟失了,資料庫再次啟動時,

就先要進行恢復工作,這種恢復叫做例項恢復(instance recovery )。smon 程序負責例項恢復,實

例恢復分成3 個階段。

前滾(roll forward):這一階段是讀取聯機日誌,找到最後一次檢查點之後的日誌內容, 並重做這些日誌,把資料庫恢復到上次例項關閉時的狀態,這時系統包含著提交和未提交的 事務。

開啟資料庫:為了減少使用者等待時間,oracle 選擇盡可能早地開啟資料庫,開啟資料庫以 後,再繼續進行恢復工作。現在使用者就可以使用資料庫。

回滾(roll back) :smon 程序回滾未提交的事務,server process 也可以進行部分回滾工作。

除了例項恢復,smon 程序還負責部分空間管理工作,包括:

如果使用字典管理表空間(dmt) ,smon 程序需要合併空閒 extents,以避免磁碟碎片, 這個功能叫做 coalesce,這個任務每 3 秒執行一次;

smon 程序負責清理臨時段,以釋放空間;

smon 程序也是定期被喚醒或者被其他程序主動喚醒。

6.arcn(archiver)

歸檔(archiver)程序負責歸檔模式的資料庫的歸檔操作。我們知道每個資料庫都必須要建立 至少兩組聯機日誌,這些日誌是迴圈使用的,也就是一組日誌寫滿後,lgwr 就切換到另一組日誌 繼續寫入,周而復始。因此稍早產生日誌終將被新的日誌覆蓋掉,這是非歸檔模式。而歸檔模式比 非歸檔模式多出的處理就是,在發生日誌切換時,arcn 程序被喚醒,把之前寫滿的日誌做乙個文 件拷貝,這個拷貝被儲存到乙個特殊的目錄下――歸檔目錄,這個拷貝就叫做歸檔日誌。每個聯機 日誌能夠被覆蓋的前提條件也相應地多了乙個,除了要完成檢查點,還必須完成歸檔操作。

歸檔模式就是確保資料庫所有操作日誌都被保留下來,這樣能夠最大程度的保證資料庫的可恢 復性。

arcn 程序就是完成這個拷貝動作,和dbwn 程序一樣,arcn 程序可以有多個,最多是 10 個(n 取值範圍為 0~9 )。資料庫的初始化引數 log_archive_max_processes 就是定義資料庫 啟動時執行的arcn 的個數。

Oracle db 引數檔案筆記

1.pfile 初始化引數都是以文字格式存放的,檔名建議使用initsid.ora,當使用pfile時,如果要修改初始化引數,只要手工編輯引數檔案就可以。2.spfile 因為spfile易於管理,並且可以使用rman進行備份,所以oracle建議使用spfile。spfile是以二進位制格式存放的...

Oracle DB日常操作

rac 啟動 關閉 啟動順序 首先啟動磁碟陣列,待陣列初始化完成後 約 2分鐘 啟動各節點伺服器 節點 1先啟動,再啟動節點 2 linux 下oracle rac 的簡單操作指令 1.啟動listner 切換到oracle 使用者,啟動 listner su oracle lsnrctl star...

rman備份還原oracle db

剛在測試環境做了乙個本地備份還原oracle db的實驗。記錄如下 1 lsnrctl start 開啟lisener 切換伺服器歸檔模式,如果已經是歸檔模式可跳過此步 sqlplus nolog 啟動sqlplus sql conn as sysdba 以dba 身份連線資料庫 sql shutd...