Oracle的邏輯結(jié)構(gòu)、物理結(jié)構(gòu)與實(shí)例(doc16頁)完美版_第1頁
Oracle的邏輯結(jié)構(gòu)、物理結(jié)構(gòu)與實(shí)例(doc16頁)完美版_第2頁
Oracle的邏輯結(jié)構(gòu)、物理結(jié)構(gòu)與實(shí)例(doc16頁)完美版_第3頁
Oracle的邏輯結(jié)構(gòu)、物理結(jié)構(gòu)與實(shí)例(doc16頁)完美版_第4頁
Oracle的邏輯結(jié)構(gòu)、物理結(jié)構(gòu)與實(shí)例(doc16頁)完美版_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Oracle 體系結(jié)構(gòu)數(shù)據(jù)庫(Database)數(shù)據(jù)庫是一個(gè)數(shù)據(jù)的集合, 不僅是指物理上的數(shù)據(jù), 也指物理、 存儲(chǔ)及進(jìn)程對(duì)象的一個(gè)組合。Oracle 是一個(gè)基于B/S 模式的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)( RDBMS ) 。Oracle 系統(tǒng)體系結(jié)構(gòu)由三部分組成:邏輯結(jié)構(gòu)、物理結(jié)構(gòu)和實(shí)例。數(shù)據(jù)庫(Database)一、 Oracle 的邏輯結(jié)構(gòu)Oracle 的邏輯結(jié)構(gòu)是一種層次結(jié)構(gòu)。主要由:表空間、段、區(qū)和數(shù)據(jù)塊等概念組成。邏輯結(jié)構(gòu)是面向用戶的,用戶使用 Oracle 開發(fā)應(yīng)用程序使用的就是邏輯結(jié)構(gòu)。數(shù)據(jù)庫存儲(chǔ)層次結(jié)構(gòu)及其構(gòu)成關(guān)系,結(jié)構(gòu)對(duì)象也從數(shù)據(jù)塊到表空間形成了不同層次的粒度關(guān)系。1 .數(shù)據(jù)塊( D

2、ata Blocks )數(shù)據(jù)塊是Oracle 最小的存儲(chǔ)單位, Oracle 數(shù)據(jù)存放在“塊”中。一個(gè)塊占用一定的磁盤空間。特別注意的是,這里的“塊”是Oracle 的“數(shù)據(jù)塊” ,不是操作系統(tǒng)的“塊” 。Oracle 每次請(qǐng)求數(shù)據(jù)的時(shí)候,都是以塊為單位。也就是說, Oracle 每次請(qǐng)求的數(shù)據(jù)是塊的整數(shù)倍。 如果 Oracle 請(qǐng)求的數(shù)據(jù)量不到一塊, Oracle 也會(huì)讀取整個(gè)塊。 所以說, “塊” 是 Oracle 讀寫數(shù)據(jù)的最小單位或者最基本的單位。塊的標(biāo)準(zhǔn)大小由初始化參數(shù)DB_BLOCK_SIZE 指定。 具有標(biāo)準(zhǔn)大小的塊稱為標(biāo)準(zhǔn)塊 (StandardBlock) 。塊的大小和標(biāo)準(zhǔn)塊的

3、大小不同的塊叫非標(biāo)準(zhǔn)塊 (Nonstandard Block) 。操作系統(tǒng)每次執(zhí)行I/O 的時(shí)候, 是以操作系統(tǒng)的塊為單位;Oracle 每次執(zhí)行 I/O 的時(shí)候, 都是以 Oracle 的塊為單位。Oracle 數(shù)據(jù)塊大小一般是操作系統(tǒng)塊的整數(shù)倍。數(shù)據(jù)塊的格式(Data Block Format)塊中存放表的數(shù)據(jù)和索引的數(shù)據(jù), 無論存放哪種類型的數(shù)據(jù), 塊的格式都是相同的, 塊由塊頭 (header/Common and Variable), 表目錄 (Table Directory), 行目錄 (Row Directory), 空余空間(Free Space)和行數(shù)據(jù)(Row Data)五

4、部分組成,如下圖塊頭 (header/Common and Variable) :存放塊的基本信息,如:塊的物理地址,塊所屬的段的類型(是數(shù)據(jù)段還是索引段) 。表目錄(Table Directory) :存放表的信息,即:如果一些表的數(shù)據(jù)被存放在這個(gè)塊中,那么,這些表的相關(guān)信息將被存放在“表目錄”中。行目錄(Row Directory) :如果塊中有行數(shù)據(jù)存在,則,這些行的信息將被記錄在行目錄中。這些信息包括行的地址等。行數(shù)據(jù)(Row Data) :是真正存放表數(shù)據(jù)和索引數(shù)據(jù)的地方。這部分空間是已被數(shù)據(jù)行占用的空間。空余空間(Free Space):空余空間是一個(gè)塊中未使用的區(qū)域,這片區(qū)域用于

5、新行的插入和已經(jīng)存在的行的更新。頭部信息區(qū)(Overhead):我們把塊頭(header/Common and Variable),表目錄(Table Directory),行目錄 (Row Directory) 這三部分合稱為頭部信息區(qū)(Overhead) 。頭部信息區(qū)不存放數(shù)據(jù),它存放的整個(gè)塊的信息。頭部信息區(qū)的大小是可變的。一般來說,頭部信息區(qū)的大小介于84 字節(jié)(bytes)至U 107 字節(jié)(bytes)之間。數(shù)據(jù)塊中自由空間的使用當(dāng)往數(shù)據(jù)庫中插入(INSERT)數(shù)據(jù)的時(shí)候,塊中的自由空間會(huì)減少;當(dāng)對(duì)塊中已經(jīng)存在的行進(jìn)行修改 (UPDATE) 的時(shí)候(使記錄長(zhǎng)度增加),塊中的自由空間

6、也會(huì)減少。DELETE 語句和 UPDATE 語句會(huì)使塊中的自由空間增加。當(dāng)使用 DELETE 語句刪除塊中的記錄或者使用 UPDATE 語句把列的值更改成一個(gè)更小值的時(shí)候, Oracle 會(huì)釋放出一部分自由空間。 釋放出的自由空間并不一定是連續(xù)的。 通常情況下, Oracle 不會(huì)對(duì)塊中不連續(xù)的自由空間進(jìn)行合并。 因?yàn)楹喜?shù)據(jù)塊中不連續(xù)的自由空間會(huì)影響數(shù)據(jù)庫的性能。 只有當(dāng)用戶進(jìn)行數(shù)據(jù)插入 (INSERT) 或者更新 (UPDATE) 操作,卻找不到連續(xù)的自由空間的時(shí)候, Oracle 才 會(huì)合并數(shù)據(jù)塊中不連續(xù)的自由空間。對(duì)于塊中的自由空間, Oracle 提供兩種管理方式:自動(dòng)管理,手動(dòng)管

