第一部分 - 背景 - 5 - Oracle 的體系結(jié)構(gòu)

Oracle 基于客戶 - 服務(wù)器結(jié)構(gòu)。Oracle 服務(wù)器由 數(shù)據(jù)庫 (原始數(shù)據(jù)加上日志和控制文件)和 實例(服務(wù)器上負(fù)責(zé)存取數(shù)據(jù)庫的進(jìn)程和系統(tǒng)內(nèi)存)組成洗鸵。一個實例僅能與一個數(shù)據(jù)庫相連地回。數(shù)據(jù)庫由 邏輯結(jié)構(gòu)物理結(jié)構(gòu) 組成虽界,邏輯結(jié)構(gòu)如數(shù)據(jù)庫模式摄乒,物理結(jié)構(gòu)包括形成 Oracle 數(shù)據(jù)庫的文件载弄。

Oracle 的邏輯數(shù)據(jù)庫結(jié)構(gòu)

在邏輯層,Oracle 包含表空間姐军、模式數(shù)據(jù)塊 以及 區(qū)間 / 段尖淘。

表空間

一個 Oracle 數(shù)據(jù)庫被劃分為若干個邏輯存儲單元奕锌,稱為表空間(tablespace)〈迳可以用表空間將相關(guān)的邏輯結(jié)構(gòu)組織在一起惊暴。例如,表空間會把一個應(yīng)用程序的所有對象組織在一起趁桃,以簡化某些管理操作辽话。

每個 Oracle 數(shù)據(jù)庫都包含一個名為 SYSTEM 的表空間,它是在創(chuàng)建數(shù)據(jù)庫時自動生成的卫病。SYSTEM 表空間通常會包含整個數(shù)據(jù)庫的系統(tǒng)目錄表(在 Oracle 中油啤,稱為 數(shù)據(jù)字典)。一個小型數(shù)據(jù)庫可能只需要一個 SYSTEM 表空間蟀苛,但最好在創(chuàng)建一個表空間益咬,用以與數(shù)據(jù)字典分開存放用戶數(shù)據(jù),從而減少字典對象和模式對象因同名數(shù)據(jù)文件帶來的沖突帜平。

一個創(chuàng)建表空間的語句:

CREATE TABLESPACE user_data
DATAFILE 'DATA3.ORA' SIZE 100K
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;

然后可以通過如下語句將表與指定的表空間相連:

CREATE TABLE PropertyForRent (propertyNo VARCHAR2(5) NOT NULL, ...)
TABLESPACE user_data;

如果在創(chuàng)建新表時沒有指定表空間幽告,則會用到創(chuàng)建用戶賬戶時與用戶相連的默認(rèn)空間梅鹦。

用戶、模式和模式對象

用戶(有時稱為用戶名)是數(shù)據(jù)庫中定義的一個名稱冗锁,他可以連接或訪問對象齐唆。模式 是模式對象的一個命名集合,如表冻河、視圖箍邮、索引、簇集和過程芋绸,它與特定的用戶相連媒殉。模式和用戶的概念有助于 DBA 管理數(shù)據(jù)庫的安全。

為了對數(shù)據(jù)庫進(jìn)行存取摔敛,用戶必須首先運行一個數(shù)據(jù)庫應(yīng)用程序(如 Oracle Forms 或 SQL*Plus)廷蓉,然后用數(shù)據(jù)庫中已經(jīng)定義的一個用戶名來連接。在創(chuàng)建一個數(shù)據(jù)庫用戶時马昙,將會相應(yīng)地為該用戶創(chuàng)建一個同名的模式桃犬。在默認(rèn)狀態(tài)下,一旦用戶與數(shù)據(jù)庫相連接行楞,用戶就可以對模式中的所有對象進(jìn)行存取攒暇。因為用戶只與同名模式相連,所以 “用戶” 和 “模式” 這兩個詞可以互換(注意子房,表空間與模式之間不存在任何關(guān)系:在統(tǒng)一模式中的對象可以放在不同的表空間中形用,一個表空間也可以保存不同模式中的對象)。

數(shù)據(jù)塊证杭、區(qū)間和段

數(shù)據(jù)塊 是 Oracle 可使用田度,或者說可分配的最小存儲單元。一個數(shù)據(jù)塊與物理磁盤空間中一定數(shù)量的字節(jié)相對應(yīng)解愤≌蚪龋可以在創(chuàng)建 Oracle 數(shù)據(jù)庫時設(shè)置數(shù)據(jù)塊的大小。數(shù)據(jù)塊大小可以是操作系統(tǒng)中塊大小的倍數(shù)(須在系統(tǒng)的最大操作范圍內(nèi))送讲,這樣可以避免不必要的 I/O 操作奸笤。數(shù)據(jù)塊的結(jié)構(gòu)如下:

  • 標(biāo)題:包含塊地址和段類型等一般信息。
  • 表目錄:包含將數(shù)據(jù)放在此塊的表的相關(guān)信息哼鬓。
  • 行目錄:包含該數(shù)據(jù)塊中的行的相關(guān)信息监右。
  • 行數(shù)據(jù):包含實際的表數(shù)據(jù)行。行可以跨塊存放异希。
  • 空閑空間:分配給新插入的行或更新行時需要的額外空間秸侣。自 Oracle8i 以來,Oracle能自動管理空閑空間,盡管還有一個手動管理選項味榛。

