ORACLE資料庫儲存結構簡介
我們知道資料庫是儲存資料的容器,它的主要功能是儲存和共用資料。在這篇文章中,我們對資料庫存放資料的基礎知識進行了介紹。
首先,oracle資料庫的儲存結構可以分為邏輯儲存結構和實體儲存體結構,對於這兩種儲存結構,oracle是分別進行管理的。
邏輯儲存結構:oracle內部的組織和管理資料的方式。
實體儲存體結構:oracle外部(作業系統)組織和管理資料的方式。
接下來我們對上面的兩種結構進行詳細的介紹。
1.邏輯儲存結構:
oracle在邏輯上將儲存的資料劃分為一個個小單元來進行儲存和維護,更高一級的邏輯儲存結構都是由這些基本的小單元組成的。
邏輯結構類型按照尺寸從小到大分可分為:塊(block)-->區(extent)-->段(segment)-->資料表空間(tablespace)
塊:Oracle用來管理儲存的最小單元,也是最小的邏輯儲存結構。Oracle資料庫在進行輸入輸出時,都是以塊為單位進行讀寫操作的。我們建議資料區塊的尺寸為作業系統塊尺寸的整數倍(1、2、4等)。另外,塊的大小是在建立資料庫的時候決定的,之後不能修改。當然,oracle同時也支援不同的資料表空間擁有不同的資料區塊尺寸。下面,我們對塊的結構進行一些介紹。
塊的頭部資訊區:
塊頭:包含塊的一般屬性資訊 如塊的物理地址、塊所屬的段的類型
表目錄:如果塊中儲存的資料是表資料, 則在表目錄中儲存塊中所包含的表的相關資訊
行目錄:行記錄的相關資訊 如ROWID
塊的儲存區:主要包含空閑空間和已經使用的空間。Oracle主要是通過下面的兩個參數對這部分空間進行管理的
PCTFREE參數:指定塊中必須保留的最小空閑空間比例。當塊中的空閑儲存空間減少到PCTFREE所設定的比例後,Oracle將塊標記為不可用狀態,新的資料行將不能被加入到這個塊。
PCTUSED參數:制定一個百分比,當塊中已經使用的儲存空間降低到這個百分比只下時,這個塊才被重新標記為可用狀態。
請注意:以上兩個參數既可以在資料表空間層級進行設定,也可以在段層級進行設定。段層級的設定優先權更高。
區:比塊高一級的邏輯儲存結構 由連續的塊組成,它是oracle在進行儲存空間的分配和回收的最小單位。在建立具有獨立段結構的資料庫物件時,例如表、索引等,Oracle會為資料庫物件建立一個資料區段,並為資料區段分配一個‘初始區’。後續區的分配方式,則根據表的空間管理辦法不同,而採用不同的分配方式,例如autoextent,uniform size 或者在建立表或資料表空間時設定default storage 子句。另外,使用者還能夠通過執行下面的命令來回收表、索引等對象中未使用的區:
SQL>alter table table_name deallocate unused;
段:由多個區組成,這些區可以是連續的,也可以是不連續的。當使用者在資料庫中建立各種具有實際儲存結構的對象時(儲存有資料的對象),比如表、索引等,Oracle將為這些對象建立“段”。 一般一個對象只擁有一個段。在建立段時,可以為它指定PCTFREE、PCTUSED等參數來控制其中的塊的儲存空間管理方式,也可以為它指定INITIAL、NEXT、PCTINCREASE等儲存參數,以指定其中區的分配方式。如果沒有為段指定這些參數,段將自動繼承資料表空間的相應參數。不同類型的資料庫物件擁有不同類型的段:
資料區段:儲存表中的記錄
索引段:索引中的索引條目
臨時段:在執行查詢等操作時,Oracle可能會需要使用到一些臨時儲存空間,用於臨時儲存解析過的查詢語句以及在排序過程中產生的臨時資料。
復原段:儲存復原資料。
資料表空間:最進階的邏輯儲存結構,資料庫是由多個資料表空間組成的。在建立資料庫時會自動建立一些預設的資料表空間,例如 SYSTEM資料表空間,SYSAUX資料表空間等。通過使用資料表空間,Oracle將所有相關的邏輯結構和對象組合在一起。我們可以在資料表空間層級指定儲存參數,也可以在短層級指定。下面我們列出常見的資料表空間,和他們所儲存的資訊:
資料資料表空間:用於儲存使用者資料的普通資料表空間。
系統資料表空間:預設的資料表空間,用於儲存資料字典(一組儲存資料庫自身資訊的內部系統資料表和視圖,及用於Oracle內部使用的其他一些對象),儲存所有的PL/SQL程式的原始碼和解析代碼,包括預存程序和函數、包、資料庫觸發器等,儲存資料庫物件(表、視圖、序列)的定義。
復原資料表空間:用於存放復原段,每個執行個體最多隻能使用一個撤銷資料表空間
暫存資料表空間:儲存SQL執行過程中產生的臨時資料
最後,我們可以用下面的比喻來描述邏輯結構關係:
塊 :一張張白紙 ---> 區:白紙組成的本子---> 段:多個本子放到一個檔案袋中---> 資料表空間:檔案櫃(存放多個檔案袋)
2. oracle實體儲存體結構
Oracle資料庫邏輯上由一個或多個資料表空間組成,每個資料表空間在物理上由一個或多個資料檔案組成,而每個資料檔案是有資料區塊構成的。所以,邏輯上資料存放在資料表空間中,而物理上儲存在資料表空間所對應的資料檔案中。我們可以用這張圖來描述資料檔案和資料表空間的關係。
構成資料庫物的物理檔案主要有三種:
資料檔案:存放資料庫資料。
控制檔案:存放資料庫的基本資料,告訴資料庫到哪裡找到資料檔案和重做記錄檔等。對資料庫的成功啟動和正常運行是很重要的。
重做記錄檔:存放對資料的改變。至少兩組,Oracle以迴圈方式來使用它們。