7、理行鏈接和行遷移 (Row Chaining and Migrating)行鏈接(Row Chaining):如果我們往數(shù)據(jù)庫中插入(INSERT)一行數(shù)據(jù),這行數(shù)據(jù)很大,以至于一個(gè)數(shù)據(jù)塊存不下一整行, Oracle 就會(huì)把一行數(shù)據(jù)分作幾段存在幾個(gè)數(shù)據(jù)塊中, 這個(gè)過程 叫行鏈接 (Row Chaining) 。如下圖所示:如果一行數(shù)據(jù)是普通行,這行數(shù)據(jù)能夠存放在一個(gè)數(shù)據(jù)塊中 ;如果一行數(shù)據(jù)是鏈接行,這行數(shù)據(jù)存放在多個(gè)數(shù)據(jù)塊中。行遷移 (Row Migrating) :數(shù)據(jù)塊中存在一條記錄,用戶執(zhí)行UPDATE 更新這條記錄,這個(gè)UPDATE 操作使這條記錄變長(zhǎng), 這時(shí)候, Oracle 在這個(gè)

8、數(shù)據(jù)塊中進(jìn)行查找, 但是找不到能夠 容納下這條記錄的空間, 無奈之下, Oracle 只能把整行數(shù)據(jù)移到一個(gè)新的數(shù)據(jù)塊。 原來的數(shù) 據(jù)塊中保留一個(gè)“指針” ,這個(gè)“指針”指向新的數(shù)據(jù)塊。被移動(dòng)的這條記錄的 ROWID 保 持不變。行遷移的原理如下圖所示:無論是行鏈接還是行遷移, 都會(huì)影響數(shù)據(jù)庫的性能。 Oracle 在讀取這樣的記錄的時(shí)候, Oracle 會(huì)掃描多個(gè)數(shù)據(jù)塊,執(zhí)行更多的 I/O 。塊中自由空間的自動(dòng)管理Oracle 使用位圖 (bitmap) 來管理和跟蹤數(shù)據(jù)塊,這種塊的空間管理方式叫“自動(dòng)管理” 。自動(dòng) 管理有下面的好處:易于使用更好地利用空間可以對(duì)空間進(jìn)行實(shí)時(shí)調(diào)整塊中自由空間

9、的手動(dòng)管理用戶可以通過PCTFREE, PCTUSED 來調(diào)整塊中空間的使用,這種管理方式叫手動(dòng)管理。相對(duì)于自動(dòng)管理,手動(dòng)管理方式比較麻煩,不容易掌握,容易造成塊中空間的浪費(fèi)。PCTUSED 也是用于設(shè)置一個(gè)百分比,當(dāng)塊中已使用的空間的比例小于這個(gè)百分比的時(shí)候,這個(gè)塊才被標(biāo)識(shí)為有效狀態(tài)。只有有效的塊才被允許插入數(shù)據(jù)。PCTFREE 參數(shù)用于指定塊中必須保留的最小空閑空間百分例, 默認(rèn)值為10。 之所以要預(yù)留這樣的空間, 是因?yàn)?UPDATE 時(shí), 需要這些空間。 如果 UPDATE 時(shí), 沒有空余空間, Oracle 就會(huì)分配一個(gè)新的塊,這會(huì)產(chǎn)生行遷移 (Row Migrating) 。例如,

10、假定在Create table語句中指定了 pctfree為20,則說明在該表的數(shù)據(jù)段內(nèi)每個(gè)數(shù)據(jù)塊的 20%被作為可利用的空閑空間,用于更新已在數(shù)據(jù)塊內(nèi)存在的數(shù)據(jù)行其余80%是用于插入新的數(shù)據(jù)行,直到達(dá)到 80% 為止。顯然, pctfree 值越小,則為現(xiàn)存行更新所預(yù)留的空間越少。因此,如果pctfree 設(shè)置得太高,則在全表掃描期間增加 I/O ,浪費(fèi)磁盤空間;如果pctfree 設(shè)置得太低,則會(huì)導(dǎo)致行遷移。 pctused 參數(shù)設(shè)置了數(shù)據(jù)塊是否是空閑的界限。 當(dāng)數(shù)據(jù)塊的使用空間低于pctused 的值時(shí), 此數(shù)據(jù)塊標(biāo)志為空閑,該空閑空間僅用于插入新的行。如果數(shù)據(jù)塊已經(jīng)達(dá)到了由 pctfr

11、ee 所確 定的上邊界時(shí), Oracle 就認(rèn)為此數(shù)據(jù)塊已經(jīng)無法再插入新的行。例如,假定在 Create table 語句中指定pctused 為 40,則當(dāng)小于或等于39 時(shí),該數(shù)據(jù)塊才是可用的。所以,可將數(shù)據(jù)塊填得更滿, 這樣可節(jié)省空間, 但卻增加了處理開銷, 因?yàn)閿?shù)據(jù)塊的空閑空間總是要被更新 的行占據(jù),所以對(duì)數(shù)據(jù)塊需要頻繁地進(jìn)行重新組織。比較低的pctused增加了數(shù)據(jù)庫的空閑空間,但減少了更新操作的處理開銷。所以,如果pctused 設(shè)置過高,則會(huì)降低磁盤的利用率導(dǎo)致行遷移;若pctused設(shè)置過低,則浪費(fèi)磁盤空間,增加全表掃描時(shí)的I/O輸出。pctused 是與 pctfree 相對(duì)

12、的參數(shù)。那么,如何選擇 pctfree和pctused的值呢?有個(gè)公式可供參考。顯然, pctfree和pctused的之和不能超過100。 若兩者之和低于100, 則空間的利用與系統(tǒng)的 I/O 之間的最佳平衡點(diǎn)是:pctfree 與 pctused 之和等于 100%減去一行的大小占?jí)K空間大小的百分比。例如,如果塊大小為 2048 字節(jié),則它需要100 個(gè)字節(jié)的開銷,而行大小是390 字節(jié)(為可用塊的 20% ) 。為了充分利用空間,pctfree與pctused之和最好為80%。那么,怎樣確定數(shù)據(jù)塊大小呢?有兩個(gè)因素需要考慮:一是數(shù)據(jù)庫環(huán)境類型。 例如, 是 DSS 環(huán)境還是 OLTP 環(huán)

