Oracle原理:11g的体系结构
目錄
1.11g的物理結(jié)構(gòu)和邏輯結(jié)構(gòu)
2.全局系統(tǒng)區(qū)SGA和程序全局區(qū)PGA
3. 9i中的自動(dòng)PGA管理
4. 10g中的自動(dòng)SGA管理和MMAN進(jìn)程和MMON進(jìn)程
5. 11g中的AMM配置和MMAN進(jìn)程
6.11g默認(rèn)表空間的結(jié)構(gòu)和特點(diǎn)
1.11g的物理結(jié)構(gòu)和邏輯結(jié)構(gòu)
? 1.1? Oracle服務(wù)器由Oracle數(shù)據(jù)庫(kù)和Oracle實(shí)例組成。Oracle數(shù)據(jù)庫(kù)里的是看得見的,這些數(shù)據(jù)存放在數(shù)據(jù)文件里,也就是存放在內(nèi)存中,是具有物理概念的。而Oracle實(shí)例指的是內(nèi)存結(jié)構(gòu)和后臺(tái)進(jìn)程的集合。相當(dāng)于C++把數(shù)據(jù)封裝起來(lái)的類一樣,是具有邏輯概念的。內(nèi)存結(jié)構(gòu)包含全局系統(tǒng)區(qū)SGA和程序全局區(qū)PGA,后臺(tái)進(jìn)程包括PMON,SMON、CKPT、LGWR、ARC等.
實(shí)例啟動(dòng)時(shí),先分配好內(nèi)存再啟動(dòng)后臺(tái)進(jìn)程。
主要物理文件包括3類:數(shù)據(jù)文件,日志文件,控制文件。 非主要物理文件包括:參數(shù)文件、密碼文件,告警和跟蹤文件、歸檔日志文件、備份文件。丟失主要物理文件,數(shù)據(jù)庫(kù)無(wú)法運(yùn)行。控制文件是記錄數(shù)據(jù)庫(kù)物理結(jié)構(gòu)的二進(jìn)制文件。日志文件記錄了對(duì)數(shù)據(jù)庫(kù)的所有修改信息,用于數(shù)據(jù)恢復(fù)。select * from v$datafile? 可以開數(shù)據(jù)文件信息,v$controlfile控制文件信息,v$logfile日志文件信息。在SQL_PLUS窗口輸入 show parameter spfile ;查看參數(shù)文件信息。$ORACLE_HOME/database/PWD%ORACLE_SID%.ora為密碼文件?
show param dump_dest來(lái)查詢告警跟蹤文件;show parameter log_archive_format查詢歸檔日志文件
1.2 邏輯結(jié)構(gòu)是看不見的。為便于管理,Oracle在邏輯層面上劃分,一個(gè)數(shù)據(jù)庫(kù)由多個(gè)表空間組成;一個(gè)表空間由多個(gè)段組成;一個(gè)段由多個(gè)區(qū)組成,一個(gè)區(qū)由多個(gè)數(shù)據(jù)塊組成。數(shù)據(jù)塊是存儲(chǔ)、讀寫數(shù)據(jù)的最小單位。
表空間由一個(gè)或多個(gè)數(shù)據(jù)文件.dbf 組成。一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間。v$tablespace,v$datafile聯(lián)合查詢可以查看表空間信息。 如果段存放的是數(shù)據(jù)信息就叫數(shù)據(jù)段,如果這個(gè)段存放回滾信息就叫回滾段,類似的還有索引段,臨時(shí)段。段擴(kuò)展會(huì)再分配一個(gè)區(qū),一個(gè)區(qū)只能存儲(chǔ)于一個(gè)數(shù)據(jù)文件中;數(shù)據(jù)塊默認(rèn)是8k(8192)字節(jié),db_block_size,show param db_block_size 盡管只需要幾個(gè)字節(jié)的數(shù)據(jù),也會(huì)把整個(gè)數(shù)據(jù)塊數(shù)據(jù)都取下來(lái)。
2.全局系統(tǒng)區(qū)SGA和程序全局區(qū)PGA
2.1SGA:
? 一般情況下,SGA使用Oracle整個(gè)內(nèi)存的80%,而PGA使用Oracle內(nèi)存的20%。Oracle實(shí)例啟動(dòng)時(shí)分配SGA,服務(wù)器進(jìn)程(Server Process)啟動(dòng)時(shí)分配PGA.。數(shù)據(jù)庫(kù)信息存儲(chǔ)于SGA,由多個(gè)數(shù)據(jù)庫(kù)進(jìn)程共享。
SGA內(nèi)存又包含了6個(gè)部分:共享池,數(shù)據(jù)緩沖區(qū)、日志緩沖區(qū)、Large池、stream流池、JAVA池。
共享池是SQL、PL/SQL程序進(jìn)行語(yǔ)法分析、編譯、執(zhí)行的內(nèi)存區(qū)域。共享池由庫(kù)緩存和數(shù)據(jù)字典緩存組成,它的內(nèi)存大小直接影響了數(shù)據(jù)庫(kù)的性能。編譯后的語(yǔ)句就會(huì)放進(jìn)共享池中,之后如果重復(fù)執(zhí)行的SQL,就會(huì)先查共享池里是否有已經(jīng)好的語(yǔ)句。如果有 則直接執(zhí)行,可以省去了編譯的步驟。相當(dāng)于JAVA里面的 .class文件。也就是說(shuō)只要執(zhí)行的SQL語(yǔ)句發(fā)生了更新,更新的部分要重新編譯一遍。
數(shù)據(jù)緩沖區(qū):所有用戶共享,用于存儲(chǔ)從磁盤數(shù)據(jù)文件中讀入的數(shù)據(jù)。因?yàn)?用戶直接從硬盤存取頻繁地IO會(huì)導(dǎo)致速度會(huì)非常慢,所以,Oracle設(shè)立了一塊內(nèi)存,名為數(shù)據(jù)緩沖區(qū)。先把IO的數(shù)據(jù)存入數(shù)據(jù)緩沖區(qū)中,然后用戶在從這塊內(nèi)存中讀取數(shù)據(jù)。用戶每次需要讀入寫入數(shù)據(jù)時(shí),會(huì)從這塊內(nèi)存中查找,有則直接取出,沒(méi)有則讓數(shù)據(jù)緩沖區(qū)載入硬盤數(shù)據(jù),再?gòu)闹凶x取。讀寫內(nèi)存要比讀寫磁盤的速度快得多。寫入硬盤也是一樣的:先從硬盤數(shù)據(jù)讀入數(shù)據(jù)緩沖區(qū),用戶更改數(shù)據(jù)緩沖區(qū),數(shù)據(jù)緩沖區(qū)再寫入硬盤。數(shù)據(jù)緩沖區(qū)能加快提取速度,數(shù)據(jù)緩沖區(qū)的大小直接影響了Oracle的讀取數(shù)據(jù)的速度。
日志緩沖區(qū):讀寫入在線日志文件時(shí),會(huì)把信息寫入日志緩沖區(qū)中,數(shù)據(jù)緩沖區(qū)的原理類似。由于日志不是執(zhí)行SQL的必要條件,所以日志緩沖區(qū)對(duì)Oracle性能影響較小。
Large池:為了進(jìn)行大的后臺(tái)進(jìn)程操作而分配的內(nèi)存空間,如備份恢復(fù)、大型IO操作、并行查詢等
Stream池: 為Stream應(yīng)用而分配的內(nèi)存空間
JAVA池:為JAVA應(yīng)用而分配的內(nèi)存空間
?
2:.2? PGA
PGA包含了單個(gè)服務(wù)器進(jìn)程所需的數(shù)據(jù)和控制信息。排序的數(shù)據(jù)也在PGA中存放。
?實(shí)例進(jìn)程包含了3中類型:用戶進(jìn)程、服務(wù)器進(jìn)程、后臺(tái)進(jìn)程。
用戶進(jìn)程位于客戶端,在用戶運(yùn)行一個(gè)應(yīng)用程序時(shí)準(zhǔn)備向數(shù)據(jù)庫(kù)服務(wù)器發(fā)送交互請(qǐng)求時(shí)創(chuàng)建。PGA是在用戶進(jìn)程連接到數(shù)據(jù)庫(kù)并創(chuàng)建一個(gè)會(huì)話時(shí)自動(dòng)分配的。有幾個(gè)用戶連接數(shù)據(jù)庫(kù),就有多少個(gè)服務(wù)器進(jìn)程在服務(wù)器上創(chuàng)建,每個(gè)用戶對(duì)應(yīng)了自己的用戶進(jìn)程,用戶進(jìn)程和服務(wù)器進(jìn)程一 一對(duì)應(yīng)。服務(wù)器進(jìn)程所占用的空間位于PGA,PGA資源各不共享。
專有連接:9i和9i以后用的是專有連接。每個(gè)用戶對(duì)應(yīng)了自己的用戶進(jìn)程,用戶進(jìn)程和服務(wù)器進(jìn)程一 一對(duì)應(yīng)。對(duì)專有連接來(lái)說(shuō),用戶在啟動(dòng)了一個(gè)應(yīng)用程序與服務(wù)器交互,就是在客戶端上創(chuàng)建了一個(gè)用戶進(jìn)程,與oracle服務(wù)器端成功連接后,會(huì)在服務(wù)器端生成一個(gè)服務(wù)器進(jìn)程,該服務(wù)器進(jìn)程作為用戶進(jìn)程的代理進(jìn)程,代替客戶端執(zhí)行各種命令并把結(jié)果返回給客戶端。用戶進(jìn)程一旦終止,服務(wù)器進(jìn)程也立刻中止。
共享連接:8i和8i以前用的是共享連接。一個(gè)用戶可以對(duì)應(yīng)多個(gè)服務(wù)器進(jìn)程。一個(gè)服務(wù)器進(jìn)程可以對(duì)應(yīng)多個(gè)用戶進(jìn)程。
?
2.3 后臺(tái)進(jìn)程:
會(huì)話指的是用戶與Oracle服務(wù)器的單個(gè)連接。會(huì)話信息可以: select * from v$session where username='[用戶名]'; 來(lái)查看
Oracle實(shí)例啟動(dòng)時(shí),會(huì)創(chuàng)建一系列后臺(tái)進(jìn)程,必須創(chuàng)建的后臺(tái)進(jìn)程被稱為必備進(jìn)程,4個(gè),PMON,SMON,DBWn。CKPT。
PMON進(jìn)程監(jiān)控進(jìn)程:用來(lái)清理出現(xiàn)的故障進(jìn)程,施放所有的當(dāng)前掛起的鎖定,施放故障進(jìn)程所使用的資源。比如用戶進(jìn)程中斷,就其對(duì)應(yīng)的服務(wù)器進(jìn)程就會(huì)發(fā)生故障,這個(gè)服務(wù)器進(jìn)程的清理就由PMON來(lái)做。
SMON系統(tǒng)監(jiān)控進(jìn)程:在實(shí)例失敗,重新打開數(shù)據(jù)庫(kù)時(shí)自動(dòng)恢復(fù)實(shí)例。整理數(shù)據(jù)文件的自由空間,將相鄰區(qū)域結(jié)合起來(lái),施放不再使用的臨時(shí)段。 9i之前是手動(dòng)管理自由空間,9i和9i之后是自動(dòng)管理。實(shí)例失敗指的是程序中斷(程序返回值不為0),比如服務(wù)器關(guān)機(jī)。重啟啟動(dòng)服務(wù)器時(shí),實(shí)例的恢復(fù)就有SMON完成。
DBWn數(shù)據(jù)寫入進(jìn)程:管理數(shù)據(jù)緩存區(qū)的進(jìn)程。把最近使用過(guò)的數(shù)據(jù)保留在內(nèi)存,將修改后的緩沖數(shù)據(jù)寫入數(shù)據(jù)文件中就是DBWn在做。比如,用戶發(fā)送update命令,會(huì)把對(duì)應(yīng)的數(shù)據(jù)從硬盤移入數(shù)據(jù)緩沖區(qū)中,改完數(shù)據(jù)后再寫入數(shù)據(jù)文件中。
LGWR日志寫入進(jìn)程:和DBWn原理類似,只不過(guò)是管理日志緩沖區(qū)的進(jìn)程。將緩沖數(shù)據(jù)寫入日志文件,系統(tǒng)一般有多個(gè)日志文件,該進(jìn)程通常以循環(huán)的方式將日志寫入日志文件。
CKPT檢查點(diǎn)進(jìn)程。CheckPoint,為了在實(shí)例崩潰后盡快恢復(fù)實(shí)例所設(shè)定的進(jìn)程,CheckPoint分為完全檢查點(diǎn)和增量檢查點(diǎn)。完全檢查點(diǎn)只有下面兩種情況下被觸發(fā):,一個(gè)是用戶發(fā)出 alter system checkpoint ,第二個(gè)是除了shutdowon abort以外的方式關(guān)閉數(shù)據(jù)庫(kù)。增量檢查點(diǎn)只有下面兩種情況下被觸發(fā):每個(gè)3秒觸發(fā)一次,在線日志切換時(shí)觸發(fā)。
ARCn進(jìn)程:當(dāng)數(shù)據(jù)庫(kù)日志狀態(tài)為ArchiveLog模式時(shí),ARCn會(huì)在LogSwitch時(shí)自動(dòng)把Redo Log File 復(fù)制到指定目錄下。即歸檔日志文件。用來(lái)把在線日志文件 歸檔成 歸檔日志文件。
MMAN進(jìn)程:10g出現(xiàn),用于自動(dòng)SGA管理,11g中的MMAN用于自動(dòng)內(nèi)存管理。
MMON進(jìn)程:10g出現(xiàn),用于自動(dòng)統(tǒng)計(jì)信息收集。
查詢進(jìn)程信息示例如 :select * from v$process where program like '%DBW%'
?
3. 9i中的自動(dòng)PGA管理
自動(dòng)PGA管理的前提是設(shè)置初始化參數(shù)workarea_size_policy為AUTO。在專有連接下,數(shù)據(jù)庫(kù)管理員根據(jù)數(shù)據(jù)庫(kù)的負(fù)載情況,估計(jì)所有的Session大概是需要消耗的PGA的總大小,然后把該值設(shè)置成初始化參數(shù)pga_aggregare_target.。Oracle就會(huì)自動(dòng)調(diào)整每個(gè)session的PGA的大小。每個(gè)用戶的PGA大小都是一樣的,操控的是PGA上的服務(wù)器進(jìn)程的大小。
在一般情況下服務(wù)器進(jìn)程所需要的資源大小是不斷變化的,有些服務(wù)器進(jìn)程需要的資源小,有些服務(wù)器進(jìn)程需要的資源大。我們很難進(jìn)行手動(dòng)的管理,9i以后,可以自動(dòng)PGA管理來(lái)完成。
?
4. 10g中的自動(dòng)SGA管理和MMAN進(jìn)程和MMON進(jìn)程
? ?ASMM自動(dòng)SGA管理(Automatic Share Memory Management),10g的時(shí)候出現(xiàn),可以不用9i那樣具體分配SGA中的每一個(gè)部分大小。初始化參數(shù) statistics_level為TYPICAL或ALL時(shí)才可以啟動(dòng)ASMM, 用sga_target來(lái)定義了整個(gè)SGA的大小。因此10g以后有了新的后臺(tái)進(jìn)程MMAN來(lái)進(jìn)行自動(dòng)SGA管理。MMON進(jìn)程,用于自動(dòng)統(tǒng)計(jì)信息收集。
5. 11g中的AMM配置和MMAN進(jìn)程
? ?11g出現(xiàn)了AMM(自動(dòng)內(nèi)存管理),需要初始化參數(shù)statistics_level為TYPICAL或ALL時(shí)才可以啟動(dòng)AMM。初始化參數(shù)Menory_target定義了整個(gè)內(nèi)存大小(SGA和PGA的總大小),新的Memory_max_target來(lái)定義了整個(gè)內(nèi)存大小可以達(dá)到的最大值。如果使用AMM自動(dòng)內(nèi)存管理,sga_target和pga_aggregate_target的值應(yīng)該設(shè)置成0
查看修改這些參數(shù):
打開SQL_PLUS命令窗口:查詢參數(shù)命令??show param [參數(shù)名,自動(dòng)模糊查詢]
修改參數(shù)命令:alter system set [參數(shù)名全名] =[值];
修改成功后重啟數(shù)據(jù)庫(kù)后即可生效。
6.11g默認(rèn)表空間的結(jié)構(gòu)和特點(diǎn)
? ? 11g的默認(rèn)默認(rèn)表空間包含了SYSTEM、SYSAUX、TEMP、UNDOtbs1、USERS、EXAMPLE。
SYSTEM 是系統(tǒng)表空間,存放系統(tǒng)的最基本信息;?SYSAUX在10g中才引入,是SYSTEM的輔助表空間,用來(lái)減少SYSTEM的負(fù)荷所設(shè)立的。把一些其他表空間的一些組件放在了SYSAUX表空間里了,比如以前SYSTEM中的LogMiner、Logical Standby,DRSYS表空間里的Oracle Text 等;TEMP是臨時(shí)表空間,當(dāng)分配的空間無(wú)法完成排序時(shí),就會(huì)在TEMP表空間用磁盤排序的方式(效率低)來(lái)排序;UNDO類型的表空間,保存用戶DML(增刪改)操作,修改前的數(shù)據(jù);USERS 是系統(tǒng)默認(rèn)的永久性表空間,創(chuàng)建表的時(shí)候,沒(méi)有指定表空間時(shí)就會(huì)放入默認(rèn)表空間USERS,當(dāng)然數(shù)據(jù)庫(kù)的默認(rèn)表空間是可以被修改的;EXAMPLE是數(shù)據(jù)庫(kù)測(cè)試用例所涉及的表所屬表空間。
?
?
?
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Oracle原理:11g的体系结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Oracle原理: 行级锁和表级锁
- 下一篇: Oracle 原理: 11g的启动和关闭