Oracle體系結構2

singing 10年前發布 | 25K 次閱讀 Oracle 數據庫服務器
Oracle實例
當把一個關閉的數據庫手動啟動并裝載和打開,從而使數據庫變得有效時,分別經歷的階段如下:
l啟動實例而不裝載數據庫
l數據庫裝載
l數據庫打開
1.啟動實例,此時執行如下操作:
l從OS指定位置處檢索服務器參數文件,如果沒找到則通過啟動命令中是使用SPFILE還是PFILE替代默認的文件使用該文本初始化參數文件
l從初始化文件中讀取初始化參數
l基于初始化參數值分配SGA
l啟動Oracle后臺進程
l打開警告日志和跟蹤文件,并寫入警告日志文件
此階段數據庫與實例沒有關聯,可以執行數據庫創建、備份和恢復的等特定任務。
2.數據庫裝載,其特征如下:
l獲取初始化參數文件中指定的控制文件參數(CONTROL_FILES)的值,打開控制文件并從其中找到數據文件和聯機重做日志文件的名字
l在一個已裝載的數據庫中,數據庫是關閉的,僅僅DBA能夠訪問,管理員可以利用本特點在需要完成特定任務時保持數據庫裝載狀態
3.數據庫打開,打開后的數據庫是可訪問的,執行如下操作:
l打開除撤銷表空間外其它表空間中的數據文件
l獲取撤銷表空間
l打開聯機重做日志文件
數據庫關閉
當把一個打開的數據庫手動關閉,使其從有效狀態進入無效狀態從而執行一些維護任務時,分
別經歷的階段如下:
l數據庫關閉
l數據庫卸載
l數據庫實例關閉
 
1.關閉模式
  有4種關閉模式,其行為是不同的,如下表:
 
行為
ABORD
IMMEDIATE
TRANSCATIONAL
NORMAL
允許新用戶連接?
NO
NO
NO
NO
等待直到當前會話結束?
NO
NO
NO
YES
等待直到事務會話結束?
NO
NO
YES
YES
執行一個檢查點并關閉文件?
NO
YES
YES
YES
可能的關閉語句分別如下:
lSHUTDOWN ABORD
  用于緊急情形,例如其它的關閉方式無法成功關閉時。強制模式的關閉速度最快,但再重新打開數據庫時速度也是最慢的,因為要支持一個恢復過程以確保數據的一致性。
1.關閉模式
可能的關閉語句分別如下(續):
lSHUTDOWN IMMEDIATE
  立即模式的關閉速度僅次于ABORD,此時Oracle會中斷任何正在執行的SQL語句并且將連接的用戶斷開;同時活動事務也被中斷,未提交的修改被置成回滾。
lSHUTDOWN TRANSACTIONAL
  事務模式防止新事物的啟動,但會等待當前所有事務執行完成。自然地,關閉時間依賴于當活動前事務執行的時間
lSHUTDOWN NORMAL
正常模式是默認的關閉模式,會等待所有已連接用戶斷開連接后關閉。
2.數據庫關閉三階段
(1).關閉階段
數據庫關閉過程中隱含的操作取決于數據庫是正常關閉還是非正常關閉:
1).正常關閉
即沒有使用ABORD,此時Oracle會把SGA中的數據寫入到數據文件和聯機重做日志文件中,接著會關閉聯機數據文件和重做日志文件。所有的脫機表空間中的脫機數據文件已經被關閉,如果此時再重新打開數據庫,則脫機表空間仍然會保持脫機狀態。
在這個階段,數據庫已經被關閉并且不能正常被訪問,而控制文件依然還是保持被打開狀態。
 
2.數據庫關閉三階段
(1).關閉階段(續)
1).非正常關閉
即使用了ABORD或數據庫發生了非正常的終止,此時當前打開的數據庫實例會被關閉并且會立即關閉數據庫。SGA中的緩沖數據不會被寫入到數據文件和聯機重做日志文件中。當接下來重新打開數據庫時,Oracle會自動地先恢復該實例。
(2).卸載階段
在數據庫關閉以后執行本階段,此階段Oracle會從實例中卸載數據庫。數據庫卸載后,Oracle會關閉控制文件,但是實例仍然會保留在內存中。
 