13、境?在數(shù)據(jù)倉(cāng)庫環(huán)境( OLAP 或 DSS)下,用戶需要進(jìn)行許多運(yùn)行時(shí)間很長(zhǎng)的查詢,所以應(yīng)當(dāng)使用大的數(shù)據(jù)塊。在OLTP 系統(tǒng)中,用戶處理大量的小型事務(wù),采用較小數(shù)據(jù)塊能夠獲得更好的效果。二是 SGA 的大小。 數(shù)據(jù)庫緩沖區(qū)的大小由數(shù)據(jù)塊大小和初始化文件的 db_block_buffers 參數(shù)決定。最好設(shè)為操作系統(tǒng)I/O 的整數(shù)倍。2 數(shù)據(jù)區(qū)(Extent )是一組連續(xù)的數(shù)據(jù)塊。 當(dāng)一個(gè)表、 回滾段或臨時(shí)段創(chuàng)建或需要附加空間時(shí), 系統(tǒng)總是為之分配一個(gè)新的數(shù)據(jù)區(qū)。 一個(gè)數(shù)據(jù)區(qū)不能跨越多個(gè)文件, 因?yàn)樗B續(xù)的數(shù)據(jù)塊。 使用區(qū)的目的是用來保存特定數(shù)據(jù)類型的數(shù)據(jù),也是表中數(shù)據(jù)增長(zhǎng)的基本單位。在Or

14、acle 數(shù)據(jù)庫中,分配空間就是以數(shù)據(jù)區(qū)為單位的。一個(gè)Oracle 對(duì)象包含至少一個(gè)數(shù)據(jù)區(qū)。設(shè)置一個(gè)表或索引的存儲(chǔ)參數(shù)包含設(shè)置它的數(shù)據(jù)區(qū)大小。3 段(Segment)是由多個(gè)數(shù)據(jù)區(qū)構(gòu)成的,它是為特定的數(shù)據(jù)庫對(duì)象(如表段、索引段、回滾段、臨時(shí)段)分配的一系列數(shù)據(jù)區(qū)。 段內(nèi)包含的數(shù)據(jù)區(qū)可以不連續(xù), 并且可以跨越多個(gè)文件。 使用段的目的是用來保存特定對(duì)象。一個(gè)Oracle 數(shù)據(jù)庫有 4 種類型的段:數(shù)據(jù)段:數(shù)據(jù)段也稱為表段,它包含數(shù)據(jù)并且與表和簇相關(guān)。 當(dāng)創(chuàng)建一個(gè)表時(shí),系統(tǒng)自動(dòng)創(chuàng)建一個(gè)以該表的名字命名的數(shù)據(jù)段。索引段: 包含了用于提高系統(tǒng)性能的索引。 一旦建立索引, 系統(tǒng)自動(dòng)創(chuàng)建一個(gè)以該索引的名字命

15、名的索引段。回滾段: 包含了回滾信息, 并在數(shù)據(jù)庫恢復(fù)期間使用, 以便為數(shù)據(jù)庫提供讀入一致性和回滾未提交的事務(wù), 即用來回滾事務(wù)的數(shù)據(jù)空間。 當(dāng)一個(gè)事務(wù)開始處理時(shí), 系統(tǒng)為之分配回滾段,回滾段可以動(dòng)態(tài)創(chuàng)建和撤銷。 系統(tǒng)有個(gè)默認(rèn)的回滾段, 其管理方式既可以是自動(dòng)的, 也可以是手工的。臨時(shí)段:它是Oracle 在運(yùn)行過程中自行創(chuàng)建的段。當(dāng)一個(gè)SQL 語句需要臨時(shí)工作區(qū)時(shí),由Oracle 建立臨時(shí)段。一旦語句執(zhí)行完畢,臨時(shí)段的區(qū)間便退回給系統(tǒng)。4 表空間(tablespace)是數(shù)據(jù)庫的邏輯劃分。 任何數(shù)據(jù)庫對(duì)象在存儲(chǔ)時(shí)都必須存儲(chǔ)在某個(gè)表空間中。 表空間對(duì)應(yīng)于若干個(gè)磁盤文件, 即表空間是由一個(gè)或多個(gè)

16、磁盤文件構(gòu)成的。 表空間相當(dāng)于操作系統(tǒng)中的文件夾,也是數(shù)據(jù)庫邏輯結(jié)構(gòu)與物理文件之間的一個(gè)映射。每個(gè)數(shù)據(jù)庫至少有一個(gè)表空間( system tablespace) ,表空間的大小等于所有從屬于它的數(shù)據(jù)文件大小的總和。( 1 )系統(tǒng)表空間( system tablespace)是每個(gè) Oracle 數(shù)據(jù)庫都必須具備的。其功能是在系統(tǒng)表空間中存放諸如表空間名稱、表空間所含數(shù)據(jù)文件等數(shù)據(jù)庫管理所需的信息。 系統(tǒng)表空間的名稱是不可更改的。 系統(tǒng)表空間必須在任何時(shí)候都可以用,也是數(shù)據(jù)庫運(yùn)行的必要條件。因此,系統(tǒng)表空間是不能脫機(jī)的。系統(tǒng)表空間包括數(shù)據(jù)字典、 存儲(chǔ)過程、 觸發(fā)器和系統(tǒng)回滾段。 為避免系統(tǒng)表空間

17、產(chǎn)生存儲(chǔ)碎片以及爭(zhēng)用系統(tǒng)資源的問題,應(yīng)創(chuàng)建一個(gè)獨(dú)立的表空間用來單獨(dú)存儲(chǔ)用戶數(shù)據(jù)。( 2 ) SYSAUX 表空間是隨著數(shù)據(jù)庫的創(chuàng)建而創(chuàng)建的,它充當(dāng) SYSTEM 的輔助表空間,主要存儲(chǔ)除數(shù)據(jù)字典以外的其他對(duì)象。 SYSAUX 也是許多 Oracle 數(shù)據(jù)庫的默認(rèn)表空間,它減少了由數(shù)據(jù)庫和 DBA管理的表空間數(shù)量,降低了 SYSTEM 表空間的負(fù)荷。( 3 )臨時(shí)表空間相對(duì)于其他表空間而言,臨時(shí)表空間( temp tablespaces)主要用于存儲(chǔ) Oracle數(shù)據(jù)庫運(yùn)行期間所產(chǎn)生的臨時(shí)數(shù)據(jù)。 數(shù)據(jù)庫可以建立多個(gè)臨時(shí)表空間。 當(dāng)數(shù)據(jù)庫關(guān)閉后, 臨時(shí)表空間中所有數(shù)據(jù)將全部被清除。除臨時(shí)表空間外,

18、其他表空間都屬于永久性表空間。( 4 )撤銷表空間用于保存 Oracle 數(shù)據(jù)庫撤銷信息,即保存用戶回滾段的表空間稱之為回滾表空間(或簡(jiǎn)稱為 RBS 撤銷表空間( undo tablespace) ) 。在 Oracle8i 中是 rollback tablespace ,從 Oracle9i 開 始改為undo tablespace。在Oracle 10g中初始創(chuàng)建的只有 6個(gè)表空間sysaux、system、temp、 undotbsl、example和users。其中temp是臨時(shí)表空間,undotbs1是undo撤銷表空間。( 5 ) USERS 表空間用戶表空間, 用于存放永久性用戶