邏輯數(shù)據(jù)庫空間的第二個層次稱為 區(qū)間(extent)椭坚。區(qū)間是一定數(shù)量的連續(xù)數(shù)據(jù)塊,用來存儲某種特定類型的信息搏色。區(qū)間之上的層次就是段善茎。段是區(qū)間的集合,用來存儲某個邏輯結(jié)構(gòu)频轿。例如垂涯,每個表的數(shù)據(jù)都存在他自己的數(shù)據(jù)段中,而每個索引的數(shù)據(jù)則存在它自己的索引段中航邢。當(dāng)某個段的現(xiàn)有的區(qū)間已滿時耕赘,就由 Oracle 動態(tài)地分配新空間。因為區(qū)間是根據(jù)需要分配的膳殷,所以包含在段中的區(qū)間在磁盤上可能連續(xù)也可能不連續(xù)操骡。

Oracle 數(shù)據(jù)塊、區(qū)間和段之間的關(guān)系

Oracle 的物理數(shù)據(jù)庫結(jié)構(gòu)

Oracle中主要的物理數(shù)據(jù)庫結(jié)構(gòu)是數(shù)據(jù)文件赚窃、重做日志文件和控制文件册招。

數(shù)據(jù)文件

每個 Oracle 數(shù)據(jù)庫都有一個或多個物理數(shù)據(jù)文件。邏輯數(shù)據(jù)庫結(jié)構(gòu)(如表和索引)中的數(shù)據(jù)是以數(shù)據(jù)文件這樣的物理形式存儲的勒极。一個或多個數(shù)據(jù)文件形成一個表空間是掰。最簡單的 Oracle 數(shù)據(jù)庫可能只有一個表空間和一個數(shù)據(jù)文件蒲牧。更復(fù)雜的數(shù)據(jù)庫可能會包含四個表空間耐薯,每個表空間中有兩個數(shù)據(jù)文件,因此總共有八個數(shù)據(jù)文件羊精。

重做日志文件

每個 Oracle 數(shù)據(jù)庫都有一個由兩個(或更多)重做日志文件所構(gòu)成的集合匾七,它記錄了對數(shù)據(jù)進(jìn)行的所有更改絮短,其目的是便于以后的恢復(fù)。某個故障可能使得修改了的數(shù)據(jù)未能永久的寫入數(shù)據(jù)文件乐尊,那么可從重做日志中獲取這個修改戚丸,從而防止丟失工作划址。

控制文件

每個 Oracle 數(shù)據(jù)庫都有一個控制文件扔嵌,它包含了所有其他文件(這些文件都參與了數(shù)據(jù)庫的組成)的一個列表,例如夺颤,數(shù)據(jù)文件和重做日志文件。為了更好地對數(shù)據(jù)進(jìn)行保護(hù)世澜,最好有多個控制文件(可以將多個副本寫入多個設(shè)備中)独旷。同樣,最好也保存多個重做日志文件的副本案疲。

Oracle 實例