2.數據庫關閉三階段
(3).實例關閉階段
這是數據庫關閉的最后一個階段,當數據庫實例關閉以后,內存中的SGA會被清除,后臺進程也會被停止。
 
檢查點
  檢查點是在協調數據庫關閉、實例恢復和常規操作一致性方面非常重要的一個循環處理機制。檢查點有兩層相關的含義:
l檢查點是一個指示檢查點位置的數據結構,當實例恢復時它是在重做日志流中的SCN(系統該變號)
l當將數據庫緩沖區中的數據寫入到磁盤時檢查點是一種寫事件
 
  1.檢查點的目的包括:
l縮短因介質或實例故障恢復所需要的時間
l確保緩沖區的數據規則的寫入到硬盤
l確保在一致性的關閉時將提交的數據寫入到磁盤
2.Oracle實例何時初始化檢查點 
  檢查點進程(CKPT)用來將檢查點寫入到數據文件頭部和控制文件中,一般包括以下幾種情形:
l線程檢查點
在某個特點的目標任務前,數據庫在一個特定的線程中將所有被重做日志修改的緩沖區寫入到磁盤中。一組數據庫中所有實例檢查點(檢查點集合)稱為數據庫檢查點,數據庫檢查點會在以下幾種情況下發生:
u并發的數據庫關閉
u聯機重做日志切換
uALTER SYSTEM CHECKPOINT語句執行時
uALTER DATABASE BACKUP BEGIN語句執行時
2.Oracle實例何時初始化檢查點(續) 
l表空間和數據文件檢查點
表空間檢查點是一組為表空間中每一個數據文件服務的檢查點集合,將表空間設置為脫機、只讀以及收縮數據文件或者執行ALTER DATABASE BACKUP BEGIN語句時會產生
l增量檢查點
增量檢查點是一類線程檢查點,當聯機重做日志發生交換時使用增量檢查點來部分的消除對大數據塊的寫入。數據庫寫入進程(DBWn)至少每3秒鐘會檢查一次其是否要執行數據寫入工作,當DBWn寫入臟數據,它將提取檢查點的位置,從而產生一個CKPT將檢查點的位置寫入到控制文件,但不會寫入到數據文件的頭部。
實例恢復
1.實例恢復的目的 
  當時實例失敗時,實例恢復能確保數據庫保持在一個一致性狀態,因為無論Oracle數據庫如何管理數據庫的變化,都可能發生數據庫文件不一致的情況。
重做日志線程(實例生成的重做日志)是實例產生的所有發生了變化的記錄。單一實例的數據庫具有唯一的一個重做日志線程。
事務提交時,日志寫入進程(LGWR)將保留在內存的重做日志實體和事務的系統改變號(SCN)寫入到聯機重做日志中,然而當DBWn工作時,DBWn都會將修改了的數據塊寫入到數據文件中,因此未提交的修改會臨時保存在數據文件中而已經提交的修改卻不再保存在數據文件中。
1.實例恢復的目的(續) 
  當由于SHUTDWON ABORD或其它原因導致打開的數據庫發生實例失敗時,會發生如下情況:
l提交的數據塊僅僅寫入到的聯機重做日志而沒有寫入到數據文件中,這些變化必須要應用到數據庫中,即寫入到數據文件中,否則數據不一致
l事務失敗時,數據文件中可能包含未提交事務的數據,而這種改變應該被回滾以保持數據庫的一致性
實例恢復就是用聯機重做日志文件來同步當前的聯機數據文件,以確保它們是一致的。
 
2.何時會執行實例恢復
  當數據庫實例打開為讀/寫模式時,控制文件中的重做日志線程被標記為打開;如果數據庫被關閉時是一致(日志文件和數據文件的一致)的,則日志線程被標記為關閉。實例恢復就是依據日志線程的狀態的。如果日志線程的標記是打開的,但是卻沒有活動實例的線程隊列來與日志線程通訊,則需要進行實例恢復。