19、對(duì)象的數(shù)據(jù)和私有信息。 每個(gè)數(shù)據(jù)塊都應(yīng)該有一個(gè)用戶表空間,以便在創(chuàng)建用戶是將其分配給用戶。二、物理結(jié)構(gòu)Oracle 物理結(jié)構(gòu)包含了數(shù)據(jù)文件、日志文件和控制文件1 .數(shù)據(jù)文件每一個(gè) ORACLE 數(shù)據(jù)庫有一個(gè)或多個(gè)物理的數(shù)據(jù)文件(data file) 。一個(gè)數(shù)據(jù)庫的數(shù)據(jù)文件包含全部數(shù)據(jù)庫數(shù)據(jù)。 邏輯數(shù)據(jù)庫結(jié)構(gòu)(如表、索引)的數(shù)據(jù)物理地存儲(chǔ)在數(shù)據(jù)庫的數(shù)據(jù)文件中。數(shù)據(jù)文件有下列特征:一個(gè)數(shù)據(jù)文件僅與一個(gè)數(shù)據(jù)庫聯(lián)系。一旦建立,數(shù)據(jù)文件不能改變大小 .一個(gè)表空間(數(shù)據(jù)庫存儲(chǔ)的邏輯單位)由一個(gè)或多個(gè)數(shù)據(jù)文件組成。數(shù)據(jù)文件中的數(shù)據(jù)在需要時(shí)可以讀取并存儲(chǔ)在ORACLE 內(nèi)存儲(chǔ)區(qū)中。例如:用戶要存取數(shù)據(jù)庫一表的

20、某些數(shù)據(jù), 如果請(qǐng)求信息不在數(shù)據(jù)庫的內(nèi)存存儲(chǔ)區(qū)內(nèi), 則從相應(yīng)的數(shù)據(jù)文件中讀取并存儲(chǔ)在內(nèi)存。 當(dāng)修改和插入新數(shù)據(jù)時(shí), 不必立刻寫入數(shù)據(jù)文件。 為了減少磁盤輸出的總數(shù), 提高性能, 數(shù)據(jù)存儲(chǔ)在內(nèi)存, 然后由 ORACLE 后臺(tái)進(jìn)程 DBWR 決定如何將其寫入到相 應(yīng)的數(shù)據(jù)文件。2 .日志文件每一個(gè)數(shù)據(jù)庫有兩個(gè)或多個(gè)日志文件( redo log file )的組, 每一個(gè)日志文件組用于收集數(shù)據(jù)庫日志。 日志的主要功能是記錄對(duì)數(shù)據(jù)所作的修改, 所以對(duì)數(shù)據(jù)庫作的全部修改是記錄在日志中。 在出現(xiàn)故障時(shí), 如果不能將修改數(shù)據(jù)永久地寫入數(shù)據(jù)文件, 則可利用日志得到該修改,所以從不會(huì)丟失已有操作成果。日志文件主

21、要是保護(hù)數(shù)據(jù)庫以防止故障。為了防止日志文件本身的故障, ORACLE 允許鏡象日志 (mirrored redo log) ,以致可在不同磁盤上維護(hù)兩個(gè)或多個(gè)日志副本。日志文件中的信息僅在系統(tǒng)故障或介質(zhì)故障恢復(fù)數(shù)據(jù)庫時(shí)使用, 這些故障阻止將數(shù)據(jù)庫數(shù)據(jù)寫入到數(shù)據(jù)庫的數(shù)據(jù)文件。然而任何丟失的數(shù)據(jù)在下一次數(shù)據(jù)庫打開時(shí), ORACLE 自動(dòng)地應(yīng)用日志文件中的信息來恢復(fù)數(shù)據(jù)庫數(shù)據(jù)文件。Oralce 兩種日志文件類型:聯(lián)機(jī)日志文件這是 Oracle 用來循環(huán)記錄數(shù)據(jù)庫改變的操作系統(tǒng)文件歸檔日志文件這是指為避免聯(lián)機(jī)日志文件重寫時(shí)丟失重復(fù)數(shù)據(jù)而對(duì)聯(lián)機(jī)日志文件所做的備份Oracle 有兩種歸檔日志模式, Ora

22、cle 數(shù)據(jù)庫可以采用其中任何一種模式:NOARCHIVELOG不對(duì)日志文件進(jìn)行歸檔。 這種模式可以大大減少數(shù)據(jù)庫備份的開銷, 但可能回導(dǎo)致數(shù)據(jù)的不可恢復(fù)ARCHIVELOG在這種模式下,當(dāng) Oracle 轉(zhuǎn)向一個(gè)新的日志文件時(shí),將以前的日志文件進(jìn)行歸檔。為了防止出現(xiàn)歷史 “缺口” 的情況,一個(gè)給定的日志文件在它成功歸檔之前是不能重新使用的。歸檔的日志文件,加上聯(lián)機(jī)日志文件,為數(shù)據(jù)庫的所有改變提供了完整的歷史信息。在 Oracle 利用日志文件和歸檔日志文件來恢復(fù)數(shù)據(jù)庫時(shí),內(nèi)部序列號(hào)可以起一個(gè)向?qū)У淖饔谩? .控制文件每一 ORACLE 數(shù)據(jù)庫有一個(gè)控制文件(control file) ,它記

23、錄數(shù)據(jù)庫的物理結(jié)構(gòu),包含下列信息類型:數(shù)據(jù)庫名;數(shù)據(jù)庫數(shù)據(jù)文件和日志文件的名字和位置;數(shù)據(jù)庫建立日期。為了安全起見,允許控制文件被鏡象。每一次 ORACLE 數(shù)據(jù)庫的實(shí)例啟動(dòng)時(shí),它的控制文件用于標(biāo)識(shí)數(shù)據(jù)庫和日志文件,當(dāng)著手?jǐn)?shù)據(jù)庫操作時(shí)它們必須被打開。當(dāng)數(shù)據(jù)庫的物理組成更改時(shí), ORACLE 自動(dòng)更改該數(shù)據(jù)庫的控制文件。數(shù)據(jù)恢復(fù)時(shí),也要使用控制文件。4 .參數(shù)文件除了構(gòu)成 Oracle 數(shù)據(jù)庫物理結(jié)構(gòu)的三類主要文件外, Oracle 數(shù)據(jù)庫還具有另外一種重要的文件:參數(shù)文件。參數(shù)文件記錄了 Oracle 數(shù)據(jù)庫的基本參數(shù)信息,主要包括數(shù)據(jù)庫名、控制文件所在路徑、進(jìn)程等。與舊版本的初始化參數(shù)文件I

