欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Oracle 體系結(jié)構(gòu)

系統(tǒng) 1900 0

數(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í)例。

?

oracle總體系

?

一、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)系。

oracle邏輯結(jié)構(gòu)

1.數(shù)據(jù)塊(Data 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)塊(Standard Block)。塊的大小和標(biāo)準(zhǔn)塊的大小不同的塊叫非標(biāo)準(zhǔn)塊(Nonstandard Block)。

操作系統(tǒng)每次執(zhí)行I/O的時(shí)候,是以操作系統(tǒng)的塊為單位;Oracle每次執(zhí)行I/O的時(shí)候,都是以O(shè)racle的塊為單位。

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)五部分組成,如下圖

Oracle數(shù)據(jù)塊

塊頭(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ū)域用于新行的插入和已經(jīng)存在的行的更新。

頭 部信息區(qū)(Overhead):我們把塊頭(header/Common and Variable),表目錄(Table Directory),行目錄(Row Directory)這三部分合稱為頭部信息區(qū)(Overhead)。頭部信息區(qū)不存放數(shù)據(jù),它存放的整個(gè)塊的信息。頭部信息區(qū)的大小是可變的。一般來 說,頭部信息區(qū)的大小介于84字節(jié)(bytes)到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)度增加),塊中的自由空間也會(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)管理

行鏈接和行遷移(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è)數(shù)據(jù) 塊中進(jìn)行查找,但是找不到能夠容納下這條記錄的空間,無奈之下,Oracle只能把整行數(shù)據(jù)移到一個(gè)新的數(shù)據(jù)塊。原來的數(shù)據(jù)塊中保留一個(gè)“指針”,這個(gè) “指針”指向新的數(shù)據(jù)塊。被移動(dòng)的這條記錄的ROWID保持不變。行遷移的原理如下圖所示:

00

無論是行鏈接還是行遷移,都會(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)整

塊中自由空間的手動(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)閁PDATE時(shí),需要這些空間。如果UPDATE時(shí),沒有空余空間,Oracle就會(huì)分配一個(gè)新的塊,這會(huì)產(chǎn)生行遷移(Row Migrating)。

例 如,假定在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á)到了由pctfree所確定的 上邊界時(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ì)的參數(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)境?在數(shù)據(jù)倉庫環(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ù)倍。

(以上摘自 http://www.bitscn.com/pdb/oracle/200904/160356.html

2.?dāng)?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)的基本單位。在Oracle數(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è)以該索引的名字命名的索引段。
回 滾段:包含了回滾信息,并在數(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è)磁盤文件構(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)表空間產(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 tablespace)主要用于存儲(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í)表空間外,其他表空間都屬于永久性表空間。

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

(5)USERS表空間

用戶表空間,用于存放永久性用戶對(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ù)庫一表的某些數(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ì)丟失已有操作成果。
日志文件主要是保護(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有兩種歸檔日志模式,Oracle數(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ū)У淖饔谩?

3.控制文件

每一ORACLE數(shù)據(jù)庫有一個(gè)控制文件(control file),它記錄數(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ù)文件INITsid.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í)例訪問(也就是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í)例。