以下兩種情況下,Oracle會自動恢復實例:
l單一實例或集群實例數據庫中實例失敗后的第一次打開
l集群實例環境中,部分實例失敗
l
 
 
3.實例恢復中檢查點的重要性
  實例恢復使用檢查點來確定那些修改要應用到數據文件中去。如果已提交修改的SCN小于檢查點SCN,則檢查點的位置將被寫入到數據文件中。
在實例恢復期間,數據庫必須將檢查點位置和重做日志線程之間的修改應用到數據文件中。部分改變可能已經寫入到數據文件中,然而僅僅那些系統該變號小于檢查點位置的會被寫入磁盤。
 
4.實例恢復階段
1).緩存恢復(或稱為前滾階段)
首先是緩存恢復和前滾(向前滾動)階段,此時會將聯機重做日中記錄的所有改變重新應用到數據文件中。由于需要回滾的數據也被記錄在聯機重做日中,因此向前滾動也會產生相應的回滾段。
前滾會將聯機重做日中所有記錄了要求回滾的數據一直向前回滾直到前面某個時刻的狀態。完成前滾后,數據文件中就包含了所有聯機重做日中已提交修改的數據,數據文件中也就不再包含聯機重做日或數據文件中沒有提交的數據了。
2).事務恢復(又稱為回滾)階段
   前滾完成后,任何未提交的修改都會被撤銷。Oracle將SCN小于檢查SCN的已提交修改寫入磁盤。針對實例失敗前寫入到數據文件中的未提交修改,Oracle會申請撤銷塊用來執行回滾操作。
下圖說明了前滾和回滾兩個階段。
  
參數文件
   啟動實例可以使用服務器參數文件(推薦)也可以使用傳統的文本初始化文件。這些文件中包含的都是一系列的配置參數。
1.初始化參數
不同的環境中,Oracle都提供了很多初始化參數,而大部分參數無需修改,只有很少部分參數需要進行設置。
 1).初始化參數的功能分組
l 文件和目錄名字的參數
l 進程的限定數、數據庫資源或者數據庫自身的參數
l 設定容量大小的參數,如SGA的大小參數 
2).基本及高級參數
初始化參數分為基本參數和高級參數,大約30個左右。基本參數包括數據庫的名字、控制文件的位置、數據庫塊大小、撤銷表空間等。在極少數情況下,需要數據庫專家來調整高級參數以獲取更好的數據庫性能以滿足一些獨特的需求。
 
2.服務器參數文件
即數據庫管理的初始化文件,具有如下特性:
l必須在數據庫服務器主機上,且數據庫只有一個服務器參數文件
l只能被數據庫服務器讀取,而不能被客戶端讀取
l存儲在數據庫服務器主機上的服務器參數文件是持久的。對參數的修改,不但對當前實例有效,而且數據庫關閉和重新啟動后依然有效
 
使用服務器參數文件能夠消除需要維護多個本地文本初始化參數文件的問題。
 
3.文本初始化參數文件
即傳統的初始化文件,是包含了一些列初始化參數的文本文件,特點如下:
l數據庫關閉或啟動時,文本初始化參數文件必須駐留在連接到數據庫的那臺客戶端的機器上
l是文本格式而非二進制格式的
lOracle只能讀而不能寫該文件,對參數的修改必須手工進行
l使用ALTER SYSTEM修改參數只能在當前實例中有效。如果想要對參數的修改在重新啟動數據庫后也有效,必須要手工修改該文件然后重啟數據庫
 
下圖是使用多個文本初始化文件的例圖:
  
 
4. 初始化參數的修改
參數又可分為靜態參數和動態參數,其特征如下:
特征
靜態
動態
需要修改參數文件(文本和服務器)?
YES
NO
修改生效前需要重新啟動實例?
YES
NO
在《Oracle數據庫參考》中初始化參數項描述為“可變”?
NO
NO
修改只針對數據庫和實例
YES
NO
 
DB_BLOCK_SIZE、DB_NAME、COMPATIBLE是靜態參數。動態參數又分為會話級的和系統級的兩組,回話級的僅僅在當前會話中有效(如NLS_DATE_FORMAT),系統級的不僅在當前會話中而且在整個數據庫中都是有效的(如MEMORY_TARGET)。
 