24、NITsid.ora 不同,在 Oracle10g 中還可以使用二進(jìn)進(jìn)制服務(wù)器參數(shù)文件,并且該服務(wù)器參數(shù)文件在安裝Oracle 數(shù)據(jù)庫系統(tǒng)時(shí)由系統(tǒng)自動(dòng)創(chuàng)建,文件的名稱為 SPFILEsid.ora , sid 為所創(chuàng)建的數(shù)據(jù)庫實(shí)例名。SPFILEsid.ora 中的參數(shù)是由 Oracle 系統(tǒng)自動(dòng)管理。 如果想要對(duì)數(shù)據(jù)庫的某些參數(shù)進(jìn)行設(shè)置,則可能過 OEM 或 ALTER SYSTEM 命令來修改。用戶最好不要用編輯器進(jìn)行修改。三、實(shí)例(instance)數(shù)據(jù)庫實(shí)例 (也稱為服務(wù)器Server) 就是用來訪問一個(gè)數(shù)據(jù)庫文件集的一個(gè)存儲(chǔ)結(jié)構(gòu)及后臺(tái)進(jìn)程的集合。它使一個(gè)單獨(dú)的數(shù)據(jù)庫可以被多個(gè)實(shí)例訪問

25、(也就是ORACLE 并行服務(wù)器-OPS) 。實(shí)例在操作系統(tǒng)中用 ORACLE_SID 來標(biāo)識(shí), 在 Oracle 中用參數(shù) INSTANCE_NAME 來標(biāo)識(shí),它們兩個(gè)的值是相同的。 數(shù)據(jù)庫啟動(dòng)時(shí), 系統(tǒng)首先在服務(wù)器內(nèi)存中分配系統(tǒng)全局區(qū) ( SGA ) ,構(gòu)成了 Oracle 的內(nèi)存結(jié)構(gòu), 然后啟動(dòng)若干個(gè)常駐內(nèi)存的操作系統(tǒng)進(jìn)程, 即組成了 Oracle 的 進(jìn)程結(jié)構(gòu),內(nèi)存區(qū)域和后臺(tái)進(jìn)程合稱為一個(gè)Oracle 實(shí)例。1.系統(tǒng)全局區(qū)(SGA )SGA 是一組為系統(tǒng)分配的共享的內(nèi)存結(jié)構(gòu), 可以包含一個(gè)數(shù)據(jù)庫實(shí)例的數(shù)據(jù)或控制信: 息。如果多個(gè)用戶連接到同一個(gè)數(shù)據(jù)庫實(shí)例, 在實(shí)例的 SGA 中, 數(shù)據(jù)

26、可以被多個(gè)用戶共享, 當(dāng) 數(shù)據(jù)庫實(shí)例啟動(dòng)時(shí), SGA 的內(nèi)存被自動(dòng)分配; 當(dāng)數(shù)據(jù)庫實(shí)例關(guān)閉時(shí), SGA 內(nèi)存被回收。 SGA 是占用內(nèi)存最大的一個(gè)區(qū)域,同時(shí)也是影響數(shù)據(jù)庫性能的重要因素。系統(tǒng)全局區(qū)(SGA ) ,主要包括:1)數(shù)據(jù)塊緩存區(qū) 數(shù)據(jù)塊緩存區(qū)(datablockbuffercache) 是 SGA 中的一個(gè)高速緩存區(qū)域, 用來存儲(chǔ)從數(shù)據(jù)庫中讀取數(shù)據(jù)段的數(shù)據(jù)塊(如表、索引和簇 )。 數(shù)據(jù)塊緩存區(qū)的大小由數(shù)據(jù)庫服務(wù)器 init.ora 文件中的DB_LOCK_BUFFERS 參數(shù)決定 (用數(shù)據(jù)庫塊的個(gè)數(shù)表示) 。在調(diào)整和管理數(shù)據(jù)庫時(shí),調(diào)整數(shù)據(jù)塊緩存區(qū)的大小是一個(gè)重要的部分。 因?yàn)閿?shù)據(jù)塊緩

27、存區(qū)的大小固定, 并且其大小通常小于數(shù)據(jù)庫段所使用的空間, 所以它不能一 次裝載下內(nèi)存中所有的數(shù)據(jù)庫段。通常,數(shù)據(jù)塊緩存區(qū)只是數(shù)據(jù)庫大小的1%2%, Oracle使用最近最少使用(LRU , leastrecentlyused)算法來管理可用空間。當(dāng)存儲(chǔ)區(qū)需要自由空間時(shí),最近最少使用塊將被移出, 新數(shù)據(jù)塊將在存儲(chǔ)區(qū)代替它的位置。 通過這種方法, 將最頻繁使 用的數(shù)據(jù)保存在存儲(chǔ)區(qū)中。 然而,如果SGA 的大小不足以容納所有最常使用的數(shù)據(jù),那么,不同的對(duì)象將爭(zhēng)用數(shù)據(jù)塊緩存區(qū)中的空間。當(dāng)多個(gè)應(yīng)用程序共享同一個(gè)SGA 時(shí),很有可能發(fā)生這種情況。此時(shí),每個(gè)應(yīng)用的最近使用段都將與其他應(yīng)用的最近使用段爭(zhēng)奪S

28、GA 中的空間。其結(jié)果是,對(duì)數(shù)據(jù)塊緩存區(qū)的數(shù)據(jù)請(qǐng)求將出現(xiàn)較低的命中率,導(dǎo)致系統(tǒng)性能下降。 2)字典緩存區(qū) 數(shù)據(jù)庫對(duì)象的信息存儲(chǔ)在數(shù)據(jù)字典表中,這些信息包括用戶帳號(hào)數(shù)據(jù)、數(shù)據(jù)文件名、段名、 盤區(qū)位置、表說明和權(quán)限,當(dāng)數(shù)據(jù)庫需要這些信息 (如檢查用戶查詢一個(gè)表的授權(quán))時(shí),將讀取數(shù)據(jù)字典表并且將返回的數(shù)據(jù)存儲(chǔ)在字典緩存區(qū)的 SGA 中。 數(shù)據(jù)字典緩存區(qū)通過最近最少使用 (LRU) 算法來管理。字典緩存區(qū)的大小由數(shù)據(jù)庫內(nèi)部管 理。字典緩存區(qū)是SQL 共享池的一部分,共享池的大小由數(shù)據(jù)庫文件init.ora 中的SHARED_POOL_SIZE 參數(shù)來設(shè)置。 如果字典緩存區(qū)太小, 數(shù)據(jù)庫就不得不反復(fù)查詢

29、數(shù)據(jù)字典表以訪問數(shù)據(jù)庫所需的信息, 這些 查詢稱為循環(huán)調(diào)用 (recuesivecall) ,這時(shí)的查詢速度相對(duì)字典緩存區(qū)獨(dú)立完成查詢時(shí)要低。 3)重做日志緩沖區(qū) 重做項(xiàng)描述對(duì)數(shù)據(jù)庫進(jìn)行的修改。 它們寫到聯(lián)機(jī)重做日志文件中, 以便在數(shù)據(jù)庫恢復(fù)過程中 用于向前滾動(dòng)操作。 然而, 在被寫入聯(lián)機(jī)重做日志文件之前, 事務(wù)首先被記錄在稱作重做日 志緩沖區(qū)(redologbuffer) 的 SGA 中。數(shù)據(jù)庫可以周期地分批向聯(lián)機(jī)重做日志文件中寫重做項(xiàng)的內(nèi)容,從而優(yōu)化這個(gè)操作。重做日志緩沖區(qū)的大小 ( 以字節(jié)為單位) 由 init.ora 文件中的LOG_BUFFER 參數(shù)決定。 4) SQL 共享池 SQ

