版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 HYPERLINK 第1章Oracle的的體系結(jié)構(gòu)這一章的內(nèi)容是是比較枯燥的的,但它是理理解以后章節(jié)節(jié)的基礎(chǔ)。如如果有讀者在在開始時有些些內(nèi)容沒有完完全理解也不不用太著急,可可以繼續(xù)學(xué)習(xí)習(xí)后面的內(nèi)容容,等使用了了一段時間OOraclee系統(tǒng)之后,一一些概念就變變得容易理解解了。1.1 Orracle引引入復(fù)雜的體體系結(jié)構(gòu)的原原因數(shù)據(jù)庫管理系統(tǒng)統(tǒng)引入非常復(fù)復(fù)雜的內(nèi)存和和外存體系結(jié)結(jié)構(gòu)的主要原原因是有效地地管理稀有的的系統(tǒng)資源。資資源不足不只只是數(shù)據(jù)庫管管理系統(tǒng)所面面對的。其實(shí)實(shí),在我們五五千年的人類類發(fā)展歷史中中,我們的祖祖先們一直在在同資源不足足作斗爭。歷歷史上糧食和和土地等一直直都是稀有資
2、資源,還記得得我們的祖先先們用什么方方法來管理這這些稀有資源源的嗎?用戰(zhàn)戰(zhàn)爭,我們的的先民們?yōu)榧Z糧食而戰(zhàn),為為土地而戰(zhàn);我們當(dāng)代人人類為石油而而戰(zhàn),為市場場而戰(zhàn),為金金錢而戰(zhàn)。那么在Oraccle數(shù)據(jù)庫庫中什么是稀稀有資源?它它們又是如何何來管理的呢呢?如果讀者者接觸過數(shù)據(jù)據(jù)庫或讀過相相關(guān)的書,應(yīng)應(yīng)該還有印象象,數(shù)據(jù)庫的的數(shù)據(jù)量和輸輸入/輸出量量都是相當(dāng)大大的,而這些些數(shù)據(jù)一般都都存在硬盤(外外存)上,因因此硬盤為數(shù)數(shù)據(jù)庫的一類類資源。為了了方便介紹, 圖1-1給給出了硬盤的的內(nèi)部結(jié)構(gòu)示示意圖。圖 1-1以有據(jù)是旋的成旋是表 1-1內(nèi) 存外存(硬盤)數(shù)據(jù)訪問速度很快很慢存儲的數(shù)據(jù)臨時永久價錢很
3、貴相當(dāng)便宜從表1-1的比比較可知,內(nèi)內(nèi)存的數(shù)據(jù)訪訪問速度要比比外存(硬盤盤)快得多。這是因?yàn)閮?nèi)存的數(shù)據(jù)訪問是電子速度,而硬盤的數(shù)據(jù)訪問主要取決于機(jī)械速度。也就是說,如果一個數(shù)據(jù)庫管理系統(tǒng)能夠使絕大多數(shù)(如90%以上)數(shù)據(jù)操作在內(nèi)存中完成,那么這一數(shù)據(jù)庫管理系統(tǒng)的效率將非常高。但是由于內(nèi)存中的數(shù)據(jù)在斷電或出現(xiàn)系統(tǒng)故障時會消失,所以數(shù)據(jù)庫管理系統(tǒng)還必須保證,所有的數(shù)據(jù)改動都必須及時寫到硬盤上,以保障不會丟失數(shù)據(jù);即使數(shù)據(jù)庫崩潰之后,所有提交過的數(shù)據(jù)都能得到完全恢復(fù)。盡管可以通過加大內(nèi)存來提高數(shù)據(jù)庫管理系統(tǒng)的效率,但在大多數(shù)情況下信息系統(tǒng)的開發(fā)和維護(hù)經(jīng)費(fèi)都是有限的。通過以上的討論論,讀者應(yīng)該該意識到
4、,在在數(shù)據(jù)庫管理理系統(tǒng)中最寶寶貴的稀有資資源是內(nèi)存。為為了高效地使使用內(nèi)存這種種稀有資源,同同時保證不會會丟失任何數(shù)數(shù)據(jù)庫中的數(shù)數(shù)據(jù),Oraacle數(shù)據(jù)據(jù)庫管理系統(tǒng)統(tǒng)引入了一個個非常復(fù)雜的的體系結(jié)構(gòu)。1.2 Orracle數(shù)數(shù)據(jù)庫中常用用的術(shù)語為了講解容易,在在詳細(xì)討論OOraclee體系結(jié)構(gòu)之之前,先介紹紹一下相關(guān)的的名詞和術(shù)語語。在這里只只給出實(shí)用的的解釋,并不不追求學(xué)術(shù)上上的嚴(yán)謹(jǐn)。進(jìn)程(proccess):一段在內(nèi)存存中正在運(yùn)行行的程序。如如果沒有學(xué)過過計算機(jī)操作作系統(tǒng)相關(guān)課課程,可以把把進(jìn)程想象成成能夠自動完完成某些特定定任務(wù)的任何何東西,如訓(xùn)訓(xùn)練有素的狗狗狗、跑龍?zhí)滋椎牡?。后臺進(jìn)程(
5、baackgroound pprocesss):進(jìn)程程的一種,在在內(nèi)存中運(yùn)行行時,不占顯顯示,而且它它的優(yōu)先級比比前臺進(jìn)程低低??梢灾挥杏幸粋€前臺進(jìn)進(jìn)程,但可以以有多個后臺臺進(jìn)程。緩沖區(qū)(bufffer):一段用來臨臨時存儲數(shù)據(jù)據(jù)的內(nèi)存區(qū)。主機(jī)(hostt):計算機(jī)機(jī)系統(tǒng)的另一一個稱呼。服務(wù)器(serrver):一臺在網(wǎng)絡(luò)絡(luò)中向其他計計算機(jī)系統(tǒng)提提供一項(xiàng)或多多項(xiàng)服務(wù)的主主機(jī)??蛻魴C(jī)(cliient):一臺使用由由服務(wù)器(sserverr)提供服務(wù)務(wù)的計算機(jī)系系統(tǒng)。1.3 Orracle數(shù)數(shù)據(jù)庫管理系系統(tǒng)的體系結(jié)結(jié)構(gòu)為了能使Oraacle數(shù)據(jù)據(jù)庫管理系統(tǒng)統(tǒng)滿足商業(yè)用用戶的要求,Oracle引入了
6、如圖1-2所示的復(fù)雜的體系結(jié)構(gòu)。圖 1-2以上這個復(fù)雜的的體系結(jié)構(gòu)主主要包括Orracle服服務(wù)器(seerver)(而而服務(wù)器又是是由Oraccle實(shí)例(iinstannce)和OOraclee數(shù)據(jù)庫(ddatabaase)組成成),還包括括一些其他的的關(guān)鍵文件、用用戶進(jìn)程和服服務(wù)器進(jìn)程等等。Oracle服服務(wù)器(seerver)由由Oraclle實(shí)例(iinstannce)和OOraclee數(shù)據(jù)庫(ddatabaase)兩大大部分組成。它是一個數(shù)據(jù)庫管理系統(tǒng),提供了一致、開放和多樣的信息管理的方法和途徑。服務(wù)器中的一些結(jié)構(gòu)并不在處理SQL語句時使用,它們是為了改進(jìn)數(shù)據(jù)庫系統(tǒng)的效率或數(shù)據(jù)的恢
7、復(fù)等而設(shè)計的。1.4 Orracle服服務(wù)器(seerver)Oracle服服務(wù)器(seerver)可可以有以下33種安裝方式式。(1)基于主機(jī)機(jī)方式:在此此種配置下,用用戶直接在安安裝了數(shù)據(jù)庫庫的計算機(jī)上上登錄Oraacle數(shù)據(jù)據(jù)庫。(2)客戶端-服務(wù)器(cclientt-servver)(兩兩層模型)方方式:數(shù)據(jù)庫庫和客戶終端端分別安裝在在不同的計算算機(jī)上,用戶戶通過網(wǎng)絡(luò)從從個人計算機(jī)機(jī)(客戶端)上上訪問數(shù)據(jù)庫庫。(3)客戶端-應(yīng)用服務(wù)器器-服務(wù)器(cclientt- appplicattion sserverr-servver)(三三層模型):用戶首先從從自己的個人人計算機(jī)登錄錄應(yīng)用服務(wù)
8、器器,再通過應(yīng)應(yīng)用服務(wù)器訪訪問真正的數(shù)數(shù)據(jù)庫。1.5 Orracle實(shí)實(shí)例(insstancee)Oracle實(shí)實(shí)例(insstancee)是一種訪訪問數(shù)據(jù)庫的的機(jī)制,它是是由內(nèi)存結(jié)構(gòu)構(gòu)(SGA)和一些后臺進(jìn)進(jìn)程(5個進(jìn)進(jìn)程)組成的的。它的內(nèi)存存結(jié)構(gòu)也稱為為系統(tǒng)全局區(qū)區(qū)(systtem gllobal area,SSGA)。系系統(tǒng)全局區(qū)是是實(shí)例的最基基本的部件之之一。實(shí)例的的后臺進(jìn)程中中有5個是必必需的,即這這5個后臺進(jìn)進(jìn)程中的任何何一個沒有啟啟動,實(shí)例將自動關(guān)關(guān)閉。這5個個后臺進(jìn)程分分別是SMOON、PMOON、DBWWR、LGWWR和CKPPT。在OCCP考題中有有時可能會問問哪些后臺進(jìn)進(jìn)
9、程是可選的的?除了這55個都是可選選的。實(shí)例一一啟動就分配配系統(tǒng)全局區(qū)區(qū)和啟動所需需的后臺進(jìn)程程。這里應(yīng)該該指出的是,每每個實(shí)例只能能操作一個數(shù)數(shù)據(jù)庫,而且且它不可以操操作其他的數(shù)數(shù)據(jù)庫。但是是反過來是不不成立的,因因?yàn)橐粋€數(shù)據(jù)據(jù)庫可以同時時被幾個實(shí)例例操作(在OOraclee集群中)。系統(tǒng)全局區(qū)(SSGA)中包包含了以下幾幾個內(nèi)存結(jié)構(gòu)構(gòu):共享池(ssharedd pooll)、數(shù)據(jù)庫庫高速緩沖區(qū)區(qū)(dataabase buffeer cacche)、重重做日志緩沖區(qū)區(qū)(redoo log buffeer)和其他他的一些結(jié)構(gòu)構(gòu)(如鎖和統(tǒng)統(tǒng)計數(shù)據(jù))等等。1.6 Orracle數(shù)數(shù)據(jù)庫Oracle
10、數(shù)數(shù)據(jù)庫是數(shù)據(jù)據(jù)的一個集合合,Oraccle把這些些數(shù)據(jù)作為一一個完整的單單位來處理。Oracle數(shù)據(jù)庫也叫做物理(外存)結(jié)構(gòu),它為數(shù)據(jù)庫信息提供了真正的物理存儲,它是由以下3類操作系統(tǒng)文件組成的。(1)控制文件件(conttrol ffiles):包含了維護(hù)護(hù)和校驗(yàn)數(shù)據(jù)據(jù)庫一致性所所需的信息。(2)重做日志志文件(reedo loog filles):包包含了當(dāng)系統(tǒng)統(tǒng)崩潰后進(jìn)行行恢復(fù)所需記記錄的變化信信息。(3)數(shù)據(jù)文件件(dataa filees):包含含了數(shù)據(jù)庫中中真正的數(shù)據(jù)據(jù)。1.7 Orracle其其他的關(guān)鍵文文件除了以上3類數(shù)數(shù)據(jù)庫文件之之外,Oraacle服務(wù)務(wù)還需要其他他的一些
11、文件件,這些文件件不屬于數(shù)據(jù)據(jù)庫。其中包包括:初始化參數(shù)文件件(paraameterr filees):定義義了實(shí)例的特特性,如系統(tǒng)統(tǒng)全局區(qū)中一一些內(nèi)存結(jié)構(gòu)構(gòu)的大小、DDBWR的個個數(shù)。密碼文件(paassworrd filles):包包含了數(shù)據(jù)庫庫管理員或操操作員用戶在在啟動和關(guān)閉閉實(shí)例時所需需的密碼。雖雖然Oraccle數(shù)據(jù)庫庫提供了相當(dāng)當(dāng)完善的安全全管理機(jī)制,但但是在Oraacle數(shù)據(jù)據(jù)庫沒有開啟啟時如何驗(yàn)證證要啟動數(shù)據(jù)庫庫的人是真正正的數(shù)據(jù)庫管管理員或操作作員呢?這就就是Oraccle引入密密碼文件的原原因。歸檔重做日志文文件(arcchivedd redoo log filess):
12、是重做做日志文件的的脫機(jī)備份。在在系統(tǒng)崩潰后后進(jìn)行恢復(fù)時時可能需要這這些文件。1.8 建立立與Oraccle實(shí)例的的連接Oracle實(shí)實(shí)例(insstancee)是用Orracle的的STARTTUP命令啟啟動的(該命命令將在后面面的章節(jié)中詳詳細(xì)介紹)。它的啟動就意味著SGA的所有內(nèi)存結(jié)構(gòu)都已生成,所有必需的后臺進(jìn)程都已在內(nèi)存中運(yùn)行。那么此時用戶又是如何使用Oracle數(shù)據(jù)庫呢?用戶在向Oraacle數(shù)據(jù)據(jù)庫發(fā)出SQQL命令之前前必須與實(shí)例例(insttance)建建立連接。用用戶啟動一個個工具如SQQL*Pluus,或運(yùn)行行一個利用OOraclee工具開發(fā)的的應(yīng)用程序,如如用Oraccle
13、Foorms開發(fā)發(fā)的應(yīng)用程序序時,這個工工具或應(yīng)用程程序就被作為為一個用戶進(jìn)進(jìn)程來執(zhí)行。用用戶進(jìn)程是不不能直接訪問問數(shù)據(jù)庫的。在專用連接的情情況下(也是是默認(rèn)),當(dāng)當(dāng)一個用戶登登錄Oraccle服務(wù)器器時(如在SSQL*Pllus的提示示下輸入用戶戶名和密碼),如如果登錄成功功(即用戶名名和密碼都準(zhǔn)準(zhǔn)確無誤),OOraclee就在服務(wù)器器所運(yùn)行的計計算機(jī)上創(chuàng)建建一個服務(wù)器器進(jìn)程。在這這種連接下,該服務(wù)務(wù)器進(jìn)程只能能為這個用戶戶進(jìn)程提供服服務(wù)。用戶進(jìn)進(jìn)程與服務(wù)器器進(jìn)程是一對對一的關(guān)系。用戶進(jìn)程向服務(wù)器進(jìn)程發(fā)請求,服務(wù)器進(jìn)程對數(shù)據(jù)庫進(jìn)行實(shí)際的操作并把所得的結(jié)果返回給用戶進(jìn)程。就好像一個大富豪想炒股
14、票,但又不懂股票市場的運(yùn)作,于是他請了一位股票經(jīng)紀(jì)人。這位富豪就相當(dāng)于用戶進(jìn)程,而股票經(jīng)紀(jì)人就相當(dāng)于服務(wù)器進(jìn)程,股票市場就相當(dāng)于Oracle數(shù)據(jù)庫。一個用戶每次登登錄Oraccle服務(wù)器器,如果成功功,該用戶就就與Oraccle服務(wù)器器建立了連接接,而這種連連接又叫做會會話。一個會會話始于用戶戶成功地登錄錄Oraclle服務(wù)器,終終止于用戶退退出或非正常終止止連接。一個個數(shù)據(jù)庫用戶戶可能同時有有多個會話存存在,即用相相同的用戶名名和密碼同時時登錄多次。1.9 各種種不同的連接接方式連接是用戶進(jìn)程程與Oraccle服務(wù)器器之間的通信信路徑。與OOraclee服務(wù)器(sserverr)的3種安安裝
15、方式相對對應(yīng),一個數(shù)數(shù)據(jù)庫用戶可可能用以下33種方式之一一與Oraccle服務(wù)器器連接。(1)基于主機(jī)機(jī)方式:此時時的用戶進(jìn)程程與服務(wù)器進(jìn)進(jìn)程是在同一一臺計算機(jī)的的相同的操作作系統(tǒng)上的,用戶進(jìn)程與Oracle服務(wù)器之間的通信路徑是通過操作系統(tǒng)內(nèi)部進(jìn)程通信(inter process communication,IPC)機(jī)制來建立的。(2)客戶端-服務(wù)器(cclientt-servver)(兩兩層模型)方方式:用戶進(jìn)進(jìn)程與Oraacle服務(wù)務(wù)器之間的通通信是通過網(wǎng)網(wǎng)絡(luò)協(xié)議(如如TCP/IIP)來完成成的。(3)客戶端-應(yīng)用服務(wù)器器-服務(wù)器(cclientt- appplicattion sser
16、verr- serrver)(三三層模型):用戶的個人人計算機(jī)通過過網(wǎng)絡(luò)與應(yīng)用用服務(wù)器或網(wǎng)網(wǎng)絡(luò)服務(wù)器通通信,而這個個應(yīng)用服務(wù)器器或網(wǎng)絡(luò)服務(wù)務(wù)器又是通過過網(wǎng)絡(luò)與運(yùn)行行數(shù)據(jù)庫的計計算機(jī)相連的的。例如,用用戶使用瀏覽覽器通過網(wǎng)絡(luò)絡(luò)運(yùn)行NT服服務(wù)器上的應(yīng)應(yīng)用程序,而而NT服務(wù)器器又從運(yùn)行在在UNIX主主機(jī)上的Orracle數(shù)數(shù)據(jù)庫中提取取數(shù)據(jù)。以上所介紹的連連接是用戶進(jìn)進(jìn)程與服務(wù)器器進(jìn)程的一對對一的連接,也也稱為專用服服務(wù)器連接(ddedicaated sserverr connnectioon)。除了了這種連接外外,在聯(lián)機(jī)事事務(wù)處理(oonlinee trannsactiion prrocesssi
17、ng,OOLTP)系系統(tǒng)的配置時時還有另外的的一種連接,它它在Oraccle9i之前的的版本中稱為為多線程(MMTS)連接接,在Oraacle 99i或以后的的版本中稱為為共享服務(wù)器器(sharred seerver)連連接。有關(guān)這這種連接在OOraclee的網(wǎng)絡(luò)和調(diào)調(diào)優(yōu)的書籍中中介紹。1.10 服服務(wù)器進(jìn)程當(dāng)Oraclee創(chuàng)建一個服服務(wù)器進(jìn)程的的同時要為該該服務(wù)器進(jìn)程程分配一個內(nèi)內(nèi)存區(qū),這個個內(nèi)存區(qū)稱為為程序全局區(qū)區(qū)(proggram ggloball areaa,PGA)。與與SGA不同同,PGA是是一個私有的的內(nèi)存區(qū),是是不能共享的的,是只屬于于一個進(jìn)程的的。它隨著進(jìn)進(jìn)程的創(chuàng)建而而被分配
18、,隨隨著進(jìn)程的終終止而被回收收。在專用服服務(wù)器進(jìn)程的的配置情況下下,程序全局局區(qū)包括了以以下結(jié)構(gòu):(1)排序區(qū)(ssort aarea):用于處理SSQL語句所所需的排序。(2)游標(biāo)狀態(tài)態(tài)區(qū)(currsor sstate):用于指示會會話當(dāng)前所使使用的SQLL語句的處理理狀態(tài)。(3)會話信息息區(qū)(sesssion inforrmatioon):包括括了會話的用用戶權(quán)限和優(yōu)優(yōu)化統(tǒng)計信息息。(4)堆棧區(qū)(sstack spacee):包括了了其他的會話話變量。如果是共享服務(wù)務(wù)器進(jìn)程或多多線程的配置置,以上這些些結(jié)構(gòu)除了堆堆棧區(qū)外大部部分將存在SSGA中。如如果有l(wèi)arrge poool,它們們就會
19、被存在在largee pooll,否則它們們就會被存在在共享池中。1.11 OOraclee執(zhí)行SQLL查詢語句的的步驟Qu了詢E Op么l何個?句用服來他程助過語的句如詢成返結(jié)他語回或息句要3編r執(zhí)e據(jù)c編譯(parsse):在進(jìn)進(jìn)行編譯時,服服務(wù)器進(jìn)程會會將SQL語語句的正文放放入共享池(ssharedd pooll)的庫高速緩緩存(libbrary cachee)中并將完成成以下處理:首先在共享池中中搜索是否有有相同的SQQL語句(正文),如如果沒有就進(jìn)進(jìn)行后續(xù)的處處理。檢查該SQL語語句的語法是是否正確。通過查看數(shù)據(jù)字字典來檢查表表和列的定義義。對所操作的對象象加編譯鎖(pparse
20、lockss)以便在編譯譯語句期間這這些對象的定定義不能被改改變。檢查所引用對象象的用戶權(quán)限限。生成執(zhí)行該SQQL語句所需需的優(yōu)化的執(zhí)執(zhí)行計劃(執(zhí)執(zhí)行步驟)。將SQL語句和和執(zhí)行計劃裝裝入共享的SSQL區(qū)。以上的每一步操操作都是在處處理正確時才才進(jìn)行后續(xù)的的處理。如果果不正確,就就返回錯誤。執(zhí)行(execcute):Oraccle服務(wù)器器進(jìn)程開始執(zhí)執(zhí)行SQL語語句是因?yàn)樗勋@得了執(zhí)執(zhí)行SQL語語句所需的全全部資源和信信息。提取數(shù)據(jù)(feetch):Oraccle服務(wù)器器進(jìn)程選擇所所需的數(shù)據(jù)行行,并在需要要時將其排序序,最后將結(jié)結(jié)果返回給用用戶(進(jìn)程)。1.12 共共享池(shhared po
21、ol)SGA中的共享享池(shaared ppool)是由庫高速速緩存(liibraryy cachhe)和數(shù)據(jù)字典典高速緩存(ddata ddictioonary cachee)兩部分所組組成。服務(wù)器器進(jìn)程將SQQL(也可能能是PL/SSQL)語句的正文文和編譯后的的代碼(paarsed code)以及執(zhí)行計計劃都放在共共享池(shhared pool)的庫高速緩緩存中。在進(jìn)進(jìn)行編譯時,服務(wù)器進(jìn)進(jìn)程首先會在在共享池中搜搜索是否有相相同的SQLL或PL/SSQL語句(正正文),如果果有就不進(jìn)行行任何后續(xù)的的編譯處理,而而是直接使用用已存在的編編譯后的代碼碼和執(zhí)行計劃劃。提示:庫高速緩存包含含了
22、共享SQQL區(qū)和共享享PL/SQQL區(qū)兩部分分,它們分別別存放SQLL和PL/SSQL語句以以及相關(guān)的信信息。要想共享SQLL或PL/SSQL語句,第第一,庫高速緩存存(librrary ccache)要足夠大,因因?yàn)橹挥羞@樣樣要共享的SSQL或PLL/SQL語語句才不會很很快地淘汰出出內(nèi)存。第二二,SQL或或PL/SQQL語句要是是能共享的通通用代碼(ggeneriic codde),因?yàn)镺rracle是是通過比較SSQL或PLL/SQL語語句的正文來來決定兩個語語句是否相同同的,只有當(dāng)當(dāng)兩個語句的的正文完全相相同時Oraacle才重重用已存在的的編譯后的代代碼和執(zhí)行計計劃。這里通通過以下的
23、實(shí)實(shí)例來進(jìn)一步步解釋這一點(diǎn)點(diǎn)。讀者猜如如下的兩個SSQL語句是是否相同?select * froom empp wherre sall = 11500; 和seleect * from emp wwhere sal = 15001;答案是不相同的的(在Oraacle默認(rèn)認(rèn)的配置下,OOraclee 8i和OOraclee 9i以及及更高的版本本可以通過重重新設(shè)置CUURSOR_SHARIING參數(shù)來來修改默認(rèn)配配置,有興趣趣的讀者可參參閱Oraccle調(diào)優(yōu)方方面的書籍)??梢酝ㄟ^使用綁綁定變量的方方式來重寫以以上的SQLL語句,如下下:select * froom empp wherre sa
24、ll = &v_sall;這個語句就是可可以共享的通通用代碼,因因?yàn)樽兞坎皇鞘窃诰幾g階段段而是在運(yùn)行行階段賦值的的。引入庫高高速緩存(llibrarry cacche)的目的是共共享SQL或或PL/SQQL代碼。那那么Oraccle又是怎怎樣有效地管管理庫高速緩緩存(libbrary cachee)的呢?Orracle是是使用一個稱稱為LRU(lleast recenntly uused)的的隊(duì)列(liist)或算算法(alggorithhm)來實(shí)現(xiàn)現(xiàn)對庫高速緩緩存的管理的的。LRU隊(duì)隊(duì)列的算法大大致如下:剛剛使用的內(nèi)存存塊(的地址址)放在LRRU隊(duì)列的頭頭上(最前面面),當(dāng)一個個服務(wù)器進(jìn)程速
25、存沒內(nèi)該L的后所塊存使的立R最樣間的自L的最從以上的討論可可知,為了能能夠共享SQQL或PL/SQL的代代碼,庫高速緩存要要足夠大,因因?yàn)檫@樣那些些可以共享的的SQL或PPL/SQLL代碼才不會會被很快地淘淘汰出內(nèi)存。不不過Oraccle并沒有有給出直接設(shè)設(shè)置庫高速緩緩存大小的方方法,只能通通過設(shè)置共享享池的大小來來間接地設(shè)置置庫高速緩存存的大小。介紹完了庫高速速緩存,接下下來將介紹數(shù)數(shù)據(jù)字典高速速緩存(daata diictionnary ccache)。當(dāng)Oraccle在執(zhí)行行SQL語句句時,服務(wù)器器進(jìn)程將把數(shù)數(shù)據(jù)文件、表表、索引、列列、用戶和其其他的數(shù)據(jù)對對象的定義和和權(quán)限的信息息放入數(shù)
26、據(jù)字字典高速緩存存。如果在這這之后,有進(jìn)進(jìn)程(用戶)需需要同樣的信信息,如表和和列的定義,那那么所有的這這些信息將從從數(shù)據(jù)字典高高速緩存中獲獲得。因?yàn)橐砸陨纤f的這這些信息都是是存在Oraacle數(shù)據(jù)據(jù)庫的數(shù)據(jù)字字典中,這也也可能就是該該部分內(nèi)存叫叫做數(shù)據(jù)字典典高速緩存的的原因。表和列的定義等等重用的機(jī)會會要比SQLL語句大,因因此為了能達(dá)達(dá)到共享這些些信息的目的的,數(shù)據(jù)字典典高速緩存應(yīng)應(yīng)該盡可能設(shè)設(shè)置得大一些些。不過與庫庫高速緩存一一樣,Oraacle并沒沒有給出直接接設(shè)置數(shù)據(jù)字字典高速緩存存大小的方法法,只能通過過設(shè)置共享池池的大小來間間接地設(shè)置數(shù)數(shù)據(jù)字典高速速緩存的大小小。在Oraacl
27、e9i之前的的版本,可以以通過修改參參數(shù)文件中的的SHAREED_POOOL_ SIIZE的值來來改變共享池池的大小,但但一定要重新啟啟動Oraccle數(shù)據(jù)庫庫。在Oraacle 99i或以后的的版本中,也也可以使用類類似于例1-1的命令來來改變共享池池的大?。豪?-1SQL ALLTER SSYSTEMM SET SHAREED_POOOL_SIZZE = 332M;系統(tǒng)已更改。但是所改變共享享池的大小受受限于SGAA_MAX_SIZE參參數(shù)。這個參參數(shù)將在以后后的章節(jié)中詳詳細(xì)地介紹。注意:在本書中采用如如下的約定:SQL為SQQL*Pluus的提示符符。沒有陰影的內(nèi)容容為要輸入的的SQL語
28、句句或SQL*Plus命命令等。如在在例1-1中中要輸入ALLTER SSYSTEMM SET SSHAREDD_POOLL_SIZEE = 322M;。陰影中的內(nèi)容為為系統(tǒng)顯示(輸輸出)的結(jié)果果。如在例11-1中的“系統(tǒng)已更改改?!?。提示:即使把共享池設(shè)設(shè)置得足夠大大并且所使用用的SQL或或PL/SQQL語句也是是能共享的代代碼,Oraacle也并并不能一定使使用內(nèi)存(共共享池)中的的代碼。例如如當(dāng)有用戶修修改了某個對對象的定義之之后,所有使使用這個對象象的內(nèi)存(共共享池)中的的代碼全部被被Oraclle設(shè)置為無無效,因此在在使用時必須須重新編譯。1.13 數(shù)數(shù)據(jù)庫高速緩緩沖區(qū)(daatab
29、asse bufffer ccache)-和庫高速速緩存(liibararry cacche)不一一樣如果用戶發(fā)出了了以下的SQQL語句:SSELECTT * FRROM emmp,Oraacle又是是怎樣提取數(shù)數(shù)據(jù)庫中的數(shù)數(shù)據(jù)呢?服務(wù)務(wù)器進(jìn)程將首首先在數(shù)據(jù)庫庫高速緩沖區(qū)區(qū)(dataabase buffeer cacche)中搜搜尋所需的數(shù)數(shù)據(jù),如果找找到了就直接接使用而不進(jìn)進(jìn)行磁盤操作作,如果沒找找到就將進(jìn)行行磁盤操作把把數(shù)據(jù)文件中中的數(shù)據(jù)讀入入到數(shù)據(jù)庫高高速緩沖區(qū)中中。從以上的討論可可知,為了能能夠共享數(shù)據(jù)據(jù)庫中的數(shù)據(jù)據(jù),數(shù)據(jù)庫高高速緩沖區(qū)要要足夠的大,因因?yàn)檫@樣那些些可以共享的的數(shù)據(jù)才不
30、會會被很快地淘淘汰出內(nèi)存。OOraclee也是使用一一個叫做LRRU(leastt receently used)的的隊(duì)列(liist)或算算法(alggorithhm)來實(shí)現(xiàn)現(xiàn)對數(shù)據(jù)庫高高速緩沖區(qū)的的管理。可以以使用參數(shù)文文件中的DBB_BLOCCK_SIZZE和DB_BLLOCK_BBUFFERRS兩個參數(shù)數(shù)來設(shè)置數(shù)據(jù)據(jù)庫高速緩沖沖區(qū)的大小。其中DB_BLOCK_SIZE為Oracle數(shù)據(jù)塊(內(nèi)存緩沖區(qū))的大小,在Oracle數(shù)據(jù)庫中內(nèi)存和外存的數(shù)據(jù)塊的大小是相同的。DB_BLOCK_BUFFERS為內(nèi)存緩沖區(qū)的個數(shù)。數(shù)據(jù)庫高速緩沖區(qū)大小為這兩個參數(shù)的乘積。但是DB_BLOCK_SIZE的
31、值是在創(chuàng)建數(shù)據(jù)庫時設(shè)定的,如果要改變該參數(shù)的值一般需要重建數(shù)據(jù)庫。因此多數(shù)情況下只能通過改變DB_BLOCK_BUFFERS的值來調(diào)整數(shù)據(jù)庫高速緩沖區(qū)大小。但一定得重新啟動Oracle數(shù)據(jù)庫。在Oracle 9i或以后的版本中,Oracle引入了另一個參數(shù)DB_CACHE_SIZE,這個參數(shù)是一個動態(tài)參數(shù),即可以在數(shù)據(jù)庫運(yùn)行時動態(tài)地改變該參數(shù)??梢允褂妙愃朴?例1-2的命令來改變數(shù)據(jù)庫高速緩沖區(qū)的大?。豪?-2SQL ALLTER SSYSTEMM SET DB_CAACHE_SSIZE = 48M;系統(tǒng)已更改。1.14 內(nèi)內(nèi)存緩沖區(qū)顧顧問(v$ddb_cacche_addvice)Oracl
32、e 9i或以后后的版本還提提供了一個稱稱為內(nèi)存緩沖沖區(qū)顧問(vv$db_ccache_advicce)的工具具來幫助獲得得調(diào)整數(shù)據(jù)庫庫高速緩沖區(qū)區(qū)的統(tǒng)計信息息。內(nèi)存緩沖沖區(qū)顧問一共共有3種狀態(tài)態(tài):(1)ON:該該工具打開,為為該工具分配配內(nèi)存并進(jìn)行行統(tǒng)計信息的的收集。要有有一定的內(nèi)存存和CPU開開銷。(2)READDY:該工具具關(guān)閉,為該該工具分配內(nèi)內(nèi)存但不進(jìn)行行統(tǒng)計信息的的收集,因此此沒有CPUU的開銷。(3)OFF:該工具關(guān)閉閉,不為該工工具分配內(nèi)存存也不進(jìn)行統(tǒng)統(tǒng)計信息的收收集,因此既既沒有內(nèi)存的的開銷也沒有有CPU開銷銷??梢酝ㄟ^修改初初始化參數(shù)DDB_CACCHE_ADDVICE的的值
33、來改變該該工具的狀態(tài)態(tài)。這一參數(shù)數(shù)是一個動態(tài)態(tài)參數(shù),因此此可以使用AALTER SYSTEEM命令來修修改。例如可可以利用類似似于例1-33的SQL語語句來查看它它的狀態(tài):例1-3SQL seelect id, nname, blockk_sizee, advvice_sstatuss 2 ffrom vv$db_ccache_advicce; ID NNAME BBLOCK_SIZE ADV - - - - 3 DDEFAULLT 40996 ON 3 DDEFAULLT 40996 ON 3 DDEFAULLT 40996 ON 3 DDEFAULLT 40996 ON 3 DDEFAUL
34、LT 40996 ON 已選擇20行。 此時,例1-33的顯示結(jié)果果表明了內(nèi)存存緩沖區(qū)顧問問是在開啟狀狀態(tài)。提示:顯示結(jié)果中的表示省略了了一些行的顯顯示。之后可以使用類類似于例1-4的命令將將內(nèi)存緩沖區(qū)區(qū)顧問(v$db_caache_aadvicee)工具關(guān)閉閉:例1-4SQL allter ssystemm set db_caache_aadvicee = offf;系統(tǒng)已更改。這時可以再使用用類似于例11-5的SQQL語句來查查看它的狀態(tài)態(tài):例1-5SQL seelect id, nname, blockk_sizee, advvice_sstatuss 2 ffrom vv$db_cca
35、che_advicce; ID NNAME BLOCKK_SIZEE ADV- - - - 3 DDEFAULLT 40996 OFFF 3 DDEFAULLT 40996 OFFF 3 DDEFAULLT 40996 OFFF 3 DDEFAULLT 40996 OFFF 3 DDEFAULLT 40996 OFFF 已選擇20行。 此時,例1-55的顯示結(jié)果果表明已成功功地關(guān)閉了內(nèi)內(nèi)存緩沖區(qū)顧顧問(詳細(xì)地地介紹該工具具的使用已超超出了本書的的范圍,有興興趣的讀者可可參閱Oraacle 99i/10gg調(diào)優(yōu)方面的的書籍)。1.15 重重做日志緩沖沖區(qū)(reddo logg bufffer)從
36、理論上來講,如如果數(shù)據(jù)庫不不會崩潰,根根本沒有必要要引入重做日日志緩沖區(qū)(rredo llog buuffer)。引入重做日志緩沖區(qū)的主要目的(在Oracle 8i之前的版本中也是惟一的目的)就是數(shù)據(jù)的恢復(fù)。Oracle在使用任何DML或DDL操作改變數(shù)據(jù)之前都將恢復(fù)所需的信息,即在寫數(shù)據(jù)庫高速緩沖區(qū)之前,先寫入重做日志緩沖區(qū)。與執(zhí)行查詢語句句有所不同,OOraclee在執(zhí)行DMML語句時只只有編譯(pparse)和和執(zhí)行(exxecutee)兩個階段(PP15頁DQQL)。以下是Orracle執(zhí)執(zhí)行UPDAATE語句的的步驟:(1)如果數(shù)據(jù)據(jù)和回滾數(shù)據(jù)據(jù)不在數(shù)據(jù)庫庫高速緩沖區(qū)區(qū)中,Oraac
37、le服務(wù)務(wù)器進(jìn)程將把把它們從數(shù)據(jù)據(jù)文件中讀到到數(shù)據(jù)庫高速速緩沖區(qū)中。(2)Oraccle服務(wù)器器進(jìn)程在要修修改的數(shù)據(jù)行行上加鎖(行行一級的鎖)。(3)Oraccle服務(wù)器器進(jìn)程將數(shù)據(jù)據(jù)的變化信息息和回滾所需需的信息都記記錄在重做日日志緩沖 區(qū)區(qū)中。(4)Oraccle服務(wù)器器進(jìn)程將回滾滾所需的原始始值和對數(shù)據(jù)據(jù)所做的修改改都寫入數(shù)據(jù)據(jù)庫高速 緩緩沖區(qū)(daatabasse bufffer ccache)。之后在數(shù)據(jù)庫高速緩沖區(qū)中所有的這些數(shù)據(jù)塊都將被標(biāo)為臟緩沖區(qū),因?yàn)榇藭r內(nèi)外存的數(shù)據(jù)是不同的(不一致的)。Oracle處處理INSEERT或DEELETE語語句的步驟與與處理UPDDATE語句句的
38、步驟大體體相同。注意:有關(guān)回滾數(shù)據(jù)在在本書的后面面章節(jié)中還要要介紹,讀者者也可以參閱閱筆者的另一一本書從實(shí)實(shí)踐中學(xué)習(xí)OOraclee/SQL一一書12.220節(jié)的25582599頁。1.16 大大型池(larrge poool)和JJava池(JJava ppool)除了以上所介紹紹的內(nèi)存結(jié)構(gòu)構(gòu)之外,SGGA中還有可可能包含laarge ppool和JJava ppool兩個個可選的內(nèi)存存結(jié)構(gòu)。引入largee pooll的主要目的的應(yīng)該是提高高效率。laarge ppool是一一個相對比較較簡單的內(nèi)存存結(jié)構(gòu),與ssharedd pooll不同的是它它沒有LRUU隊(duì)列。在多多線程(MTTS)或
39、共享享服務(wù)器(ssharedd servver)連接接時,Oraacle服務(wù)務(wù)器進(jìn)程的PPGA的大部部分區(qū)域(也也叫UGA)將將放入larrge poool(sttack sspace 除外)。另另外在大規(guī)模模I/O及備備份和恢復(fù)操操作時可能使使用該區(qū)??煽梢酝ㄟ^設(shè)置置參數(shù)LARRGE_POOOL_SIIZE的值來來配置larrge poool的大小小。該參數(shù)也也是一個動態(tài)態(tài)參數(shù)。引入Java pool的的目的是能夠夠編譯Javva語言的命命令。如果要要使用Javva語言就必必須設(shè)置Jaava poool。Jaava語言在在Oraclle數(shù)據(jù)庫中中的存儲與PPL/SQLL語言幾乎完完全相同???/p>
40、可以通過設(shè)置置參數(shù)JAVVA_POOOL_SIZZE的值來配配置Javaa pooll的大小。其其數(shù)字的單位位是字節(jié)(bbytes)。在在Oraclle 9i中中Java pool的的默認(rèn)大小為為24MB。1.17 內(nèi)內(nèi)存緩沖區(qū)大大小的設(shè)定在Oraclee 9i之前前的版本中,只能通過設(shè)置初始化參數(shù)文件中的一些參數(shù)來間接地設(shè)置SGA的大小,如DB_BLOCK_BUFFERS、LOG_BUFFER、SHARED_POOL_SIZE等。而且所有的這些參數(shù)都是靜態(tài)的,即當(dāng)修改完初始化參數(shù)文件中這些參數(shù)的值之后必須重新啟動Oracle數(shù)據(jù)庫。在Oraclee9i以后的的版本中,SSGA為動態(tài)態(tài)的。SG
41、AA中的內(nèi)存緩緩沖區(qū),如數(shù)數(shù)據(jù)庫高速緩緩沖區(qū)(daatabasse bufffer ccache)和和共享池(ssharedd pooll)等都可以動動態(tài)地增加和和減少。Orracle是是利用所謂的的區(qū)組(grranulee)來管理SGAA的內(nèi)存的。區(qū)組(granule)就是一片連續(xù)的虛擬內(nèi)存區(qū)。區(qū)組是Oracle分配和回收內(nèi)存區(qū)的基本單位。決的大S寸8組是如的或8組為Oe旦G個區(qū)所Oracle數(shù)數(shù)據(jù)庫管理員員可通過ALLTER SSYSTEMM SET命命令來分配和和回收區(qū)組。但但總的內(nèi)存大大小不能超過過參數(shù)SGAA_MAX_SIZE所所設(shè)定的值。該該參數(shù)的單位位是字節(jié)。動態(tài)分配和回收收內(nèi)存
42、的最大大好處是在調(diào)調(diào)整內(nèi)存緩沖沖區(qū)大小時不不需要重新啟啟動數(shù)據(jù)庫。這這一點(diǎn)對那些些24小時運(yùn)運(yùn)營7天營業(yè)業(yè)的商業(yè)數(shù)據(jù)庫是是至關(guān)重要的的。1.18 內(nèi)內(nèi)存緩沖區(qū)信信息的獲取可以使用例1-6的命令來來獲得參數(shù)SSGA_MAAX_SIZZE的值:例1-6SQL shhow paarametter該命令將顯示出出參數(shù)文件中中可以設(shè)置的的全部參數(shù)。另外也也可以使用例例1-7的命命令來獲得SSGA的相關(guān)關(guān)信息:例1-7SQL shhow sggaTotal SSystemm Globbal Arrea 1227555896bytessFixed SSize 4553432 bytessVariablle
43、Sizze 713003168 bytessDatabasse Bufffers 503331648 bytessRedo Buufferss 6667648 bytess也可以先使用例例1-8和例例1-9的SSQL*Pllus命令來來格式化顯示示輸出:例1-8SQL cool namme forr a20例1-9SQL cool vallue foor a255之后,利用數(shù)據(jù)據(jù)字典v$pparameeter使用例1-10的SQQL查詢語句句來獲得參數(shù)數(shù)SGA_MMAX_SIIZE的值:例1-10SQL sselectt namee, typpe, vaalue 2ffrom vv$paraa
44、meterr 3wwhere name = sgga_maxx_sizee;NAME TTYPE VVALUE - - -sga_maxx_sizee 6 11227555896 介紹完了SGAA的各個部分分內(nèi)存緩沖區(qū)區(qū)之后,下面面開始詳細(xì)地地討論Oraacle的主主要后臺進(jìn)程程。1.19 重重做日志寫進(jìn)進(jìn)程(LGWWR)及快速速提交(faast coommit)重做日志寫進(jìn)程程(LOG writeer,LGWWR)負(fù)責(zé)將重做做日志緩沖區(qū)區(qū)的記錄順序序地寫到重做做日志文件中中。為了更好好地理解LOOG wriiter的操操作原理,在在這里先介紹紹一下Oraacle提交交(commmit)語句是
45、如何何工作的。Oracle服服務(wù)器是使用用了一種稱為為快速提交(ffast ccommitt)的技術(shù),該該技術(shù)既能保保證Oraccle系統(tǒng)的的效率又能保保證在系統(tǒng)崩崩潰的情況下下所有提交的的數(shù)據(jù)可以得得到恢復(fù)。為為此Oraccle系統(tǒng)引引入了系統(tǒng)變變化數(shù)(syystem changge nummber,SSCN)。無論任何時時候只要某個個事務(wù)(trransacction)被提交,OOraclee服務(wù)器都將將產(chǎn)生一個SSCN(號碼碼)并將其賦賦予該事務(wù)的的所有數(shù)據(jù)行行。在同一個個數(shù)據(jù)庫中SSCN是單調(diào)調(diào)遞增的并且且是惟一的。為為了避免在進(jìn)進(jìn)行一致性檢檢驗(yàn)時操作系系統(tǒng)時鐘可能能引發(fā)的問題題,Ora
46、ccle服務(wù)器器將SCN作作為Oraccle的內(nèi)部部時間戳來保保證數(shù)據(jù)文件件中的數(shù)據(jù)的的同步和數(shù)據(jù)據(jù)的讀一致性性。當(dāng)在SQL*PPlus中發(fā)發(fā)了commmit語句之之后,Oraacle的內(nèi)內(nèi)部操作步驟驟如下:(1)服務(wù)器進(jìn)進(jìn)程將把提交交的記錄連同同所產(chǎn)生的SSCN(號碼碼)一起寫入入重做日志緩緩沖區(qū)中。(2)重做日志志寫進(jìn)程(LLGWR)將把重做日日志緩沖區(qū)中中一直到所提提交的記錄(包包括該記錄)的的所有記錄連連續(xù)地寫到重重做日志文件件中。在此之之后,Oraacle服務(wù)務(wù)器就可以保保證即使在系系統(tǒng)崩潰的情情況下所有提提交的數(shù)據(jù)也也可以得到恢恢復(fù)。(3)Oraccle通知用用戶(進(jìn)程)提提交已經(jīng)
47、完成成。(4)服務(wù)器進(jìn)進(jìn)程將修改數(shù)數(shù)據(jù)庫高速緩緩沖區(qū)中的相相關(guān)數(shù)據(jù)的狀狀態(tài)并釋放資資源和打開 鎖等。此時可能這些數(shù)數(shù)據(jù)并未被寫寫到數(shù)據(jù)文件件中,這時這這些數(shù)據(jù)緩沖沖區(qū)被標(biāo)為臟臟緩沖區(qū),因因?yàn)橄嗤臄?shù)數(shù)據(jù)在內(nèi)外存存中為不同的的版本。數(shù)據(jù)據(jù)庫高速緩沖沖區(qū)中的數(shù)據(jù)據(jù)是由DBWWR寫到數(shù)據(jù)據(jù)文件中的。曾有不少學(xué)生問問過這樣一個個問題:“為什么不同同時寫兩個數(shù)數(shù)據(jù)文件呢?”O(jiān)raclle的這種解解決方案的最最大好處是在在保證不丟失失數(shù)據(jù)的同時時數(shù)據(jù)庫的效效率不會受到到很大影響。因?yàn)橹刈鋈罩疚募械挠涗浭且宰罹o湊的格式存放的,所以它的I/O量要比對數(shù)據(jù)文件的操作少得多。另外LGWR是順序地將重做日志緩沖區(qū)
48、中的記錄寫到重做日志文件中的,這樣其I/O速度要比將數(shù)據(jù)塊寫到數(shù)據(jù)文件中快得多。重做日志寫進(jìn)程程(LGWRR)要在下列情情況下將重做做日志緩沖區(qū)區(qū)的記錄(內(nèi)內(nèi)存)順序地地寫到重做日日志文件(外外存)中:當(dāng)某個事務(wù)被提提交時。當(dāng)重做日志緩沖沖區(qū)中變化的的記錄超過一一兆字節(jié)(11MB)時。當(dāng)重做日志緩沖沖區(qū)中所存的的記錄已超過過緩沖區(qū)容量量的1/3。在DBWR將數(shù)數(shù)據(jù)庫高速緩緩沖區(qū)中修改改過的數(shù)據(jù)塊塊寫到數(shù)據(jù)文文件之前。每3秒鐘。因?yàn)樵谶M(jìn)行數(shù)據(jù)據(jù)庫恢復(fù)時需需要重做日志志數(shù)據(jù),所以以重做日志寫寫進(jìn)程(LGGWR)只有在重做做日志數(shù)據(jù)寫寫到重做日志志文件(磁盤盤)上時才能能確定提交已已經(jīng)完成。在在Or
49、aclle 8i之之前的版本中中,重做日志志數(shù)據(jù)的惟一一目的和用處處就是數(shù)據(jù)庫庫恢復(fù)。Orracle在在Oraclle 8i的的版本中引入入了一個叫做做重做日志挖挖掘器(loogmineer)的工具具。該工具可可以將重做日日志文件或歸歸檔重做日志志文件中的數(shù)數(shù)據(jù)轉(zhuǎn)換成用用戶能理解的的正文信息。在在Oraclle 8i中中,該工具只只有命令行操操作方式。OOraclee 9i加強(qiáng)強(qiáng)了此工具的的功能并引入入了一個稱為為日志挖掘?yàn)g瀏覽器(loogmineer vieewer)的的圖形界面。1.20 數(shù)數(shù)據(jù)庫寫進(jìn)程程(DBWRR/DBWnn)在本章開始時曾曾介紹過數(shù)據(jù)據(jù)庫的典型操操作就是大規(guī)規(guī)模的輸入
50、/輸出(I/O)。因此此為了提高OOraclee系統(tǒng)的效率率,一要減少少I/O量,這這可能是Orracle引引入LGWRR的原因之一一;二要減少少I/O次數(shù)數(shù),這可能是是Oraclle引入數(shù)據(jù)據(jù)庫寫進(jìn)程(DDBWR/DDBWn)的的主要原因。提示:在Oraclee的英文書中中有些將“數(shù)據(jù)庫寫進(jìn)進(jìn)程”用DBWRR表示,有些些將它用DBBWn表示。這這是因?yàn)樵谝灰粋€Oraccle實(shí)例中中可以啟動多多個數(shù)據(jù)庫寫寫進(jìn)程,特別別是在要進(jìn)行行大規(guī)模輸入入/輸出并且且運(yùn)行在多CCPU計算機(jī)機(jī)上的Oraacle數(shù)據(jù)據(jù)庫系統(tǒng)。OOraclee允許在一個個實(shí)例上最多多啟動10個個數(shù)據(jù)庫寫進(jìn)進(jìn)程,它們分分別是DBW
51、W0DBW9。數(shù)據(jù)庫寫進(jìn)程負(fù)負(fù)責(zé)將數(shù)據(jù)庫庫高速緩沖區(qū)區(qū)中的臟緩沖沖區(qū)中的數(shù)據(jù)據(jù)寫到數(shù)據(jù)文文件上。為了了提高效率,數(shù)數(shù)據(jù)庫寫進(jìn)程程并不是數(shù)據(jù)據(jù)庫高速緩沖沖區(qū)中的數(shù)據(jù)據(jù)一有變化就就寫數(shù)據(jù)文件件,而是積累累了足夠多的的數(shù)據(jù)一次寫寫一大批內(nèi)存存數(shù)據(jù)塊到數(shù)數(shù)據(jù)文件上。數(shù)據(jù)庫寫進(jìn)程將將在下列事件件之一發(fā)生時時把數(shù)據(jù)庫高高速緩沖區(qū)中中的數(shù)據(jù)寫到到數(shù)據(jù)文 件上:當(dāng)臟緩沖區(qū)的數(shù)數(shù)量超過了所所設(shè)定的限額額。當(dāng)所設(shè)定的時間間間隔已到。當(dāng)有進(jìn)程需要數(shù)數(shù)據(jù)庫高速緩緩沖區(qū)而卻找找不到空閑的的緩沖區(qū)時。當(dāng)校驗(yàn)點(diǎn)發(fā)生時時。當(dāng)某個表被刪除除(dropp)或被截斷斷(trunncate)時時。當(dāng)某個表空間被被設(shè)置為只讀讀狀態(tài)(r
52、eead onnly)時。當(dāng)使用類似于AALTER TABLEESPACEE userrs BEGGIN BAACKUP的的命令對某個個表空間進(jìn)行行聯(lián)機(jī)備份時時。當(dāng)某個臨時表空空間被設(shè)置為為只脫機(jī)狀態(tài)態(tài)(offlline)或或正常狀態(tài)(nnormall)時等。1.21 系系統(tǒng)監(jiān)督進(jìn)程程(SMONN)從前面的論述中中可以知道,由由于某種原因因Oraclle系統(tǒng)崩潰潰了(如斷電電),SGAA中任何沒有有來得及寫到到磁盤中的信信息都將丟失失,如有些已已經(jīng)提交的數(shù)數(shù)據(jù)還沒有真真正地被寫到到數(shù)據(jù)文件中中時就會丟失失。在這種情情況下,當(dāng)數(shù)數(shù)據(jù)庫重新開開啟時,系統(tǒng)統(tǒng)監(jiān)督進(jìn)程(SSMON)將將自動地執(zhí)行行Or
53、aclle實(shí)例的恢恢復(fù)工作。其其步驟如下:(1)執(zhí)行前滾滾(rolll forwward),即將已經(jīng)經(jīng)寫到重做日日志文件中但但還沒寫到數(shù)數(shù)據(jù)文件中的的提交數(shù)據(jù)寫寫到數(shù)據(jù)文件件中(Oraacle是用用SCN號碼碼來識別提交交記錄的)。(2)在前滾完完成后立即打打開數(shù)據(jù)庫,此此時用戶就可可以登錄并使使用數(shù)據(jù)庫了了。這時在數(shù)數(shù)據(jù)文件中可可能還有一些些沒有提交的的數(shù)據(jù)。之所所以這樣安排排主要是為了了提高系統(tǒng)的的效率。(3)回滾沒有有提交的事務(wù)務(wù)(數(shù)據(jù))。除除了SMONN進(jìn)程之外,服服務(wù)器(seerver)進(jìn)進(jìn)程也可能進(jìn)進(jìn)行回滾沒有有提交的事務(wù)務(wù),但該進(jìn)程程只回滾它所所用到的加鎖鎖的數(shù)據(jù)行。除此之外,S
54、MMON進(jìn)程還還要執(zhí)行如下下的磁盤空間間的維護(hù)工作作:回收或組合數(shù)據(jù)據(jù)文件中相連連的空閑區(qū)。釋放臨時段(在在執(zhí)行SQLL語句時用作作排序的磁盤盤區(qū)),將它它們還給數(shù)據(jù)據(jù)文件以作為為空閑區(qū)使用用。1.22 進(jìn)進(jìn)程監(jiān)督進(jìn)程程(PMONN)當(dāng)某個進(jìn)程崩潰潰時(如在沒沒有正常退出出Oraclle的情況下下重新啟動了了所用的PCC),進(jìn)程監(jiān)督督進(jìn)程(PMMON)將負(fù)責(zé)它的的清理工作。PPMON進(jìn)程程將負(fù)責(zé)進(jìn)行行如下的清理理工作:回滾用戶當(dāng)前的的事務(wù)。釋放用戶所加的的所有表一級級和行一級的的鎖。釋放用戶所有的的其他資源等等。1.23 校校驗(yàn)點(diǎn)(chheckpooint)和和校驗(yàn)點(diǎn)進(jìn)程程Oracle系系統(tǒng)為
55、了提高高系統(tǒng)的效率率和數(shù)據(jù)庫的的一致性,引引入了一個稱稱為校驗(yàn)點(diǎn)的的事件。該事事件是在當(dāng)DDBWR進(jìn)程程把在SGAA中所有已經(jīng)經(jīng)改變了的數(shù)數(shù)據(jù)庫高速緩緩沖區(qū)中的數(shù)數(shù)據(jù)(包括提提交的和沒提提交的數(shù)據(jù))寫寫到數(shù)據(jù)文件件上時產(chǎn)生。從理論上講校驗(yàn)點(diǎn)(checkpoint)和校驗(yàn)點(diǎn)進(jìn)程可以完全不需要,因?yàn)镺racle系統(tǒng)利用重做日志數(shù)據(jù)和SCN號是能夠保證數(shù)據(jù)庫的完全恢復(fù)的。引入校驗(yàn)點(diǎn)可能是為了提高系統(tǒng)的效率。因?yàn)樗械叫r?yàn)點(diǎn)為止的變化了的數(shù)據(jù)都已寫到了數(shù)據(jù)文件中,在實(shí)例恢復(fù)時校驗(yàn)點(diǎn)之前的重做日志記錄已經(jīng)不再需要,這樣實(shí)例恢復(fù)速度就加快了。在校驗(yàn)點(diǎn)事件發(fā)發(fā)生時,Orracle要要將校驗(yàn)點(diǎn)號號碼(Oraa
56、cle系統(tǒng)統(tǒng)自動產(chǎn)生的的)寫入所有有相關(guān)的數(shù)據(jù)據(jù)文件的文件件頭中。還要要將校驗(yàn)點(diǎn)號號碼、重做日日志序列號、歸歸檔日志名字字和SCN號號都寫入控制制文件中。盡管經(jīng)常產(chǎn)生校校驗(yàn)點(diǎn)可以加加快實(shí)例恢復(fù)復(fù)的速度,但但是由于在產(chǎn)產(chǎn)生校驗(yàn)點(diǎn)時時Oraclle系統(tǒng)要進(jìn)進(jìn)行大量的II/O操作,所以過于頻頻繁地產(chǎn)生校校驗(yàn)點(diǎn)會使數(shù)數(shù)據(jù)庫正常的的聯(lián)機(jī)操作受受到?jīng)_擊。最最后數(shù)據(jù)庫管管理員要在實(shí)實(shí)例恢復(fù)的速速度和聯(lián)機(jī)操操作之間進(jìn)行行折衷。一般般的生產(chǎn)或商商業(yè)數(shù)據(jù)庫的的校驗(yàn)點(diǎn)間隔隔是在半小時時以上。1.24 歸歸檔日志(AARCH/AARCn)進(jìn)進(jìn)程以上5個后臺進(jìn)進(jìn)程都是必需需的,即它們們中的任何一一個停止后實(shí)實(shí)例自動關(guān)閉
57、閉。在可選后后臺進(jìn)程中,歸檔日志(ARCH/ARCn)進(jìn)程可能是最重要的一個可選后臺進(jìn)程,因?yàn)槿绻鸒racle數(shù)據(jù)庫的數(shù)據(jù)文件丟失或損壞,一般數(shù)據(jù)庫要進(jìn)行完全恢復(fù),Oracle數(shù)據(jù)庫應(yīng)運(yùn)行在歸檔方式。在Oraclee數(shù)據(jù)庫中,重重做日志文件件被劃分為若若干個組。當(dāng)當(dāng)一組重做日日志的文件被被寫滿后,OOraclee就開始寫下下一組重做日日志,這被稱稱為日志切換換。切換是以以循環(huán)的方式式進(jìn)行的,即即當(dāng)最后一組組寫滿后,又又開始寫第一一組。因此如如果只有重做做日志文件,即即Oraclle數(shù)據(jù)庫運(yùn)運(yùn)行在非歸檔檔方式下,當(dāng)當(dāng)遇到數(shù)據(jù)文文件丟失或損損壞時,Orracle系系統(tǒng)很難保證證完全恢復(fù)數(shù)數(shù)據(jù)庫中的數(shù)數(shù)據(jù)。因?yàn)榇舜藭r所需的重重做記錄可能能因重做日志志循環(huán)使用而而被覆蓋掉了了。在歸檔方式下,AARCn進(jìn)程程將把切換后后的重做日志志文件復(fù)制到到歸檔日志文文件??梢园寻褮w檔日志文文件看成是重重做日志文件件的備份,但但歸檔日志文文件是脫機(jī)的的,即除了在在進(jìn)行(復(fù)制制)時,Orracl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個人融資合同續(xù)簽條件協(xié)議書范本3篇
- 2025年度個人住房抵押借款合同范本:家庭信用評級體系4篇
- 2025年度鋼材租賃與市場分析預(yù)測合同范本2篇
- 2025飾品店加盟合同協(xié)議書范本版
- 2025委托出口合同新范文
- 2025新盟食堂承包合同書(正本我做)
- 二零二五年度房地產(chǎn)項(xiàng)目投資合作協(xié)議范本6篇
- 二零二五年度集裝箱承攬運(yùn)輸管理協(xié)議3篇
- 二零二四年消防裝備租賃與購銷合同樣本3篇
- 2025年度金融行業(yè)個人勞務(wù)用工合同模板(二零二五版)4篇
- 2024年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招數(shù)學(xué)歷年參考題庫含答案解析
- 國旗班指揮刀訓(xùn)練動作要領(lǐng)
- 2024年國家工作人員學(xué)法用法考試題庫及參考答案
- 國家公務(wù)員考試(面試)試題及解答參考(2024年)
- 《阻燃材料與技術(shù)》課件 第6講 阻燃纖維及織物
- 2021-2022學(xué)年遼寧省重點(diǎn)高中協(xié)作校高一上學(xué)期期末語文試題
- 同等學(xué)力英語申碩考試詞匯(第六版大綱)電子版
- 人教版五年級上冊遞等式計算100道及答案
- 墓地個人協(xié)議合同模板
- 2024年部編版初中語文各年級教師用書七年級(上冊)
- 2024年新課標(biāo)全國Ⅰ卷語文高考真題試卷(含答案)
評論
0/150
提交評論