程序結構
程序是作業系統中的一種機制,它可執行一系列的操作步。在有些作業系統中使用作業(job)或任務(task)的術語。一個程序通常有它自己的專用存儲區。oracle程序的體系結構設計使性能最大。
oracle執行個體有兩種類型:單程序執行個體和多程序執行個體。
單程序oracle(又稱單用oracle)是一種資料庫系統,一個程序執行全部oracle代碼。由于oracle部分和客戶應用程式不能分别以程序執行,是以oracle的代碼和使用者的資料庫應用是單個程序執行。
在單程序環境下的oracle 執行個體,僅允許一個使用者可存取。例如在ms-dos上運作oracle 。
多程序oracle執行個體(又稱多使用者oracle)使用多個程序來執行oracle的不同部分 ,對于每一個連接配接的使用者都有一個程序。
在多程序系統中,程序分為兩類:使用者程序和oracle程序。當一使用者運作一應用程式,如pro*c程式或一個oracle工具(如sql*plus),為使用者運作的應用建立一個使用者程序。oracle程序又分為兩類:伺服器程序和背景程序。伺服器程序用于
處理連接配接到該執行個體的使用者程序的請求。當應用和oracele是在同一台機器上運作,而不再通過網絡,一般将使用者程序和它相應的伺服器程序組合成單個的程序,可降低系統開銷。然而,當應用和oracle運作在不同的機器上時,使用者程序經過一個分離伺服器程序與oracle通信。它可執行下列任務:
對應用所發出的sql語句進行文法分析和執行。
從磁盤(資料檔案)中讀入必要的資料塊到sga的共享資料庫緩沖區(該塊不在緩沖區時)。
将結果傳回給應用程式處理。
系統為了使性能最好和協調多個使用者,在多程序系統中使用一些附加程序,稱為背景程序。在許多作業系統中,背景程序是在執行個體啟動時自動地建立。一個oracle執行個體可以有許多背景程序,但它們不是一直存在。背景程序的名字為:
dbwr 資料庫寫入程式;
lgwr 日志寫入程式;
ckpt 檢查點;
smon 系統監控;
pmon 程序監控;
arch 歸檔;
reco 恢複;
lckn 封鎖;
dnnn 排程程序;
snnn 伺服器。
每個背景程序與oracle資料庫的不同部分互動。
下面對背景程序的功能作簡單介紹:
dbwr程序:該程序執行将緩沖區寫入資料檔案,是負責緩沖存儲區管理的一個oracle背景程序。當緩沖區中的一緩沖區被修改,它被标志為“弄髒”,dbwr的主要任務是将“弄髒”的緩沖區寫入磁盤,使緩沖區保持“幹淨”。由于緩沖存儲區的緩沖區填入資料庫或被使用者程序弄髒,未用的緩沖區的數目減少。當未用的緩沖區下降到很少,以緻使用者程序要從磁盤讀入塊到記憶體存儲區時無法找到未用的緩沖區時,dbwr将管理緩沖存儲區,使使用者程序總可得到未用的緩沖區。
oracle采用lru(least recently used)算法(最近最少使用算法)保持記憶體中的資料塊是最近使用的,使i/o最小。在下列情況預示dbwr 要将弄髒的緩沖區寫入磁盤:
當一個伺服器程序将一緩沖區移入“弄髒”表,該弄髒表達到臨界長度時,該服務程序将通知dbwr進行寫。該臨界長度是為參數db-block-write-batch的值的一半。
當一個伺服器程序在lru表中查找db-block-max-scan-cnt緩沖區時,沒有查到未用的緩沖區,它停止查找并通知dbwr進行寫。出現逾時(每次3秒),dbwr 将通知本身。當出現檢查點時,lgwr将通知dbwr.在前兩種情況下,dbwr将弄髒表中的塊寫入磁盤,每次可寫的塊數由初始化參數db-block-write-batch所指定。如果弄髒表中沒有該參數指定塊數的緩沖區,dbwr從lur表中查找另外一個弄髒緩沖區。
如果dbwr在三秒内未活動,則出現逾時。在這種情況下dbwr對lru表查找指定數目的緩沖區,将所找到任何弄髒緩沖區寫入磁盤。每當出現逾時,dbwr查找一個新的緩沖區組。每次由dbwr查找的緩沖區的數目是為寝化參數db-block-write-batch的值的二倍。如果資料庫空運轉,dbwr最終将全部緩沖區存儲區寫入磁盤。
在出現檢查點時,lgwr指定一修改緩沖區表必須寫入到磁盤。dbwr将指定的緩沖區寫入磁盤。
在有些平台上,一個執行個體可有多個dbwr。在這樣的執行個體中,一些塊可寫入一磁盤,另一些塊可寫入其它磁盤。參數db-writers控制dbwr程序個數。
lgwr程序:該程序将日志緩沖區寫入磁盤上的一個日志檔案,它是負責管理日志緩沖區的一個oracle背景程序。lgwr程序将自上次寫入磁盤以來的全部日志項輸出,lgwr輸出:
當使用者程序送出一事務時寫入一個送出記錄。
每三秒将日志緩沖區輸出。
當日志緩沖區的1/3已滿時将日志緩沖區輸出。
當dbwr将修改緩沖區寫入磁盤時則将日志緩沖區輸出。
lgwr程序同步地寫入到活動的鏡象線上日志檔案組。如果組中一個檔案被删除或不可用,lgwr 可繼續地寫入該組的其它檔案。
日志緩沖區是一個循環緩沖區。當lgwr将日志緩沖區的日志項寫入日志檔案後,伺服器程序可将新的日志項寫入到該日志緩沖區。lgwr 通常寫得很快,可確定日志緩沖區總有空間可寫入新的日志項。
注意:有時候當需要更多的日志緩沖區時,lwgr在一個事務送出前就将日志項寫出,而這些日志項僅當在以後事務送出後才永久化。
oracle使用快速送出機制,當使用者發出commit語句時,一個commit記錄立即放入日志緩沖區,但相應的資料緩沖區改變是被延遲,直到在更有效時才将它們寫入資料檔案。當一事務送出時,被賦給一個系統修改号(scn),它同僚務日志項一
起記錄在日志中。由于scn記錄在日志中,以緻在并行伺服器選項配置情況下,恢複操作可以同步。
ckpt程序:該程序在檢查點出現時,對全部資料檔案的标題進行修改,訓示該檢查點。在通常的情況下,該任務由lgwr執行。然而,如果檢查點明顯地降低系統性能時,可使ckpt程序運作,将原來由lgwr程序執行的檢查點的工作分離出來,由ckpt程序實作。對于許多應用情況,ckpt程序是不必要的。隻有當資料庫有許多資料檔案,lgwr在檢查點時明顯地降低性能才使ckpt運作。ckpt程序不将塊寫入磁盤,該工作是由dbwr完成的。
初始化參數checkpoint-process控制ckpt程序的使能或使不能。預設時為false,即為使不能。
smon程序:該程序執行個體啟動時執行執行個體恢複,還負責清理不再使用的臨時段。在具有并行伺服器選項的環境下,smon對有故障cpu或執行個體進行執行個體恢複。smon程序有規律地被呼醒,檢查是否需要,或者其它程序發現需要時可以被調用。
pmon程序:該程序在使用者程序出現故障時執行程序恢複,負責清理記憶體儲區和釋放該程序所使用的資源。例:它要重置活動事務表的狀态,釋放封鎖,将該故障的程序的id從活動程序表中移去。pmon還周期地檢查排程程序(dispatcher)和伺服器程序的狀态,如果已死,則重新啟動(不包括有意删除的程序)。
pmon有規律地被呼醒,檢查是否需要,或者其它程序發現需要時可以被調用。
reco程序:該程序是在具有分布式選項時所使用的一個程序,自動地解決在分布式事務中的故障。一個結點reco背景程序自動地連接配接到包含有懸而未決的分布式事務的其它資料庫中,reco自動地解決所有的懸而不決的事務。任何相應于已處理的懸而不決的事務的行将從每一個資料庫的懸挂事務表中删去。
當一資料庫伺服器的reco背景程序試圖建立同一遠端伺服器的通信,如果遠端伺服器是不可用或者網絡連接配接不能建立時,reco自動地在一個時間間隔之後再次連接配接。
reco背景程序僅當在允許分布式事務的系統中出現,而且distributed – transactions參數是大于0。
arch程序:該程序将已填滿的線上日志檔案拷貝到指定的儲存設備。當日志是為archivelog使用方式、并可自動地歸檔時arch程序才存在。
lckn程序:是在具有并行伺服器選件環境下使用,可多至10個程序(lck0,lck1……,lckarray),用于執行個體間的封鎖。
dnnn程序(排程程序):該程序允許使用者程序共享有限的伺服器程序(server process)。沒有排程程序時,每個使用者程序需要一個專用服務程序(dedicatedserver process)。對于多線索伺服器(multi-threaded server)可支援多個使用者程序。如果在系統中具有大量使用者,多線索伺服器可支援大量使用者,尤其在客戶_伺服器環境中。
在一個資料庫執行個體中可建立多個排程程序。對每種網絡協定至少建立一個排程程序。資料庫管理者根據作業系統中每個程序可連接配接數目的限制決定啟動的排程程式的最優數,在執行個體運作時可增加或删除排程程序。多線索伺服器需要sql*net版本2或更後的版本。在多線索伺服器的配置下,一個網絡接收器程序等待客戶應用連接配接請求,并将每一個發送到一個排程程序。如果不能将客戶應用連接配接到一排程
程序時,網絡接收器程序将啟動一個專用伺服器程序。該網絡接收器程序不是oracle執行個體的組成部分,它是處理與oracle有關的網絡程序的組成部分。在執行個體啟動時,該網絡接收器被打開,為使用者連接配接到oracle建立一通信路徑,然後每一個排程程序把連接配接請求的排程程序的位址給予于它的接收器。當一個使用者程序作連
接請求時,網絡接收器程序分析請求并決定該使用者是否可使用一排程程序。如果是,該網絡接收器程序傳回該排程程序的位址,之後使用者程序直接連接配接到該排程程序。有些使用者程序不能排程程序通信(如果使用sql*net以前的版本的使用者),網絡接收器程序不能将如此使用者連接配接到一排程程序。在這種情況下,網絡接收器建立一個專用伺服器程序,建立一種合适的連接配接。