instance
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ù)可以被多個(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ù)塊緩存區(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)奪SGA中的空間。其結(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ù)查詢數(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共享池
SQL共享池存儲(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ù)不斷地再裝入到庫緩存區(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_ALLOC參數(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中創(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ì)于使用一個(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ù)是將“弄臟”的緩沖 區(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 RECENTLY 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ù)DB-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-BATCH所指定。如果弄臟表中沒有該參數(shù)指定塊數(shù)的緩沖區(qū),DBWR從LUR表中查找另外一個(gè)弄臟緩沖區(qū)。

如果 DBWR在三秒內(nèi)未活動(dòng),則出現(xiàn)超時(shí)。在這種情況下DBWR對(duì)LRU表查找指定數(shù)目的緩沖區(qū),將所找到任何弄臟緩沖區(qū)寫入磁盤。每當(dāng)出現(xiàn)超時(shí),DBWR查 找一個(gè)新的緩沖區(qū)組。每次由DBWR查找的緩沖區(qū)的數(shù)目是為寢化參數(shù)DB-BLOCK- WRITE-BATCH的值的二倍。如果數(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ù)。

DBWn

2、LGWR進(jìn)程 :該進(jìn)程將日志緩沖區(qū)寫入磁盤上的一個(gè) 日志文件 ,它是負(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ū)總有空間可寫入新的日志項(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ù)操作可以同步。

LGWR

3、CKPT進(jìn)程 : 該進(jìn)程在檢查點(diǎn)出現(xiàn)時(shí),對(duì)全部數(shù)據(jù)文件的標(biāo)題進(jìn)行修改,指示該檢查點(diǎn)。在通常的情況下,該任務(wù)由LGWR執(zhí)行。然而,如果檢查點(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里面,檢查點(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ù)庫的性能。因此Oracle從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)DBWR將檢查點(diǎn)隊(duì)列里面的 臟數(shù)據(jù)塊寫入到數(shù)據(jù)文件后,檢查點(diǎn)的位置也要相應(yīng)地往后移,CKPT每三秒會(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ā)生Instance 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為了簡(jiǎn)化這個(gè)概念,從9i開始引入了 fast_start_mttr_target這么一個(gè)參數(shù),用于表示數(shù)據(jù)庫發(fā)生Instance Recovery的時(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廢除了。

(3)log_checkpoint_timeout

該參數(shù)用于表示檢查點(diǎn)位置和重做日志文件末尾之間的時(shí)間間隔,以秒為單位,默認(rèn)情況下是1800秒。

(4)log_checkpoint_interval

該參數(shù)是表示檢查點(diǎn)位置和重做日志末尾的重做日志塊的數(shù)量,以O(shè)S塊表示。

(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)程 :該進(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í)所使用的一個(gè)進(jìn)程,自動(dòng)地解決在分布式事務(wù)中的故障。一個(gè)結(jié)點(diǎn)RECO后臺(tái)進(jìn)程自動(dòng)地連接到包含有懸而未決的分布式事務(wù)的其它 數(shù)據(jù)庫中,RECO自動(dòng)地解決所有的懸而不決的事務(wù)。任何相應(yīng)于已處理的懸而不決的事務(wù)的行將從每一個(gè)數(shù)據(jù)庫的懸掛事務(wù)表中刪去。

當(dāng)一數(shù)據(jù)庫服務(wù)器的RECO后臺(tái)進(jìn)程試圖建立同一遠(yuǎn)程服務(wù)器的通信,如果遠(yuǎn)程服務(wù)器是不可用或者網(wǎng)絡(luò)連接不能建立時(shí),RECO自動(dòng)地在一個(gè)時(shí)間間隔之后再次連接。

RECO后臺(tái)進(jìn)程僅當(dāng)在允許分布式事務(wù)的系統(tǒng)中出現(xiàn),而且DISTRIBUTED C TRANSACTIONS參數(shù)是大于0。

7、ARCH進(jìn)程 :該進(jìn)程將已填滿的在線日志文件拷貝到指定的存儲(chǔ)設(shè)備。當(dāng)日志是為ARCHIVELOG使用方式、并可自動(dòng)地歸檔時(shí)ARCH進(jìn)程才存在。

8、LCKn進(jìn)程 :是在具有并行服務(wù)器選件環(huán)境下使用,可多至10個(gè)進(jìn)程(LCK0,LCK1……,LCK9),用于實(shí)例間的封鎖。

9、Dnnn進(jìn)程(調(diào)度進(jìn)程): 該 進(jìn)程允許用戶進(jìn)程共享有限的服務(wù)器進(jìn)程(SERVER PROCESS)。沒有調(diào)度進(jìn)程時(shí),每個(gè)用戶進(jìn)程需要一個(gè)專用服務(wù)進(jìn)程(DEDICATEDSERVER PROCESS)。對(duì)于多線索服務(wù)器(MULTI-THREADED SERVER)可支持多個(gè)用戶進(jìn)程。如果在系統(tǒng)中具有大量用戶,多線索服務(wù)器可支持大量用戶,尤其在客戶_服務(wù)器環(huán)境中。

在一個(gè)數(shù)據(jù)庫 實(shí)例中可建立多個(gè)調(diào)度進(jìn)程。對(duì)每種網(wǎng)絡(luò)協(xié)議至少建立一個(gè)調(diào)度進(jìn)程。數(shù)據(jù)庫管理員根據(jù)操作系統(tǒng)中每個(gè)進(jìn)程可連接數(shù)目的限制決定啟動(dòng)的調(diào)度程序的最優(yōu)數(shù),在實(shí) 例運(yùn)行時(shí)可增加或刪除調(diào)度進(jìn)程。多線索服務(wù)器需要SQL*NET版本2或更后的版本。在多線索服務(wù)器的配置下,一個(gè)網(wǎng)絡(luò)接收器進(jìn)程等待客戶應(yīng)用連接請(qǐng)求, 并將每一個(gè)發(fā)送到一個(gè)調(diào)度進(jìn)程。如果不能將客戶應(yīng)用連接到一調(diào)度進(jìn)程時(shí),網(wǎng)絡(luò)接收器進(jìn)程將啟動(dòng)一個(gè)專用服務(wù)器進(jìn)程。該網(wǎng)絡(luò)接收器進(jìn)程不是Oracle實(shí)例 的組成部分,它是處理與Oracle有關(guān)的網(wǎng)絡(luò)進(jìn)程的組成部分。在實(shí)例啟動(dòng)時(shí),該網(wǎng)絡(luò)接收器被打開,為用戶連接到Oracle建立一通信路徑,然后每一個(gè) 調(diào)度進(jìn)程把連接請(qǐng)求的調(diào)度進(jìn)程的地址給予它的接收器。當(dāng)一個(gè)用戶進(jìn)程作連接請(qǐng)求時(shí),網(wǎng)絡(luò)接收器進(jìn)程分析請(qǐng)求并決定該用戶是否可使用一調(diào)度進(jìn)程。如果是,該 網(wǎng)絡(luò)接收器進(jìn)程返回該調(diào)度進(jìn)程的地址,之后用戶進(jìn)程直接連接到該調(diào)度進(jìn)程。有些用戶進(jìn)程不能調(diào)度進(jìn)程通信(如果使用SQL*NET以前的版本的用戶),網(wǎng) 絡(luò)接收器進(jìn)程不能將此用戶連接到一調(diào)度進(jìn)程。在這種情況下,網(wǎng)絡(luò)接收器建立一個(gè)專用服務(wù)器進(jìn)程,建立一種合適的連接。

?

源問地址: http://blog.csdn.net/esperantor/article/details/6228306

?

Oracle 體系結(jié)構(gòu)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 性视频久久 | 伊人亚洲 | 久久伊99综合婷婷久久伊 | 黄色片av| 免费的色网站 | 蜜桃av一区二区三区 | 国产在线视频2019最新视频 | 狠狠综合久久 | 色射综合 | 国产日韩欧美在线观看 | 天天骑夜夜操 | 日韩在线免费播放 | 午夜成人免费视频 | 亚洲午夜精品A片久久不卡蜜桃 | 凛子小姐想试试 | 在线视频不卡国产在线视频不卡 | 国产精品久久久久久久7电影 | 精品成人一区二区三区 | 激情亚洲综合网 | 久草热久草在线 | 亚洲午夜在线视频 | 嫩草电影院 | 91亚洲国产成人久久精品网站 | 久久草在线 | 国产一区二区精品在线 | 狠狠的撸2015最新版狠狠的撸2015最新版 | 国产精品国产三级国产aⅴ入口 | 国产片在线观看 | 国产乱人乱精一区二区视频密 | 精品免费在线 | 97丨九色丨国产人妻熟女 | 午夜爽爽性刺激一区二区视频 | 五月激情久久 | 一级毛片ab片高清毛片 | 69av亚洲| 国产美女久久 | 免费看国产片 | 免费看一区二区三区 | 四虎影在线永久免费四虎地址8848aa | 日本高清在线观看视频 | 国产精品每日更新 |