Oracle體系結(jié)構(gòu)介紹 --基礎(chǔ)篇 在學(xué)習(xí)oracle中,體系結(jié)構(gòu)是重中之重,掌握的越深入越好。在實(shí)際工作遇到疑難問(wèn)題,其實(shí)都可以歸結(jié)到體系結(jié)構(gòu)中來(lái)解釋,所以我們根據(jù)下面的示圖了解一下oracle體系結(jié)構(gòu)。
1.Summarize根據(jù)示圖,便于我們記憶,示圖分三部分組成,左側(cè)User Process、Server Process、PGA可以看做成Clinet端,上面的實(shí)例(Instance)和下面的數(shù)據(jù)庫(kù)(Database)及參數(shù)文件(parameter file)、密碼文件(password file)和歸檔日志文件(archived logfiles)組成Oracle Server,所以整個(gè)示圖可以理解成一個(gè)C/S架構(gòu)。 Oracle Server由兩個(gè)實(shí)體組成:實(shí)例(instance)與數(shù)據(jù)庫(kù)(database)。這兩個(gè)實(shí)體是獨(dú)立的,不過(guò)連接在一起。在數(shù)據(jù)庫(kù)創(chuàng)建過(guò)程中,實(shí)例首先被創(chuàng)建,然后才創(chuàng)建數(shù)據(jù)庫(kù)。在典型的單實(shí)例環(huán)境中,實(shí)例與數(shù)據(jù)庫(kù)的關(guān)系是一對(duì)一的,一個(gè)實(shí)例連接一個(gè)數(shù)據(jù)庫(kù),實(shí)例與數(shù)據(jù)庫(kù)也可以是多對(duì)一的關(guān)系,即不同計(jì)算機(jī)上的多個(gè)實(shí)例打開共享磁盤系統(tǒng)上的一個(gè)公用數(shù)據(jù)庫(kù)。這種多對(duì)一關(guān)系被稱為實(shí)際應(yīng)用群集(Real Application Clusters,RAC)RAC極大提高了數(shù)據(jù)庫(kù)的性能、容錯(cuò)與可伸縮性(可能耗費(fèi)更多的存儲(chǔ)空間)并且是oracle網(wǎng)格(grid)概念的必備部分。 2.Client端在Client端的作用是如何從客戶端創(chuàng)建服務(wù)器進(jìn)程與數(shù)據(jù)庫(kù)進(jìn)行交互的過(guò)程。 2.1 User process用戶運(yùn)行一個(gè)應(yīng)用程序時(shí)與Oracle數(shù)據(jù)庫(kù)進(jìn)程交互(例如:sql/plus)時(shí),oracle創(chuàng)建一個(gè)用戶進(jìn)程來(lái)運(yùn)行用戶的應(yīng)用程序。 2.2 Server processServer Process是用來(lái)處理連接到實(shí)例的用戶進(jìn)程(User Process)提交的請(qǐng)求。當(dāng)應(yīng)用程序與Oracle服務(wù)器運(yùn)行在同一臺(tái)機(jī)器上時(shí),某些用戶進(jìn)程(User Process)可以與Server Process合并為同一個(gè)進(jìn)程,即便減小系統(tǒng)開銷。從邏輯層面來(lái)講,用戶進(jìn)程必須要通過(guò)一個(gè)Server Process來(lái)同Oracle進(jìn)行通信的.(只不過(guò)有些時(shí)候在同一臺(tái)機(jī)器的時(shí)候,某些User Process和Server Process會(huì)合并罷了) 2.3 PGAPGA(ProgramGlobal Area)程序全局區(qū),是用戶進(jìn)程連接到數(shù)據(jù)庫(kù)并創(chuàng)建一個(gè)會(huì)話時(shí),由Oracle服務(wù)器進(jìn)程分配的專門用于當(dāng)前用戶會(huì)話的內(nèi)存區(qū),該區(qū)域是私有的。 為每個(gè)用戶連接Oracle數(shù)據(jù)庫(kù)保留的內(nèi)存 當(dāng)進(jìn)程創(chuàng)建時(shí)分配 進(jìn)程結(jié)束后被釋放 只能被一個(gè)進(jìn)程使用 參數(shù):PGA_AGGREGATE_TARGET指定PGA的總共大小 3. Database"3+3"結(jié)構(gòu),3個(gè)必要文件+3個(gè)可選文件。 3.1 Data files內(nèi)容: 1)用戶數(shù)據(jù):用戶表、DML語(yǔ)句可調(diào)整; 2)數(shù)據(jù)字典數(shù)據(jù):數(shù)據(jù)字典表記錄DB結(jié)構(gòu)、只讀不可修改、DDL語(yǔ)句調(diào)整 3)真實(shí)看到的文件 作用: 讀取數(shù)據(jù) 特點(diǎn): 1)至少包含一個(gè)SYSTEM表空間、DDL語(yǔ)言 2)各種不同表空間數(shù)據(jù)字典信息 3)我的數(shù)據(jù)保存在表空間上,表空間是以多個(gè)數(shù)據(jù)文件的形式體現(xiàn)的。 3.2 Control files內(nèi)容: 1)DB基本信息:DBID 2)DB結(jié)構(gòu)信息 3)最后一次同步的SCN信息 3.1)同步:內(nèi)存區(qū)域database buffer cache的臟數(shù)據(jù)寫出磁盤 3.2)SCN:(system change number),時(shí)間軸、生命線 4)當(dāng)前日志序列號(hào) 5)RMAN備份信息 作用: 1)記錄數(shù)據(jù)庫(kù)基本信息 2)記錄內(nèi)存下一些信息 特點(diǎn): 1)大小一般不變(固定部分、可變部分) 2)個(gè)數(shù),一個(gè)即可,分類存放 3.3 Redo log files內(nèi)容: 按時(shí)間順序記錄著DB中的改變(redoentry條目),數(shù)據(jù)塊改變就會(huì)生成redo 作用: 提供數(shù)據(jù)的可恢復(fù)性 特點(diǎn): 1)大小不變 2)順序?qū)?/span> 3)容量有限,循環(huán)覆寫 4)至少兩組日志,日志成員冗余 5)提供恢復(fù)的手段 3.4 Parameter file內(nèi)容: 1)記錄那些定制的DB參數(shù) 2)參數(shù)默認(rèn)值 3)pfile:需要重啟實(shí)例和spfile 作用: 定義數(shù)據(jù)庫(kù)實(shí)例的屬性 特點(diǎn): 兩種類型參數(shù)的特點(diǎn) 3.5 Password file內(nèi)容: 特權(quán)身份用戶的口令 作用: 用于特權(quán)身份用戶登錄的驗(yàn)證 特點(diǎn): 1)操作系統(tǒng)、密碼認(rèn)證方式登錄數(shù)據(jù)庫(kù) 2)特高、特權(quán)身份登錄到數(shù)據(jù)庫(kù)實(shí)例啟動(dòng)數(shù)據(jù)庫(kù),跳過(guò)了數(shù)據(jù)字典的驗(yàn)證 3)O7:Oracle 7版本,啟用普通身份登錄 3.6 Archived logfiles內(nèi)容: 重做日志(redo log)歷史 作用: 1)長(zhǎng)期保存日志以便恢復(fù) 2)保證redo log不丟失 特點(diǎn): 1)個(gè)數(shù)=當(dāng)前日志數(shù)-1 2)大小<=在線日志文件大小 3)命名需要具有唯一性:序列號(hào)、RAC節(jié)點(diǎn)號(hào) 4)離線文件可通過(guò)操作系統(tǒng)命令管理 4. Instance實(shí)例由存儲(chǔ)結(jié)構(gòu)和進(jìn)程組成,并且只短暫存在于RAM和CPU中。 4.1 SGA內(nèi)存結(jié)構(gòu)包括兩個(gè)部分 1)系統(tǒng)全局(SGA):在實(shí)例啟動(dòng)時(shí)候分配,是Oracle實(shí)例的基礎(chǔ)組件。 2)程序全局(PGA):當(dāng)服務(wù)器進(jìn)程生成分配。 4.1.1 Shared Pool
4.1.1.1 Library Cache1.1)存儲(chǔ)最近使用的SQL和PL/SQL語(yǔ)句的信息(軟解析,緩存一次多次使用)
1.2)共享常用的語(yǔ)句 1.3)管理上遵循LRU規(guī)則 1.4)包括兩個(gè)部分 1.4.1)共享SQL區(qū) 1.4.2)共享PL/SQL區(qū) 1.5)大小由Shared Pool的大小決定 4.1.1.2 Data Dictionary Cache2.1)存儲(chǔ)在數(shù)據(jù)庫(kù)中最近使用的定義 2.2)包括數(shù)據(jù)文件、表、索引、列、用戶、權(quán)限和其他的數(shù)據(jù)庫(kù)對(duì)象 2.3)在分析階段,服務(wù)器進(jìn)程查找數(shù)據(jù)字典去驗(yàn)證對(duì)象的名字以及是否是合法訪問(wèn) 2.4)對(duì)于查詢和DML語(yǔ)句,如果數(shù)據(jù)字典的信息在緩存中能夠提高響應(yīng)時(shí)間 2.5)大小由Shared Pool的大小決定 4.1.2 Database Buffer Cache1)存儲(chǔ)從數(shù)據(jù)文件中獲得的數(shù)據(jù)塊的鏡像 2)當(dāng)獲取和更新數(shù)據(jù)的時(shí)候能夠大幅度的提高性能 3)管理上遵循LRU規(guī)則 4)參數(shù)DB_BLOCK_SIZE其塊的大小 5)包括以下獨(dú)立的子緩存: DB_CACHE_SIZE DB_KEEP_CACHE_SIZE DB_RECYCLE_CACHE_SIZE 6)能夠動(dòng)態(tài)的調(diào)整大小 4.1.3 Redo Log Buffer1)記錄所有數(shù)據(jù)庫(kù)的塊改變 2)主要的目的是用于恢復(fù) 3)大小由參數(shù)LOG_BUFFER(不可動(dòng)態(tài)調(diào)整)決定 4.1.4 Large Pool1)是系統(tǒng)全局區(qū)中可選的一個(gè)部分 2)用于: 2.1)RMAN備份恢復(fù)操作 2.2)I/0并行進(jìn)程 2.3)共享服務(wù)器的會(huì)話內(nèi)存(UGA),以減輕在共享池中的負(fù)擔(dān) 3)大小由參數(shù)LARGE_POOL_SIZE決定 4)能夠被動(dòng)態(tài)的改變大小 4.1.5 Java Pool1)Java命令的分析 2)如果要安裝和使用Java 3)大小由參數(shù)JAVA_POOL_SIZE決定,如果granule是4M,默認(rèn)是24M,granule是16M,默認(rèn)大小是32M 4.1.6 Streams Pool流相關(guān)的數(shù)據(jù)在流池中,提高緩存效果。目前oracle較為弱化,提高采用Oracle Golden Gate(OGG),高級(jí)復(fù)制功能。 4.2Process structureOracle有以下幾種進(jìn)程: 1)用戶進(jìn)程:在用戶連接數(shù)據(jù)時(shí)產(chǎn)生 2)服務(wù)器進(jìn)程:當(dāng)連接到Oracle實(shí)例并且用戶建立會(huì)話的時(shí)候產(chǎn)生 3)后臺(tái)進(jìn)程:Oracle實(shí)例啟動(dòng)的時(shí)候產(chǎn)生 4)維持物理和內(nèi)存之間的聯(lián)系 4.1)必須要有的后臺(tái)進(jìn)程:DBWn、PMON、CKPT、LGWR、SMON 4.2)可選的后臺(tái)進(jìn)程:ARCn、CJQn、Jnnn、RECO、MMAN、MMON、Snnn、Dnnn、Pnnn 4.2.1 PMONPMON(進(jìn)程監(jiān)測(cè)進(jìn)程): 1)清除失敗的進(jìn)程 1.1)回滾事務(wù) 1.2)釋放鎖 1.3)釋放其他資源 1.4)重啟死掉的dispatchers 1.5)動(dòng)態(tài)注冊(cè)監(jiān)聽器 4.2.2 SMONSMON(系統(tǒng)檢測(cè)進(jìn)程)作用: 1)實(shí)例恢復(fù): 1.1)前滾所有重做日志中的改變 1.2)打開數(shù)據(jù)庫(kù)為了用戶能訪問(wèn) 1.3)回滾沒(méi)有提交的事務(wù) 2)釋放臨時(shí)表空間(deallocated) 4.2.3 DBWRDBWn(數(shù)據(jù)庫(kù)寫進(jìn)程)寫的條件: 1)發(fā)生檢查點(diǎn) 2)臟緩存到達(dá)限制(1/4滿) 3)沒(méi)有自由的緩存 4)超時(shí)發(fā)生 5)RACping請(qǐng)求(8i) 6)表空間離線 7)表空間只讀 8)熱備份表空間開始動(dòng)作 9)表被刪除或者截?cái)?/span> 4.2.4 LGWR1)commit的時(shí)候 2)達(dá)到三分之一滿 3)日志的大小到1M 4)每隔三秒 5)在DBWn進(jìn)程寫之前 4.2.5 CKPTCKPT(檢查點(diǎn)進(jìn)程)作用:1)給DBWn信號(hào) 2)更新數(shù)據(jù)文件頭 3)更新控制文件 4.2.6 ARCnARCn(歸檔進(jìn)程): 1)可選的后臺(tái)進(jìn)程 2)當(dāng)啟用歸檔方式后自動(dòng)歸檔重做日志文件 向Secooler致敬!Johnson12.4.10 |
|