30、L 共享池存儲(chǔ)數(shù)據(jù)字典緩存區(qū)及庫緩存區(qū)(librarycache) ,即對(duì)數(shù)據(jù)庫進(jìn)行操作的語句信息。 當(dāng)數(shù)據(jù)塊緩沖區(qū)和字典緩存區(qū)能夠共享數(shù)據(jù)庫用戶間的結(jié)構(gòu)及數(shù)據(jù)信息時(shí), 庫緩存區(qū)允 許共享常用的 SQL 語句。 SQL 共享池包括執(zhí)行計(jì)劃及運(yùn)行數(shù)據(jù)庫的 SQL 語句的語法分析樹。 在第二次運(yùn)行(由任何用戶 ) 相同的 SQL 語句時(shí),可以利用 SQL 共享池中可用的語法分析信息來加快執(zhí)行速度。 SQL 共享池通過LRU 算法來管理。 當(dāng) SQL 共享池填滿時(shí), 將從庫緩存區(qū)中刪掉最近最少使用的執(zhí)行路徑和語法分析樹,以便為新的條目騰出空間。如果SQL 共享池太小,語句將被連續(xù)不斷地再裝入到庫緩存

31、區(qū),從而影響操作性能。 SQL 共享池的大?。ㄒ宰止?jié)為單位)由 init.ora 文件參數(shù) SHARED_POOL_SIZE 決定。5)大池 大池 (LargePool) 是一個(gè)可選內(nèi)存區(qū)。如果使用線程服務(wù)器選項(xiàng)或頻繁執(zhí)行備份/恢復(fù)操作,只要?jiǎng)?chuàng)建一個(gè)大池,就可以更有效地管理這些操作。大池將致力于支持SQL 大型命令。利用大池,就可以防止這些SQL 大型命令把條目重寫入 SQL 共享池中,從而減少再裝入到庫緩存區(qū)中的語句數(shù)量。大池的大?。ㄒ宰止?jié)為單位)通過init.ora 文件的 LARGE_POOL_SIZE參數(shù)設(shè)置,用戶可以使用 init.ora 文件的 LARGE_POOL_MIN_ALL

32、OC 參數(shù)設(shè)置大池中的最小位置。 Oracle8i 已不用這個(gè)參數(shù)。作為使用 LargePool 的一種選擇方案,可以用 init.ora 文 件的 SHARED_POOL_RESERVED_SIZE 參數(shù)為 SQL 大型語句保留一部分SQL 共享池。6) Java 池由其名字可知, Java 池為 Java 命令提供語法分析。 Java 池的大小 ( 以字節(jié)為單位)通過在Oracle8i 引 入 的 init.ora 文 件 的 JAVA_POOL_SIZE 參 數(shù) 設(shè) 置 。 init.ora 文 件 的JAVA_POOL_SIZE 參數(shù)缺省設(shè)置為 10MB 。7)多緩沖池可以在 SGA

33、中創(chuàng)建多個(gè)緩沖池,能夠用多個(gè)緩沖池把大數(shù)據(jù)集與其他的應(yīng)用程序分開,以減少它們爭(zhēng)奪數(shù)據(jù)塊緩存區(qū)內(nèi)相同資源的可能性。對(duì)于創(chuàng)建的每一個(gè)緩沖池,都要規(guī)定其LRU 鎖存器的大小和數(shù)量。緩沖區(qū)的數(shù)量必須至少比LRU 鎖存器的數(shù)量多 50 倍。創(chuàng)建緩沖池時(shí),需要規(guī)定保存區(qū)(keeparea)的大小和再循環(huán)區(qū)(recyclearea)的大小。與SQL共 享池的保留區(qū)一樣,保存區(qū)保持條目,而再循環(huán)區(qū)則被頻繁地再循環(huán)使用。可以通過BUFFER_POOL_KEEP 參數(shù)規(guī)定來保存區(qū)的大小。例如:保存和再 循環(huán)緩沖池的容 量減少了數(shù)據(jù)塊 緩 沖存儲(chǔ) 區(qū)中的可用空間(通過DB_BLOCK_BUFFERS 參數(shù)設(shè)置)。對(duì)

34、于使用一個(gè)新緩沖池的表,通過表的storage 子句中的 buffer_pool 參數(shù)來規(guī)定緩沖池的名字。例如,如果需要從內(nèi)存中快速刪除一個(gè)表,就把 它賦予 RECYCLE 池。 缺省池叫作DEFAULT , 這樣就能在以后用 altertable 命令把一個(gè)表轉(zhuǎn)移到 DEFAULT 池。2.后臺(tái)進(jìn)程(Backgroung Process)數(shù)據(jù)庫的物理結(jié)構(gòu)與內(nèi)存結(jié)構(gòu)之間的交互要通過后臺(tái)進(jìn)程來完成。1、 DBWR 進(jìn)程:該進(jìn)程執(zhí)行將緩沖區(qū)寫入數(shù)據(jù)文件,是負(fù)責(zé)緩沖存儲(chǔ)區(qū)管理的一個(gè)Oracle后臺(tái)進(jìn)程。 當(dāng)緩沖區(qū)中的一緩沖區(qū)被修改, 它被標(biāo)志為 “弄臟” , DBWR 的主要任務(wù)是將 “弄 臟”的緩

35、沖區(qū)寫入磁盤,使緩沖區(qū)保持“干凈” 。由于緩沖存儲(chǔ)區(qū)的緩沖區(qū)填入數(shù)據(jù)庫或被 用戶進(jìn)程弄臟, 未用的緩沖區(qū)的數(shù)目減少。 當(dāng)未用的緩沖區(qū)下降到很少, 以致用戶進(jìn)程要從 磁盤讀入塊到內(nèi)存存儲(chǔ)區(qū)時(shí)無法找到未用的緩沖區(qū)時(shí), DBWR 將管理緩沖存儲(chǔ)區(qū),使用戶 進(jìn)程總可得到未用的緩沖區(qū)。Oracle 采用 LRU ( LEAST RECENTL Y USED )算法(最近最少使用算法)保持內(nèi)存中的數(shù)據(jù)塊是最近使用的,使I/O 最小。在下列情況預(yù)示DBWR 要將弄臟的緩沖區(qū)寫入磁盤:當(dāng)一個(gè)服務(wù)器進(jìn)程將一緩沖區(qū)移入“弄臟”表, 該弄臟表達(dá)到臨界長(zhǎng)度時(shí),該服務(wù)進(jìn)程將通知 DBWR 進(jìn)行寫。該臨界長(zhǎng)度是為參數(shù) D