4. 初始化參數的修改
可以使用ALTER SYSTEM SET語句來設置系統級參數所設置的范圍:
lSCOPE=MEMORY
參數的改變僅僅影響當前實例,數據庫重新啟動后失效
lSCOPE=SPFILE
參數的改變寫入到服務器參數文件,并且在當前實例中生效,必須重啟數據庫方能生效
lSCOPE=BOTH
是MEMORY和SPFILE的結合體
 
診斷文件
   Oracle使用故障診斷部件來預防、監測、診斷和解析數據庫的問題,這些問題一般包括代碼的bug、元數據損壞或客戶數據損壞。故障診斷部件的目的包括:
l 預先偵測問題
l 當偵測到問題時,減小損壞范圍并中斷數據庫服務
l 縮短問題診斷和解決的時間
l 簡化Oracle技術支持和客戶之間的交互過程
 
1.自動診斷信息庫
  ADR(Auto Diagnostic Repository)是一個基于文件的資料庫,用來存儲跟蹤文件、警告文件和數據庫健康監測報告等資料,其特征如下:
l具有統一的目錄結構
l具有一致的診斷數據格式
l提供統一的工具集
  這些特征能夠保證Oracle技術支持與客戶進行高效的交互。ADR是在數據庫之外的,因此當物理數據庫失效后Oracle還能訪問管理ADR。數據庫創建前可以創建ADR。
 
1).工作機制
  ADR采用問題預先跟蹤機制,而當危險錯誤發生時會產生內部錯誤。ADR跟蹤每個問題時都有一個問題鍵(文本描述的)。當同一個問題發生多次時,ADR對每一次問題的發生都創建一個帶時間戳的事件,事件具有事件ID(數字型)。事件發生時,ADR將事件警告發送給OEM。對問題的診斷和解決一般都是由事件警告入手的。
   由于一個危險錯誤多半表現在為在短時間內發生多次,即具有泛濫性。如果ADR找到了事件的起始,就會申請使用災害控制機制來控制事件的繼續發生。事件泛濫控制會生成警告日志。ADR通過這種方式能夠通知到管理員危險錯誤正在發生。
 
2).ADR結構
 ADR base是ADR的根目錄,ADR base可以包含多個ADR目錄用來存放不同的診斷數據,如警告、核心數據、事件、跟蹤信息和其它數據等。
  
 
 
預警日志
每個數據庫都有預警日志,是xml格式的,包含的內容如下:
l內部錯誤(ORA-600)、塊損壞錯誤(ORA-1578)和死鎖(ORA-60)
l管理操作如DDL語句
lSQL*PLUS命令如STARTUP、SHUTDWON、ARCHIVE LOG、RECOVERY
l自動刷新物化視圖時的錯誤
 
 
 
跟蹤文件
跟蹤文件是一個用來研究分析問題的管理員文件。
1.跟蹤文件的類型
   每個服務器進程和后臺進程都會周期性的寫一個相關的跟蹤文件,其內部是進程的環境、狀態、活躍性或者錯誤。
   SQL跟蹤也能靈活的創建跟蹤文件,用來記錄個性化的SQL語句執行信息。如果要跟蹤客戶標示、服務、模塊、動作、會話、實例和數據庫,則可以使用OEM或者DBMS_MONITER包。
   轉儲(dump)是一類特殊的跟蹤文件。鑒于跟蹤往往是連續的輸出,轉儲就是在某個時間點上對某個事件的診斷信息進行輸出。當事件發生時,數據庫中寫入一個或多個轉儲至事件目錄(專門創建的)。
2.跟蹤文件的位置
   ADR跟蹤文件存儲在跟蹤目錄下面,文件名是依賴平臺的,擴展名是.trc。一般是后臺進程跟蹤文件名帶有SID、后臺進程名字和操作系統進程號,如mytest_reco_10355.trc。服務器進程跟蹤文件名帶有SID、“ora”字符串和操作系統進程號,如mytest_ora_10304.trc。
   有時跟蹤文件中有相應的跟蹤映射文件( .trm )。 這些文件包含有關跟蹤文件的結構信息,用于搜索和導航。
 
 
 