Oracle 實例由 Oracle 進(jìn)程和對數(shù)據(jù)庫中的信息進(jìn)行存取所需的共享內(nèi)存組成,其中麻养,Oracle 使用共享內(nèi)存對數(shù)據(jù)和索引進(jìn)行高速緩存,并對共享程序代碼進(jìn)行存儲鳖昌。共享內(nèi)存可以劃分為不同的內(nèi)存結(jié)構(gòu)备畦,其中最基本的就是系統(tǒng)全局區(qū)(System Global Area, SGA)和程序全局區(qū)(Program Global Area懂盐,PGA)。

  • 系統(tǒng)全局區(qū)
    SGA 是共享內(nèi)存的一片區(qū)域糕档,用來存儲某個 Oracle 實例的數(shù)據(jù)和控制信息在 Oracle 實例開始時分配 SGA,關(guān)閉時回收 SGA翼岁。SGA中的信息由下列內(nèi)存結(jié)構(gòu)組成,其中的每個結(jié)構(gòu)都有固定的大小琅坡,并且都在實例啟動時創(chuàng)建:

    • 數(shù)據(jù)庫高速緩沖區(qū)
      它包含了數(shù)據(jù)庫最近使用過的數(shù)據(jù)塊。這些數(shù)據(jù)塊可以是已修改但還沒寫入磁盤的數(shù)據(jù)(臟塊)榆俺,也可以是沒被修改過的數(shù)據(jù)售躁,還可以是修改后已寫入磁盤的數(shù)據(jù)(干凈塊)茴晋。存儲最近使用過的數(shù)據(jù)塊可以使大多數(shù)活躍的數(shù)據(jù)緩沖在內(nèi)存陪捷,從而減少I/O,提高系統(tǒng)的性能诺擅。

    • 共享池
      它包含了一些共享的內(nèi)存結(jié)構(gòu)市袖,如庫高速緩存(library cache)中的共享 SQL 區(qū)和數(shù)據(jù)字典中的內(nèi)部信息。共享 SQL 區(qū)中包含 SQL 查詢的分析樹和執(zhí)行規(guī)劃烁涌。如果多個應(yīng)用程序都用到了同一個 SQL 語句苍碟,那它們都能對共享 SQL 區(qū)進(jìn)行存取,從而減少了所需的內(nèi)存數(shù)量撮执,也減少了查詢處理所需的分析和執(zhí)行時間微峰。

    • 大池
      這是一片可選的內(nèi)存區(qū),用于大片內(nèi)存分配(例如抒钱,緩沖恢復(fù)管理器(RMAN)的大量 I/O 內(nèi)容)蜓肆。

    • Java 池
      這片區(qū)域存儲所有會話專有 Java 代碼和 Java 虛擬機(jī)內(nèi)的數(shù)據(jù)颜凯。

    • 流池
      這片區(qū)域用于存儲緩沖的隊列消息并為 Oracle 流提供內(nèi)存。Oracle流使信息流(如數(shù)據(jù)庫事件和數(shù)據(jù)庫變化)能被管理并潛在的傳播到其他的數(shù)據(jù)庫仗扬。

    • 固定 SGA
      這是一個內(nèi)部管理區(qū)症概,它包含各種各樣的數(shù)據(jù),如關(guān)于數(shù)據(jù)庫狀態(tài)和 Oracle 實例的信息早芭,以及 Oracle 進(jìn)程間通信的信息穴豫,比如鎖信息等。

  • 程序全局區(qū)
    PGA 是共享內(nèi)存的一片區(qū)域逼友,用來存儲一個 Oracle 進(jìn)程的數(shù)據(jù)和控制信息精肃。PGA 由 Oracle Database 在一個 Oracle 進(jìn)程開啟時創(chuàng)建。每個服務(wù)器進(jìn)程和后臺進(jìn)程都有一個 PGA帜乞。其大小和內(nèi)容由 Oracle 服務(wù)器的安裝選項決定司抱。

  • 客戶進(jìn)程
    每個客戶進(jìn)程都代表一個客戶與 Oracle 服務(wù)器的一個連接(例如,使用 SQL*Plus 或是 Oracle Forms 應(yīng)用程序)黎烈∠澳客戶進(jìn)程操縱著用戶輸入、與 Oracle 服務(wù)進(jìn)程的通信及顯示客戶所需的信息照棋,如果需要资溃,還可以將這些信息轉(zhuǎn)換為更有效的形式。

  • Oracle 進(jìn)程
    Oracle (服務(wù)器)進(jìn)程根據(jù)客戶需求執(zhí)行相應(yīng)功能烈炭。Oracle 進(jìn)程可以分成兩類:服務(wù)器進(jìn)程(處理相連的用戶進(jìn)程所發(fā)出的請求)和后臺進(jìn)程(執(zhí)行異步 I/O溶锭,并提供了更大并行性,從而提高了系統(tǒng)的性能和可靠性)符隙。圖中給出了如下的后臺進(jìn)程:

Oracle 體系結(jié)構(gòu)
  • 數(shù)據(jù)庫寫回器(DBWR)
    DBWR 進(jìn)程負(fù)責(zé)將已修改的(臟的)數(shù)據(jù)塊從 SGA 高速緩存區(qū)寫回到磁盤的數(shù)據(jù)文件中趴捅。一個 Oracle 實例至多有 10 個 DBWR 進(jìn)程,從 DBW0 ~ DBW9 依次命名霹疫,用來處理多個數(shù)據(jù)文件的 I/O 。Oracle 采用了一種稱為先寫日志的技術(shù)丽蝎,這就意味著,每當(dāng)需要釋放緩沖區(qū)時红省,DBWR 進(jìn)程就會批量的執(zhí)行寫出栏笆,而不用等到事務(wù)的提交點臊泰。

  • 日志寫回器(LGWR)
    LGWR 進(jìn)程負(fù)責(zé)將日志從日志緩沖區(qū)寫回到重做日志文件中蚜枢。

  • 檢查點(CKPT)
    檢查點是一個事件针饥,在這個事件中,所有已修改的數(shù)據(jù)庫緩沖區(qū)都會由 DBWR 寫回到數(shù)據(jù)文件中丁眼。CKPT 進(jìn)程負(fù)責(zé)通知最近的檢查點一致。CKPT 進(jìn)程是可選的藐守,如果將其省略蹂风,則由 LGWR 進(jìn)程來完成它的工作。

  • 系統(tǒng)監(jiān)視器(SMON)
    當(dāng)實例從一個出錯點重新開始時惠啄,由 SMON 進(jìn)程負(fù)責(zé)對系統(tǒng)事故進(jìn)行恢復(fù)。因系統(tǒng)崩潰而終止的事務(wù)的恢復(fù)也包括在內(nèi)融柬。SMON 還充當(dāng)了數(shù)據(jù)庫的磁盤碎片整理程序趋距,它可以將數(shù)據(jù)文件中的空閑區(qū)間進(jìn)行整合。

  • 進(jìn)程監(jiān)視器(PMON)
    PMON 進(jìn)程負(fù)責(zé)跟蹤對數(shù)據(jù)庫進(jìn)行存取的用戶進(jìn)程节腐,并在系統(tǒng)崩潰后對其進(jìn)行恢復(fù)。它將清除所有的一流資源(如內(nèi)存)门怪,并釋放由故障進(jìn)程所加的鎖。

  • 歸檔器(ARCH)
    當(dāng)在線的重做日志文件被寫滿時掷空,由 ARCH 進(jìn)程負(fù)責(zé)將它們復(fù)制到歸檔器上囤锉。系統(tǒng)最多可設(shè)定10個 ARCH 進(jìn)程,依次命名為 ARC0 ~ ARC9官地。其余的歸檔器進(jìn)程可以在有讀寫指令時由 LWGR 啟動。

  • 恢復(fù)器(RECO)
    RECO 進(jìn)程負(fù)責(zé)清除出錯的或者是掛起的分布事務(wù)赤炒。

  • 鎖管理服務(wù)器(LMS)
    如果采用了 Oracle Real Application Cluster 選項,則由 LMS 進(jìn)程負(fù)責(zé)實例間的加鎖操作莺褒。

  • 閃回寫和恢復(fù)寫(FWRW)
    當(dāng)設(shè)置閃回或遇到保證還原點,F(xiàn)WRW 進(jìn)程將閃回數(shù)據(jù)寫入閃回恢復(fù)區(qū)的閃回數(shù)據(jù)庫日志遵岩。閃回工具使管理員和用戶能回看和操縱單個 SQL 語句、段和服務(wù)的累加的統(tǒng)計數(shù)據(jù)舍哄。MMON 進(jìn)程負(fù)責(zé)包括每小時收集一次統(tǒng)計信息并產(chǎn)生一個 AWR 快照在內(nèi)的許多工作誊锭。

  • 易處理性監(jiān)控 Lite(MMNL)
    這個進(jìn)程負(fù)責(zé)將 SGA 中 Active Session History(ASH)緩沖區(qū)里的統(tǒng)計數(shù)據(jù)寫入磁盤。當(dāng) ASH 滿時 MMNL 寫入磁盤炉旷。

在前面的描述中大多使用了 “進(jìn)程” 這個詞,目前一些系統(tǒng)會在實現(xiàn)中用線程取代進(jìn)程饥追。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末罐盔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捏顺,更是在濱河造成了極大的恐慌,老刑警劉巖幅骄,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拆座,死亡現(xiàn)場離奇詭異,居然都是意外死亡挪凑,警方通過查閱死者的電腦和手機(jī)逛艰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菇绵,“玉大人肄渗,你說我怎么就攤上這事∑樱” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵铆遭,是天一觀的道長。 經(jīng)常有香客問我枚荣,道長啼肩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任害碾,我火速辦了婚禮,結(jié)果婚禮上慌随,老公的妹妹穿的比我還像新娘躺同。我一直安慰自己,他們只是感情好蹋艺,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著笛园,像睡著了一般侍芝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上州叠,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機(jī)與錄音逆甜,去河邊找鬼。 笑死交煞,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的素征。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼根欧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了凤粗?” 一聲冷哼從身側(cè)響起今豆,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎亭罪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體应役,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡燥筷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了袍祖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡蕉陋,死狀恐怖拨扶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情患民,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布仅孩,位于F島的核電站,受9級特大地震影響辽慕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜公浪,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一温艇、第九天 我趴在偏房一處隱蔽的房頂上張望堕汞。 院中可真熱鬧勺爱,春花似錦琐鲁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至灸芳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間烙样,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工蛤肌, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留批狱,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓赔硫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子恼蓬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容