36、B-BLOCK-WRITE-BATCH 的值的一半。當(dāng)一個(gè)服務(wù)器進(jìn)程在LRU 表中查找 DB-BLOCK-MAX-SCAN-CNT 緩沖區(qū)時(shí),沒有查到未用的緩沖區(qū),它停止查找并通知 DBWR 進(jìn)行寫。出現(xiàn)超時(shí)(每次3 秒) , DBWR 將通知本身。 當(dāng)出現(xiàn)檢查點(diǎn)時(shí), LGWR 將通知 DBWR. 在前兩種情況下, DBWR 將弄臟表中的塊寫入磁盤, 每次可寫的塊數(shù)由初始化參數(shù)DB-BLOCK- WRITE-BA TCH 所指定。 如果弄臟表中沒有該參數(shù)指定塊數(shù)的緩沖區(qū), DBWR 從 LUR 表中查找另外一個(gè)弄臟緩沖區(qū)。如果 DBWR 在三秒內(nèi)未活動(dòng),則出現(xiàn)超時(shí)。在這種情況下DBWR 對(duì) L

37、RU 表查找指定數(shù)目的緩沖區(qū),將所找到任何弄臟緩沖區(qū)寫入磁盤。每當(dāng)出現(xiàn)超時(shí), DBWR 查找一個(gè)新的緩沖區(qū)組。每次由 DBWR 查找的緩沖區(qū)的數(shù)目是為寢化參數(shù) DB-BLOCK- WRITE-BA TCH 的值的二倍。如果數(shù)據(jù)庫空運(yùn)轉(zhuǎn), DBWR 最終將全部緩沖區(qū)存儲(chǔ)區(qū)寫入磁盤。在出現(xiàn)檢查點(diǎn)時(shí), LGWR 指定一修改緩沖區(qū)表必須寫入到磁盤。 DBWR 將指定的緩沖區(qū)寫 入磁盤。在有些平臺(tái)上,一個(gè)實(shí)例可有多個(gè)DBWR. 在這樣的實(shí)例中,一些塊可寫入一磁盤,另一些塊可寫入其它磁盤。參數(shù)DB-WRITERS 控制 DBWR 進(jìn)程個(gè)數(shù)。2、 LGWR 進(jìn)程:該進(jìn)程將日志緩沖區(qū)寫入磁盤上的一個(gè)日志文件,

38、它是負(fù)責(zé)管理日志緩沖區(qū)的一個(gè) Oracle 后臺(tái)進(jìn)程。 LGWR 進(jìn)程將自上次寫入磁盤以來的全部日志項(xiàng)輸出, LGWR 輸出: 當(dāng)用戶進(jìn)程提交一事務(wù)時(shí)寫入一個(gè)提交記錄。每三秒將日志緩沖區(qū)輸出。 當(dāng)日志緩沖區(qū)的1/3已滿時(shí)將日志緩沖區(qū)輸出。 當(dāng)DBWR將修改緩沖區(qū)寫入磁盤時(shí)則將日志緩沖區(qū)輸出。LGWR 進(jìn)程同步地寫入到活動(dòng)的鏡象在線日志文件組。 如果組中一個(gè)文件被刪除或不可用,LGWR 可繼續(xù)地寫入該組的其它文件。日志緩沖區(qū)是一個(gè)循環(huán)緩沖區(qū)。當(dāng) LGWR 將日志緩沖區(qū)的日志項(xiàng)寫入日志文件后,服務(wù)器進(jìn)程可將新的日志項(xiàng)寫入到該日志緩沖區(qū)。LGWR 通常寫得很快,可確保日志緩沖區(qū)總有空間可寫入新的日志

39、項(xiàng)。注意:有時(shí)候當(dāng)需要更多的日志緩沖區(qū)時(shí),LWGR 在一個(gè)事務(wù)提交前就將日志項(xiàng)寫出,而這些日志項(xiàng)僅當(dāng)在以后事務(wù)提交后才永久化。ORACLE使用快速提交機(jī)制,當(dāng)用戶發(fā)出COMMIT 語句時(shí),一個(gè)COMMIT記錄立即放入日志緩沖區(qū),但相應(yīng)的數(shù)據(jù)緩沖區(qū)改變是被延遲,直到在更有效時(shí)才將它們寫入數(shù)據(jù)文件。當(dāng)一事務(wù)提交時(shí),被賦給一個(gè)系統(tǒng)修改號(hào)(SCN) ,它同事務(wù)日志項(xiàng)一起記錄在日志中。由于 SCN 記錄在日志中,以致在并行服務(wù)器選項(xiàng)配置情況下,恢復(fù)操作可以同步。3、 CKPT 進(jìn)程:該進(jìn)程在檢查點(diǎn)出現(xiàn)時(shí),對(duì)全部數(shù)據(jù)文件的標(biāo)題進(jìn)行修改,指示該檢查點(diǎn)。在通常的情況下,該任務(wù)由 LGWR 執(zhí)行。然而,如果檢查

40、點(diǎn)明顯地降低系統(tǒng)性能時(shí),可使CKPT 進(jìn)程運(yùn)行, 將原來由 LGWR 進(jìn)程執(zhí)行的檢查點(diǎn)的工作分離出來, 由 CKPT 進(jìn)程實(shí)現(xiàn)。對(duì)于許多應(yīng)用情況, CKPT 進(jìn)程是不必要的。 只有當(dāng)數(shù)據(jù)庫有許多數(shù)據(jù)文件, LGWR 在檢查點(diǎn)時(shí)明顯地降低性能才使CKPT 運(yùn)行。 CKPT 進(jìn)程不將塊寫入磁盤, 該工作是由 DBWR 完成的。初始化參數(shù)CHECKPOINT-PROCESS 控制 CKPT 進(jìn)程的使能或使不能。缺省時(shí)為FALSE ,即為使不能。由于 Oracle 中 LGWR 和 DBWR 工作的不一致, Oracle 引入了檢查點(diǎn)的概念, 用于同步數(shù)據(jù)庫,保證數(shù)據(jù)庫的一致性。在Oracle 里面,

41、檢查點(diǎn)分為兩種:完全檢查點(diǎn)和增量檢查點(diǎn)。下面我們分別介紹這兩種檢查點(diǎn)的作用:1、完全檢查點(diǎn)在 Oracle8i 之前, 數(shù)據(jù)庫的發(fā)生的檢查點(diǎn)都是完全檢查點(diǎn), 完全檢查點(diǎn)會(huì)將數(shù)據(jù)緩沖區(qū)里面所有的臟數(shù)據(jù)塊寫入相應(yīng)的數(shù)據(jù)文件中, 并且同步數(shù)據(jù)文件頭和控制文件, 保證數(shù)據(jù)庫的一致。完全檢查點(diǎn)在8i 之后只有在下列兩種情況下才會(huì)發(fā)生:( 1)DBA 手工執(zhí)行 alter system checkpoint 的命令;(2)數(shù)據(jù)庫正常shutdown ( immediate,transcational,normal ) 。由于完全檢查點(diǎn)會(huì)將所有的臟數(shù)據(jù)庫塊寫入,巨大的 IO 往往會(huì)影響到數(shù)據(jù)庫的性能。因此O