基本內存結構
1.SGA
一組共享內存結構,包含實例的控制信息和數據。可以為所有的服務器進程和后臺進程所共享。
2.PGA
進程所專用的包含實例控制信息和數據的非共享內存區域。當一個進程啟動時它創建一段PGA,因此其也是為某個服務
器或后臺進程服務的,一組PGA構成總的PGA或者稱為實例PGA。數據庫PGA初始化參數是為實例PGA而非單個PGA所設置的。
  
 
3.UGA
   UGA(用戶全局區)是為用戶會話相連的一段內存區域。
 
 
4.軟件代碼區
   用來存儲正在運行或者準備運行的代碼的一部分內存,Oracle的代碼存在軟件代碼區,是與用戶程序完全不同的。
 
Oracle內存管理模式
1.自動內存管理(AMM)
   設定實例內存的目標大小,實例依據PGA和SGA的實際需要自動分配和自動設定內存的大小。這是默認的內存管理方式
2.自動共享內存管理(ASMM)
   這種內存的管理方式是部分的自動內存管理機制,通過設定SGA的目標大小,而對PGA的管理可以選擇給PGA設置一個總的大小也可以選擇個性化的方式來管理PGA。
3.手工內存管理
   這種模式不用設置總的內存大小,而是逐一設置PGA和SGA實例的各個參數。
 
UGA

    UGA是分配給會話變量的內存,包括登錄信息以及其它數據庫會話必須的信息。本質上UGA存儲的是會話的狀態。例如會話裝載一個PL/SQL包
到內存中,則UGA包含包的狀態,這些狀態是包變量在某個特定時刻的一系列的值。當包中子程序改變了變量的值,則包的狀態也會發生改變。默認情況下,包中變量會在會話的生命期內保持一個唯一的狀態。
   OLAP頁池也存儲在UGA,池管理OLAP的頁(等價于數據塊)。OLAP會話開始時分配頁池、而會話結束時釋放頁池。
   會話在其生命期內UGA必須是有效,因而在共享服務器連接時UGA不能放在PGA區域,其原因是PGA是分配給單個進程的。因為在共享服務器連接時UGA存在SGA而在專用服務器連接時放在PGA。
 
PGA
l分配給OS進程或線程的、且不可為其它OS進程或線程所共享因其進程專用性,故不能是在SGA中分配的
lPGA是一個內存堆,其中包含有專用或共享服務器進程所需的會話變量;服務器進程從PGA中分配內存結構
1.私有SQL區域

l保存解析后的SQL語句以及其它會話特定要求的信息
l服務器進程執行SQL語句或PL/SQL代碼時,使用私有SQL區域干三件事:綁定變量值、查詢執行的狀態信息、查詢執行工作區.執行完成后客戶端可以使用一個游標指向私有SQL區域,如下圖:
 
SGA
1.數據庫高速緩沖區
l又稱為高速緩存緩沖區,用來存儲從數據文件的數據塊中讀取的數據的副本
l是最主要的內存地址,緩存管理器用來臨時緩存當前或最近讀取的數據塊
l所有的連接用戶均可訪問本區域
 
Oracle使用高速緩存緩沖區來達到如下兩個目的:
l優化物理I/O
l將經常被訪問的塊保存在緩存中,而將很少訪問的塊寫入到磁盤
 
1.數據庫高速緩沖區
 (1).高速緩沖區的狀態
未使用狀態:從未被使用或當前未使用的內存,最容易被數據庫使用
干凈狀態:早前用過且當前包含一個某個時間點上具有讀一致性的數據塊的內存;干凈的含義是塊中的數據是“干凈”的以至于不需要檢查點;數據庫能保留當中的塊并重新使用它
臟狀態:包含被修改過且還未寫入到磁盤的數據的內存;臟狀態的內存在重新使用前必須要設置檢查點
每個緩沖區的訪問模式都可能有兩種:“保留”的和“自由”的。緩存中的緩沖區被“保留”以便用戶會話能訪問它。同一時刻不能有多個會話修改同一個“保留”緩沖區。
(2).高速緩沖區的模式
    客戶端請求數據時,Oracle從數據庫緩沖區中獲得緩存,模式包括:
l最近性模式:最近性模式又稱為數據塊模式,是指檢索的數據是從高速緩沖區中檢索的。如某個未提交的事務更新了兩行數據,然后一個最近性模式化能從剛剛未提交的行中獲取數據塊。這種模式一般用來處理更新語句。
l一致性模式:從讀一致性版本的數據塊中檢索數據,此模式也可以從撤消數據中讀取數據。如某個未提交的事務更新了兩行數據,當另外一個會話請求這兩行數據時,數據塊將使用撤消數據創建一個不包含未提交數據的讀一致性數據版本塊給該請求。通常,此模式是數據塊檢索采用的模式。
(3).高速緩沖區的I/O
    先在內存中執行邏輯I/O,如果請求的緩存不再緩沖區,則執行一個物理I/O,從而從磁盤或閃存緩沖中獲取還數據,然后再執行邏輯I/O.
l緩沖區寫入器:DBWn定期將使用很少的或臟數據寫入磁盤,情形有:
l服務器進程找不到干凈的緩沖區用來裝載準備新讀入的數據時
l因實例開始恢復而必須預先提取檢查點(存儲在重做日志線程中)時
l表空間被設置成只讀或者脫機時
l緩沖區讀出器:當干凈的或未使用的緩沖區數量很小時,數據庫就必須從緩存緩沖區中移除一部分緩存。其算法取決于閃存緩存是否啟用,如下描述:
l緩沖區讀出器(續):
l閃存緩存禁用時:數據庫重新使用每一個干凈的緩存并用新數據覆蓋它。如果對緩沖區的覆蓋需要延遲,則數據庫必須先從磁盤讀出它
l閃存緩存啟用時:DBWn能將干凈緩存的主體寫入到閃存緩存,并且允許在內存中對它進行重用。在主內存中,數據庫將該緩存的頭保存到一個LRU列表中用來跟蹤和定位閃存緩存中的緩沖區主體。如果對緩沖區的覆蓋需要延遲,則數據庫可以從閃存緩存中而不是從磁盤讀出它
 
  當客戶端進程請求緩存時,服務器進程在高速緩存緩沖區中搜索緩存,如果搜到緩存,則稱為緩存命中,服務器進程的搜索順序如下:
l在整個高速緩存緩沖區中搜索緩存,如果找到則對該緩存執行邏輯讀
l在閃存緩存的LRU列表中搜索緩存頭,如果存在,則對閃存緩存執行一個優化的物理讀
l如果上述均未搜索到,則稱為緩存未命中,將接著執行如下步驟:
 
當客戶端進程請求緩存時(續):
l執行物理讀從數據文件中將塊讀入內存
l執行邏輯讀,再讀入緩存
  
 (4). 緩存池
緩存池是緩存的集合,數據庫高速緩存緩沖區被劃分為一個或多個緩沖池。包括以下幾種可能:
l默認池(Default):該池是塊通常緩沖的位置。 除非手動配置獨立的緩存池,否則默認池是唯一的緩沖池。
l保存池(Keep):用于頻繁訪問的塊,但是如果在默認池中空間缺乏時這些塊會被收回。保留池的目的是將對象保存在內存中,從而降低I/O
l回收池(Recycle):循環使用的緩存池,用于訪問率很低的塊,用來防止這些塊占用寶貴的內存資源
 
2.重做日志緩沖區
    是一個循環的緩沖區,用來存放重做日志條目,重做日志條目中存儲了用來重建、撤消或者DML/DDL語句對數據庫所做的修改信息。數據庫恢復就是使用重做日志條目來恢復數據文件的。
    數據庫從用戶內存中拷貝重做日志條目到重做日志緩沖區中。重做日志條目在緩存中占據連續的順序空間。LGWR(Log Writer)將重做日志緩沖區寫入到磁盤上的聯機重做日志文件(順序寫入)。
  
 
