3. 存儲結構

 

首先,oracle數據庫的存儲結構可以分為邏輯存儲結構和物理存儲結構,對於這兩種存儲結構,oracle是分別進行管理的。
  邏輯存儲結構:oracle內部的組織和管理數據的方式。
  物理存儲結構:oracle外部(操作系統)組織和管理數據的方式。

3.1 oracle的邏輯存儲結構

存儲架構總覽視圖_數據文件

oracle在邏輯上將保存的數據劃分為一個個小單元來進行存儲和維護,更高一級的邏輯存儲結構都是由這些基本的小單元組成的。
邏輯結構類型按照尺寸從小到大分可分為:塊(block)-->區(extent)-->段(segment)-->表空間(tablespace)

塊(block):是Oracle用來管理存儲的最小單元,是最小的邏輯存儲結構,也是最基本的數據存取單位,Oracle從數據文件中存取數據時以數據塊為單位進行輸入輸出操作。
一個數據塊包括數據庫中多個字節的物理空間,其默認大小由該數據庫的參數文件中的db_block_size值指定。
Oracle數據庫在進行輸入輸出時,都是以塊為單位進行讀寫操作的。建議數據塊的尺寸為操作系統塊(os block)尺寸的整數倍(1、2、4等)。另外,塊的大小是在創建數據庫的時候決定的,之後不能修改。
用“show parameter db_block_size”和“select value from v$parameter where name='db_block_size'”可以查詢數據塊的大小。
oracle同時也支持不同的表空間擁有不同的數據塊尺寸。數據塊中可以存儲表(table)、索引(index)或簇表(clustered data),但其內部結構都是類似的,下面,對塊的結構進行一些介紹。

存儲架構總覽視圖_數據文件_02


    塊的頭部信息區:
        塊頭:包含塊的一般屬性信息 如塊的物理地址、塊所屬的段的類型
        表目錄:如果塊中存儲的數據是表數據, 則在表目錄中保存塊中所包含的表的相關信息
        行目錄:行記錄的相關信息 如ROWID
    塊的存儲區:主要包含空閒空間和已經使用的空間。Oracle主要是通過下面的兩個參數對這部分空間進行管理的
        PCTFREE參數:指定塊中必須保留的最小空閒空間比例。當塊中的空閒存儲空間減少到PCTFREE所設置的比例後,Oracle將塊標記為不可用狀態,新的數據行將不能被加入到這個塊。
        PCTUSED參數:制定一個百分比,當塊中已經使用的存儲空間降低到這個百分比只下時,這個塊才被重新標記為可用狀態。
        請注意:以上兩個參數既可以在表空間級別進行設置,也可以在段級別進行設置。段級別的設置優先級更高。

區(extent):比塊高一級的邏輯存儲結構 由連續的塊組成,它是oracle在進行存儲空間的分配和回收的最小單位。
當用户創建新表時,Oracle會為此表的數據段分配一個包含若干數據塊的初始盤區。
創建表時可以指定為其數據段分配多少初始空間、最多包含多少盤區、盤區的增長量等 。
在創建具有獨立段結構的數據庫對象時,例如表、索引等,Oracle會為數據庫對象創建一個數據段,併為數據段分配一個‘初始區’。
後續區的分配方式,則根據表的空間管理辦法不同,而採用不同的分配方式,例如autoextent,uniform size 或者在創建表或表空間時設置default storage 子句。另外,用户還能夠通過執行下面的命令來回收表、索引等對象中未使用的區:
alter table table_name deallocate unused;

段(segment):一個段又被劃分為多個區,這些區可以是連續的,也可以是不連續的。
段雖然不是存儲空間的分配單位,但系統會為每一個被存儲的方案對象分配一個段。
段(segment)是以盤區為單位獲得磁盤空間的。
當用户在數據庫中創建各種具有實際存儲結構的對象時(保存有數據的對象),比如表、索引等,Oracle將為這些對象創建“段”, 一般一個對象只擁有一個段。
在創建段時,可以為它指定PCTFREE、PCTUSED等參數來控制其中的塊的存儲空間管理方式,也可以為它指定INITIAL、NEXT、PCTINCREASE等存儲參數,以指定其中區的分配方式。如果沒有為段指定這些參數,段將自動繼承表空間的相應參數。不同類型的數據庫對象擁有不同類型的段:
        數據段:保存表中的記錄
        索引段:索引中的索引條目
        臨時段:在執行查詢等操作時,Oracle可能會需要使用到一些臨時存儲空間,用於臨時保存解析過的查詢語句以及在排序過程中產生的臨時數據。
        回滾段:保存回滾數據。

表空間(tablespace):最高級的邏輯存儲結構,一個表空間可以被劃分為若干個段。
數據庫是由多個表空間組成的(表空間是最大的邏輯存儲單元,一個數據庫從邏輯結構上劃分就包括多個表空間)數據庫中的一個表空間至少包含一個或多個數據文件,而一個數據文件只能屬於一個表空間,一個表空間的大小就等於它包含的所有數據文件大小之和。
在創建數據庫時會自動創建一些默認的表空間,例如 SYSTEM表空間,SYSAUX表空間等。通過使用表空間,Oracle將所有相關的邏輯結構和對象組合在一起。
我們可以在表空間級別指定存儲參數,也可以在短級別指定。下面我們列出常見的表空間,和他們所存儲的信息:
      數據表空間:用於存儲用户數據的普通表空間。
      系統表空間:默認的表空間,用於保存數據字典(一組保存數據庫自身信息的內部系統表和視圖,及用於Oracle內部使用的其他一些對象),保存所有的PL/SQL程序的源代碼和解析代碼,包括存儲過程和函數、包、數據庫觸發器等,保存數據庫對象(表、視圖、序列)的定義。
      回滾表空間:用於存放回滾段,每個實例最多隻能使用一個撤銷表空間
      臨時表空間:存儲SQL執行過程中產生的臨時數據

