Oracle資料庫的兩種連接配接方式:專用伺服器連接配接 和 共享伺服器連接配接
一、Oracle資料庫組成:
oracle server 是由:執行個體和資料庫組成;
oracle資料庫由:資料檔案 重做日志檔案 臨時檔案 控制檔案 參數檔案 密碼檔案等組成 (其中最重要的就是資料檔案和重做日志檔案)
oracle執行個體是由:系統全局區SGA的共享記憶體塊以及大量背景程序構成。
SGA包括:資料庫緩沖區緩存、日志緩沖區、共享池、還有(大池、Java池、流池)
背景程序:DBWR(資料庫寫程序);LGWR(日志寫程序);CKPT(檢查點);SMON(系統監控程序);PMON(程序監控);ARCH(歸檔程序);RECO恢複;LCKN封鎖;等
PGA:使用者會話還需要伺服器端的記憶體,此記憶體不共享,也稱為程式全局區PGA,每個會話都有自己的PGA。
-----從Oracle12C起,全局臨時表所産生的undo可以存放在臨時表空間中。
《控制檔案》
控制檔案是一個相當小的檔案(極端情況下能增長到64MB),它儲存了資料庫需要的一些檔案的位置,還記錄了一些其他資訊,如:檢查點的有關資訊,資料庫名、資料庫建立是時間戳、歸檔重做日志的曆史以及RMAN資訊等。
《重做日志》
重做日志分為線上重做日志redo和歸檔重做日志。
online Redo log files--線上重做日志,又稱聯機重做日志,指Oracle以SQL腳本的形式實時記錄資料庫的資料更新,換句話說,實時儲存已執行的SQL腳本到線上日志檔案中(按特定的格式)。
注意:線上重做日志最重要的目标就是在執行個體失敗後我們能夠恢複已經送出的事務;
Archive Redo log files--歸檔重做日志,簡稱歸檔日志,指當條件滿足時,Oracle将線上重做日志以檔案形式儲存到硬碟(持久化)。
SGA和PGA
PGA是使用者程序區,也可以這麼了解,如果并發500 那麼就需要配置設定500M的PGA
PGA是程序專用的記憶體區
《重做緩沖區》
---實際上,LGWR程序會在以下任何一種情況發生時把緩沖區資料重新整理輸出到磁盤:
1、每3秒一次
2、發生送出或復原請求時
3、要求LGWR切換日志檔案時
4、重做緩沖區用滿三分之一,或者緩存重做日志資料達到1MB時;
資料需要寫到線上重做日志時,在它們被寫到磁盤之前,需要在重做緩沖區中臨時緩存這些資料;
重做日志緩沖區的預設大小是由log_buffer參數控制;
《塊緩沖區緩存block buffer cache》
Oracle将資料庫塊寫到磁盤之前,或從磁盤上讀取資料庫塊之後,就會把這些資料庫塊存儲在塊緩沖區緩存中;
塊緩沖區緩存不能太小,要不然 我們的查詢就會永遠也執行不完。也不能太大,因為又會搶占其他程序的資源;
資料庫中隻有一種塊大小:2KB 4KB 8KB 16KB 32KB中的一種;如果要修改資料庫塊,在安裝資料庫的時候 在init.ora檔案中指定:db_block_size=16384 即可,16384是16K
《共享池shared pool》
共享池就是Oracle緩存一些程式資料的地方,在解析一個查詢時,解析得到的結果就緩存在那裡。在完成解析整個查詢的任務之前,Oracle會搜尋共享池,看看這個工作是否完成;
共享池的特點是有大量小的記憶體塊,一般為4KB或更小。我們的目标是使用小塊的記憶體來避免碎片問題,如果大小各不同 很可能出現碎片問題。
《大池large pool》
大池是用于被大塊記憶體的配置設定,而共享池無法處理這麼大的記憶體塊。
《JAVA池》
JAVA池目的是支援在資料庫中運作JAVA,如果用JAVA編寫一個存儲過程,Oracle會在處理代碼時使用Java池的記憶體。
《流池》
流池被用來緩沖隊列消息,而且流池對于:goldengate streams等很重要,這些場景必須要有流池;
---SGA自動管理時,statistics_level參數必須被設定為typical或者all,因為如果統計資訊收集功能沒有啟用,資料庫就沒有相關的曆史記錄來判斷各個元件所需的記憶體大小。
二、Oracle資料庫程序
一個Oracle執行個體主要有3類程序:伺服器程序 背景程序 從屬程序
---通過v$bgprocess視圖可以檢視資料庫所有可能的背景程序
select paddr,name,description from v$bgprocess order by paddr desc;
通過查詢v$process中pname不為空的記錄,來檢視系統中正在運作的背景程序;
注意:背景程序也分為兩類:一類是有特定任務的程序,另一種是能夠執行各種其他任務的程序(如工具程序)
---在12C中檢視啟動的背景程序:
select paddr,name,description from v$bgprocess where paddr <>'00' order by paddr desc;
(在12C中将啟動大約22個背景程序,而在11GR2中 隻有17個背景程序)
1、PMON程序螢幕
程序螢幕(process monitor)負責在連接配接出現異常終止後進行清理工作。(例如:一個專用伺服器失敗或者出于某種原因被結束掉,就要由PMON程序負責善後并釋放資源。PMON會復原未送出的工作,釋放鎖,并釋放之前為失敗程序配置設定的SGA資源)
注意:在Oracle12C之前,PMON還負責處理注冊監聽的任務,從Oracle12C開始 改由專門的監聽注冊背景程序來注冊執行個體和服務到監聽器
2、LREG監聽注冊程序
從Oracle12C開始,LREG程序負責将資料庫執行個體和服務注冊到監聽器中;
3、SMON系統螢幕
SMON程序用來做所有系統級的任務。SMON所做的工作包括如下幾種:
①:清理臨時表空間:(并不是說完全不需要手動清理的)
②:合并空閑表空間:(隻有在使用資料字典的表空間适用)
③:針對原來不可用的檔案恢複活動的事務:
④:執行RAC中失敗節點的執行個體恢複:
⑤:清理OBJ$:(OBJ$是一個底層的資料字典,資料庫中幾乎每個對象(表 索引 觸發器 視圖等)都在其中對應一個條目,很多時候,有些條目表示的可能是已經删除的對象,或者表示not there不在哪裡的對象)
⑥:管理撤銷段:SMON會負責實施撤銷段的自動上下線以及收縮撤銷段;
⑦:復原段離線:
4、RECO分布式資料庫恢複
reco有一個非常核心的任務:由于兩階段送出(2pc)期間的崩潰或連結丢失等原因,有些事務可能會保持在準備狀态,這個程序就是要恢複這些事務;
5、CKPT檢查點程序
實施檢查點主要是DBWn程序的工作,CKPT僅僅是協助實際運作檢查點的程序,來更新資料檔案的檔案頭;
6、DBWn資料庫塊寫入器
資料庫塊寫入器是負責将髒塊寫入磁盤的背景程序;
DBWn的性能至關重要,如果它寫出塊的速度不夠快,不能很快的釋放緩沖區,就會看到free buffer waits和write complete waits這兩個等待事件的數量和等待事件在增加;其實我們可以配置多個DBWn程序,實際上在Oracle11G可以配置36個,在Oracle12C則多達100個;
select name,description from v$bgprocess where description like 'db writer process%'; ----來檢視資料庫有幾個DBWn程序
7、LGWR日志寫入器:
LGWR程序負責将SGA中重做日志緩沖區的内容重新整理輸出到磁盤;
8、ARCn歸檔程序
該程序的任務是:當LGWR将一個線上重做日志檔案填滿時,就将其複制到另一個位置,此後這些歸檔的重做日志檔案就可以用于完成媒體恢複;
9、DIAG診斷程序
該程序在以前的版本中專用語RAC環境中,從Oracle11G開始 利用ADR(進階診斷庫),它會負責監視實列的整體狀況,而且會捕獲處理實列失敗時的所需資訊;
10、FBDA閃回資料歸檔程序
11、DBRM資料庫資料總管程序
DBRM程序會去實施那些為一個資料庫執行個體配置的資源計劃;
12.還有一些其他程序:
LMON 鎖螢幕
LMD 鎖管理器守護
LMSn 鎖管理器伺服器
LCK0 鎖程序
本文轉自一個笨小孩51CTO部落格,原文連結:http://blog.51cto.com/fengfeng688/1933413 ,如需轉載請自行聯系原作者