3.共享池
  SGA保留的區,用來存儲解析了的SQL、PL/SQL代碼、系統參數和數據字典。數據庫中的任何操作幾乎都與共享池有關。
 
 (1).庫緩沖區
    用來存儲可執行的SQL或者PL/SQL代碼。本區域包含SQL和PL/SQL區域、控制結構(如鎖)、庫緩存的句柄。在共享服務器結構下,還包括私有的SQL區域。
    當SQL語句執行時,數據庫試圖重用以前執行過的代碼,如果解析后的代碼在庫緩存中存在且能夠被共享,則重用它,稱為軟解析或庫緩存命中。否則,數據庫重新構造一個可執行版本的應用代碼,稱為硬解析或者庫緩存未命中。
1).共享SQL區域
數據庫使用共享SQL區域處理SQL語句的第一次執行,本區域對所有用戶均有效且包含語句解析樹和執行計劃。每個唯一的語句只有唯一的一個共享SQL區域。
2).私有SQL區域
每個會話發布一個SQL語句時均有一個私有SQL區域。如果多個用戶發布的是相同的SQL語句,則它們的私有SQL區域均指向同一個共享SQL區域。
(2).數據字典緩沖區
  用于存放數據庫系統自身信息的緩沖區,如表、視圖、結構、用戶等。SQL語句解析期間,數據字典會被頻繁的訪問。
  由于數據字典被訪問的頻率非常高,因此其中又設計了兩種內存位置:
1).數據字典內存區:放的是數據庫對象的信息,而且行緩存也能使用本區域
2).庫內存區:將數據字典信息放在本緩沖區供所有服務器進程共享
 
4.大對象池
   大對象池是一個可選的緩沖區,管理員可根據需要對其進行配置。大對象池還可以用來提供一個大的區域供數據庫備份和恢復使用
5.Java池
   Java池用來存儲特定會話的Java代碼和數據,是為JVM準備的,其中包括Java對象。
6.流池
   流池存儲緩存隊列消息并且為Oracle流捕獲進程或申請進程。流池是Oracle流專用的。如果沒有特別指定,流池開始時大小是0,其大小的增長是根據Oracle流的需要動態增加的。
7.固定的SGA
    固定的SGA是一種內部事務管理的區域,例如:
l后臺進程需要經常訪問的數據庫和實例的常規信息
l進程之間的通訊信息,如鎖的信息
 
固定的SGA是有Oracle數據庫自身設定的并且不能手工修改。
 
 
 
客戶端進程
l不同于Oracle后臺進程和服務器進程,客戶端進程不能直接對SGA進行讀寫,而是通過服務器進程來實現
l發起客戶端集成的主機往往不是服務器主機
 
l連接:連接是客戶端進程和實例間的一種物理通訊鏈路
l會話:會話是數據庫實例內存中描述登錄到數據庫當前用戶狀態的邏輯實體
l一個用戶可以擁有多個會話,某個會話中的提交不會影響其它會話的事務
  
 
 
服務器進程
   服務器進程用來處理客戶端進程與實例的連接。一個客戶端進程總是與一個單獨的服務器進程進行通訊。其負責的主要任務如下:
l解析和運行應用程序發布的SQL語句,也包括創建和執行查詢計劃
l執行PL/SQL代碼
l從數據文件中將數據庫讀入到數據庫高速緩沖區中(相反的寫過程是由DBWn完成的)
l將結果返回給客戶端應用
 
1.專用服務器進程
在專用服務器配置下,一個客戶端能且僅能連接一個服務器進程,服務器進程也只能在客戶端連接持續期間為其專一的客戶端進程服務,類似一夫一妻制。
  
 
2.共享服務器進程
在共享服務器配置下,客戶端應用是通過網絡連接到服務器進程適配器而不是服務器進程的。適配器從連接客戶端處收到請求后將其放在大對象池中的請求隊列。第一個可用的共享服務器進程從請求隊列處獲得請求并進行處理,然后將處理完的結果放到適配器的響應隊列中,接著適配器進程監視該隊列并將結果轉發給客戶端。類似于大醫院的分診臺
  
后臺進程
 