隨着數據庫中新數據的不斷增加,如果數據庫的存儲容量不能容納新數據時,可以通過以下三種方式增加數據庫的容量:

為表空間創建新的數據文件。
為數據庫創建新的表空間。
增大現有數據文件的容量。
以上操作可以使用CREATE TABLESPACE命令或ALTER TABLESPACE命令完成,也可以使用OEM工具完成。

最後,我們可以用下面的比喻來描述邏輯結構關係:
塊 :一張張白紙 ---> 區:白紙組成的本子---> 段:多個本子放到一個文件袋中---> 表空間:文件櫃(存放多個文件袋)

 

3.2 oracle的物理存儲結構

Oracle數據庫邏輯上由一個或多個表空間組成,每個表空間在物理上由一個或多個數據文件組成,而每個數據文件是有數據塊構成的。所以,邏輯上數據存放在表空間中,而物理上存儲在表空間所對應的數據文件中。從物理組成的角度分析一個數據庫在存儲介質上的實際構成,它是由操作系統組織和管理的,是Oracle數據庫的外部存儲結構,就是一堆文件。我們可以用這張圖來描述數據文件和表空間的關係。

oracle數據庫文件主要包括4種文件:

(1)數據文件
(2)重做日誌文件
(3)控制文件
(3)初始化參數文件

(1)數據文件

數據文件是Oracle數據庫用來存儲各種數據的地方,如表中的記錄、索引數據、系統數據和臨時數據等。
一個數據庫有一個或多個數據文件,但一個數據文件只能屬於一個數據庫。
數據文件中存儲了各種系統和用户的數據,但它和數據庫中的表沒有一對一的關係。

數據文件的擴展名是.dbf,主要包括永久數據文件和臨時數據文件。
靜態數據字典視圖DBA_DATA_FILES和DBA_TEMP_FILES
動態數據字典視圖v$datafile和v$tempfile
OEM工具 中的“服務器”選項卡—>在“存儲”選項組中點擊“數據文件”

數據文件又可以分為以下幾種:

(1)系統數據文件
(2)回滾數據文件
(3)臨時數據文件
(4)用户數據文件
(5)系統輔助數據文件
(6)示例數據文件

(2)日誌

存放對數據的改變,至少兩組,Oracle以循環方式來使用它們,記錄了用户對數據庫的修改信息(如增加、刪除、修改),名字通常為REDO*.LOG格式。
日誌文件也叫重做日誌文件或重演日誌文件(Redo Log Files)。
日誌組是日誌文件的邏輯組織單元,每個日誌組中有一個或多個日誌文件。
同一個日誌組中的多個日誌文件具有相同的信息,它們是鏡相關係

在Oracle中,數據庫有兩種工作模式:
歸檔日誌模式(archivelog):
•適用於系統投入使用後
•當日志組寫滿後,將日誌信息保存到歸檔日誌文件中,然後再循環使用。
非歸檔日誌模式(noarchivelog):
•適用於開發環境和測試環境中
•日誌組寫滿後不會歸檔到歸檔日誌文件中,直接被新的日誌信息覆蓋。
以SYSDBA身份登錄到SQL*Plus工具,執行ARCHIVE LOG LIST命令可以查看數據庫當前的運行模式。
執行ALTER DATABASE ARCHIVELOG | NOARCHIVELOG命令修改數據庫的日誌模式。具體步驟如下:
(1)關閉運行的數據庫實例
(2)備份數據庫(可選 )
(3)啓動數據庫實例到mount狀態,但不要打開數據庫
(4)修改數據庫的日誌模式
(5)打開數據庫
(6)查看數據庫當前的日誌模式

(3)控制文件

控制文件(Control File)是Oracle數據庫的物理文件之一,是一個很小的二進制文件,它記錄了:
存放數據庫的基本信息(數據庫的名稱 數據文件和聯機日誌文件的名稱及位置 當前的日誌序列號(Log Sequence Number) 表空間等信息),告訴數據庫到哪裏找到數據文件和重做日誌文件等。對數據庫的成功啓動和正常運行是很重要的。

數據庫啓動時,各個物理文件使用的順序:
首先從初始化參數文件中獲得控制文件的名稱及位置,然後打開控制文件。
再從控制文件中讀取數據文件和聯機日誌文件的信息及其他相關信息。
最後打開數據庫 。

查看控制文件的信息:
查詢數據字典視圖v$controlfile
OEM工具—>點擊“服務器”選項卡—>在“存儲”選項組中點擊“控制文件”

(4)參數文件

參數文件中記錄着:
數據庫名稱
控制文件的路徑
SGA的內存結構
可選的Oracle特性和後台進程的配置參數等信息。
啓動數據庫實例時需要讀取參數文件中的信息,因此它是第一個被訪問的物理文件。

參數文件分為:
文本參數文件(pfile)
服務器參數文件(spfile)
他們有以下幾點區別:
名稱及路徑不同
編輯方式不同
修改後的生效時限不同
啓動次序spfile優先於pfile。

對於Oracle數據庫來説,數據文件就像一個倉庫,重作日誌文件就像該倉庫的貨物進出賬,控制文件就像該倉庫的管理中心,記錄着整個數據庫的結構。所以,當數據庫的物理結構改變時,Oracle會自動更新控制文件。

這篇就到這兒吧!下篇《oracle的體系結構之網絡配置(四)》