42、racle 從 8i 開始引入了增量檢查點(diǎn)的概念。2、 增量檢查點(diǎn)Oracle 從 8i 開始引入了檢查點(diǎn)隊(duì)列這么一種概念,用于記錄數(shù)據(jù)庫里面當(dāng)前所有的臟數(shù)據(jù)塊的信息, DBWR 根據(jù)這個(gè)隊(duì)列而將臟數(shù)據(jù)塊寫入到數(shù)據(jù)文件中。檢查點(diǎn)隊(duì)列按時(shí)間先后記錄著數(shù)據(jù)庫里面臟數(shù)據(jù)塊的信息,里面的條目包含 RBA (Redo Block Address ,重做日志里面用于標(biāo)識(shí)檢查點(diǎn)期間數(shù)據(jù)塊在重做日志里面第一次發(fā)生更改的編號(hào)) 和數(shù)據(jù)塊的數(shù)據(jù)文件號(hào)和塊號(hào)。 在檢查點(diǎn)期間不論數(shù)據(jù)塊更改幾次, 它在檢查點(diǎn)隊(duì)列里面的位置始終保持不變,檢查點(diǎn)隊(duì)列也只會(huì)記錄它最早的 RBA ,從而保證最早更改的數(shù)據(jù)塊能夠盡快寫入。 當(dāng)

43、DBWRCKPT將檢查點(diǎn)隊(duì)列里面的臟數(shù)據(jù)塊寫入到數(shù)據(jù)文件后,檢查點(diǎn)的位置也要相應(yīng)地往后移,每三秒會(huì)在控制文件中記錄檢查點(diǎn)的位置,以表示Instance Recovery 時(shí)開始恢復(fù)的日志條目,這個(gè)概念稱為檢查點(diǎn)的“心跳” ( heartbeat) 。檢查點(diǎn)位置發(fā)生變更后,Oracle 里面通過4 個(gè)參數(shù)用于控制檢查點(diǎn)位置和最后的重做日志條目之間的距離。在這里面需要指出的是,多數(shù)人會(huì)將這4 個(gè)參數(shù)看作控制增量檢查點(diǎn)發(fā)生的時(shí)間。 事實(shí)上這是錯(cuò)誤的, 這 4 個(gè)參數(shù)是用于控制檢查點(diǎn)隊(duì)列里面的條目數(shù)量,而不是控制檢查點(diǎn)的發(fā)生。( 1)fast_start_io_target該參數(shù)用于表示數(shù)據(jù)庫發(fā)生In

44、stance Recovery 的時(shí)候需要產(chǎn)生的 IO 總數(shù),它通過v$filestat的 AVGIOTIM 來估算的。比如我們一個(gè)數(shù)據(jù)庫在發(fā)生Instance Crash 后需要在 10 分鐘內(nèi)恢復(fù)完畢,假定OS 的 IO 每秒為 500 個(gè),那么這個(gè)數(shù)據(jù)庫發(fā)生Instance Recovery 的時(shí)候大概將產(chǎn)生 500*10*60=30,000 次 IO ,也就是我們將可以把fast_start_io_target 設(shè)置為 30000。( 2)fast_start_mttr_target我們從上面可以看到 fast_start_io_target 來估算檢查點(diǎn)位置比較麻煩。 Oracle

45、為了簡(jiǎn)化這個(gè)概念,從 9i 開始引入了 fast_start_mttr_target 這么一個(gè)參數(shù),用于表示數(shù)據(jù)庫發(fā)生InstanceRecovery 的時(shí)間,以秒為單位。這個(gè)參數(shù)我們從字面上也比較好理解,其中的 mttr 是 mean time to recovery 的簡(jiǎn)寫,如上例中的情況我們可以將fast_start_mttr_target 設(shè)置為 600。當(dāng)設(shè)置 了 fast_start_mttr_target 后 , fast_start_io_target 這 個(gè) 參 數(shù) 將 不 再 生 效 , 從 9i 后 fast_start_io_target 這個(gè)參數(shù)被Oracle 廢除了

46、。( 3)log_checkpoint_timeout該參數(shù)用于表示檢查點(diǎn)位置和重做日志文件末尾之間的時(shí)間間隔, 以秒為單位, 默認(rèn)情況下 是 1800 秒。( 4)log_checkpoint_interval該參數(shù)是表示檢查點(diǎn)位置和重做日志末尾的重做日志塊的數(shù)量,以 OS 塊表示。( 5)90% OF SMALLEST REDO LOG除了以上 4 個(gè)初始化參數(shù)外, Oracle 內(nèi)部事實(shí)上還將重做日志文件末尾前面90% 的位置設(shè)為檢查點(diǎn)位置。 在每個(gè)重做日志中, 這么幾個(gè)參數(shù)指定的位置可能不盡相同, Oracle 將離日志 文件末尾最近的那個(gè)位置確認(rèn)為檢查點(diǎn)位置。4、 SMON 進(jìn)程:該

47、進(jìn)程實(shí)例啟動(dòng)時(shí),執(zhí)行實(shí)例恢復(fù),還負(fù)責(zé)清理不再使用的臨時(shí)段。在具有并行服務(wù)器選項(xiàng)的環(huán)境下, SMON 對(duì)有故障 CPU 或?qū)嵗M(jìn)行實(shí)例恢復(fù)。 SMON 進(jìn)程有規(guī)律地被呼醒,檢查是否需要,或者其它進(jìn)程發(fā)現(xiàn)需要時(shí)可以被調(diào)用。5、 PMON 進(jìn)程:該進(jìn)程在用戶進(jìn)程出現(xiàn)故障時(shí)執(zhí)行進(jìn)程恢復(fù),負(fù)責(zé)清理內(nèi)存儲(chǔ)區(qū)和釋放該進(jìn)程所使用的資源。例:它要重置活動(dòng)事務(wù)表的狀態(tài),釋放封鎖,將該故障的進(jìn)程的 ID 從活動(dòng)進(jìn)程表中移去。 PMON 還周期地檢查調(diào)度進(jìn)程( DISPATCHER )和服務(wù)器進(jìn)程的狀態(tài),如果已死,則重新啟動(dòng)(不包括有意刪除的進(jìn)程) 。PMON 有規(guī)律地被呼醒,檢查是否需要,或者其它進(jìn)程發(fā)現(xiàn)需要時(shí)可以被調(diào)用。6、 RECO 進(jìn)程:該進(jìn)程是在具有分布式選項(xiàng)時(shí)所使用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論