1.PMON
進程監視進程,又稱進程監視器,它監視其它后臺進程并對服務器進程或進程適配器的意外中斷進行恢復。PMON用來清除失效的用戶進程、釋放進程用戶資源。如PMON重置活動事務表的狀態、不再需要的鎖、從活動進程列表中清除其進程ID。
2.SMON
系統監視進程,又稱系統監視器,它負責多個系統級的清除任務,包括:
l實例啟動時如果需要執行實例恢復,則執行之
l實例恢復期間由于數據文件是只讀的或者表空間處于脫機狀態引起的事務中斷,待表空間聯機后,SMON負責恢復這些跳過的中斷事務
l清除不再使用的臨時段
l對于數據字典管理的表空間,接合自由區
SMON定期檢查哪兒需要它,其它進程在需要它時可以調用它
3.DBWn
數據庫寫入進程,又稱數據庫寫入器,它負責將數據庫高速緩沖區中被修改的緩存寫入到磁盤。一般一個數據庫寫入進程(DBW0)即能滿足大部分的數據庫需求;但在多處理器服務器上,還可以配置DBW1..DBW9和DBWa..DBWj來提升數據庫性能。下述情況下,DBWn將臟緩存寫入磁盤:
l服務器進程掃描整個緩存后,怎么也找不到干凈可用的緩存時。DBWn如果在處理其它操作時,其執行寫入是異步的
lDBWn周期性的將緩存寫入一個預置的檢查點
4.CKPT
檢查點進程使用檢查點信息更新控制文件和數據文件的頭,并且通知DBWn將塊寫入數據文件。檢查點信息包括檢查點的位置、SCN、聯機重做日志文件中要開始恢復的位置等。 
5.MMON
可管理監視進程,執行很多與AWR(自動工作負載信息)相關的工作。例如當一個度量超出其閥值時的寫、執行快照等。
  
6.LGWR
日志寫入進程,又稱日志寫入器,負責管理重做日志緩存。一般是將用戶所做的修改寫入日志文件,等到了一定時候再寫入數據文件。LGWR將緩存中部分連續的區域寫入到聯機重做日志文件中。Oracle通過分散修改數據庫緩存任務來實現臟緩存寫入磁盤的分散性,以及通過將快速有序的日志文件寫入磁盤來提高其性能。下述情況下,LGWR會將自上次寫以來所有拷貝到緩存中的日志條目寫入日志文件:
l用戶提交了一個事務時
l聯機重做日志切換時
l自上次寫以來時間達到了3秒時
l重做日志緩沖區達到了1/3或者包含了1M緩存數據時
lDBWn必須將修改的數據寫入磁盤時
6.RECO
恢復進程是在分布式數據庫用于自動解決失敗的分布式事務的。
7.ARCn
當日志切換時,ARCn(歸檔日志進程)將聯機重做日志拷貝到脫機的存儲器中。
ARCn僅僅在歸檔日志模式化且自動歸檔選項打開時有效。屬于可選進程。
8.作業隊列進程
是一種后臺工具進程,包括CJQ0和Jnnn,前者是作業調度進程,后者是任務隊列從屬進程。作業隊列進程是Oracle用來運行后臺任務的,一般的處理方式是批處理。Oracle對其的管理是動態的。也屬于可選進程。
9.FBDA
閃回數據歸檔進程將跟蹤表中的歷史行數據歸檔到閃回數據歸檔資料中。當事務中包含跟蹤提交的DML時,FBDA將預先的行數據(未提交前)存儲在閃回歸檔資料中。FBDA也可以保存當前行的元數據。也屬于可選進程
10.SMCO
空間管理協調進程管理多個空間管理相關的任務,如預先的空間分配和空間回收,也屬于可選進程
 
習題
1.Oracle啟動和關閉分別分幾部,每一步都執行什么?關閉有哪幾種模式,其差異點是什么?
2.什么是檢查點?Oracle使用檢查點的目的是什么?線程檢查點和增量檢查點有什么相同點和不同點?
3.請登錄OEM,瀏覽參數文件中的參數,并查看聯機的幫助說明。
4.手工繪制實例的SGA,并逐一解釋每個區域的目的和作用
5.請解釋DBWn和CKPYT的關系,并解釋LGWR的工作機制。
java私塾原創內容
 本文由用戶 singing 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!