- Oracle 11g從入門到精通(第2版) (軟件開發視頻大講堂)
- 明日科技
- 3455字
- 2020-11-28 15:54:49
2.2 邏輯存儲結構
視頻講解:光盤\TM\lx\2\邏輯存儲結構.mp4
邏輯存儲結構是Oracle數據庫存儲結構的核心內容,對Oracle數據庫的所有操作都會涉及其邏輯存儲結構。邏輯存儲結構是從邏輯的角度分析數據庫的構成,是對數據存儲結構在邏輯概念上的劃分。Oracle的邏輯存儲結構是一種層次結構,主要由表空間、段、區間和數據塊等概念組成。邏輯結構是面向用戶的,當用戶使用Oracle設計數據庫時,其使用的就是邏輯存儲結構。Oracle的邏輯存儲結構中所包含的多個結構對象從數據塊到表空間形成了不同層次的粒度關系,如圖2.2所示。

圖2.2 Oracle的邏輯存儲結構
從圖2.2中可以看到,Oracle數據庫是由多個表空間組成(可見數據庫自身也屬于邏輯概念),而表空間又是由多個段組成,段由多個數據區組成,數據區又是由多個數據塊組成。
2.2.1 數據塊(Data Blocks)
數據塊是Oracle邏輯存儲結構中的最小的邏輯單位,也是執行數據庫輸入/輸出操作的最小存儲單位。Oracle數據存放在“Oracle數據塊”中,而不是“操作系統塊”中。通常Oracle數據塊是操作系統塊的整數倍,如果操作系統塊的大小為2048B,并且Oracle數據塊的大小為8192B,則表示Oracle數據塊由4個操作系統塊構成。Oracle數據塊有一定的標準大小,其大小被寫入到初始化參數DB_BLOCK_SIZE中。另外,Oracle支持在同一個數據庫中使用多種大小的塊,與標準塊大小不同的塊就是非標準塊。
【例2.1】 通過V$PARAMETER數據字典來查詢Oracle標準數據塊的大小,具體代碼如下(實例位置:光盤\TM\sl\2\1)。
SQL> col name format a30 SQL> col value format a20 SQL> select name, value from v$parameter where name = 'db_block_size' ;
本例運行結果如圖2.3所示。

圖2.3 Oracle標準數據塊的大小
在上面的代碼中,首先格式化NAME列和VALUE列的大小,以方便在同一行顯示,然后使用select語句獲得參數db_block_size的值(即VALUE列的值),該值也就是標準數據塊的大小。
數據塊中可以存放表數據、索引數據和簇數據等,無論存放哪種類型的數據,其結構都是相同的。數據塊由塊頭、表目錄、行目錄、空余空間和行數據這5部分組成,如圖2.4所示。

圖2.4 數據塊的結構
數據塊中各個組成部分的介紹如下。
塊頭:存放數據塊的基本信息,如塊的物理地址、塊所屬的段的類型。
表目錄:存放表的相關信息。如果數據塊中存儲的數據是表數據,則表目錄中存儲有關這些表的相關信息。
行目錄:如果塊中有行數據存在,則這些行的信息將被記錄在行目錄中。這些信息包括行的地址等。
空余空間:空余空間是一個塊中未使用的區域,這片區域用于新行的插入和已經存在的行的更新。
行數據:用于存放表數據和索引數據的地方,這部分空間已被數據行所占用(如表中的若干行數據記錄)。
通常把塊頭、表目錄、行目錄這三部分組合起來稱為頭部信息區,頭部信息區不存放數據,它存放整個塊的引導信息,起到引導系統讀取數據的作用。所以頭部信息區若遭到破壞,則Oracle系統將無法讀取這部分數據。另外,空余空間和行數據公共構成塊的存儲區,用于存放真正的數據記錄。
2.2.2 數據區(Extent)
數據區(也可稱作數據擴展區)是由一組連續的Oracle數據塊所構成的Oracle存儲結構,一個或多個數據塊組成一個數據區,一個或多個數據區再組成一個段(Segment)。當一個段中的所有空間被使用完后,Oracle系統將自動為該段分配一個新的數據區,這也正符合Extent這個單詞所具有的“擴展”的含義,可見數據區是Oracle存儲分配的最小單位,Oracle就以數據區為單位進行存儲控件的擴展。
使用數據區的目的是用來保存特定數據類型的數據,也是表中數據增長的基本單位。在Oracle數據庫中,分配存儲空間就是以數據區為單位的。一個Oracle對象至少包含一個數據區。設置一個表或索引的存儲參數包含設置它的數據區大小。
2.2.3 段(Segment)
段是由一個或多個數據區構成,它不是存儲空間的分配單位,而是一個獨立的邏輯存儲結構,用于存儲表、索引或簇等占用空間的數據對象,Oracle也把這種占用空間的數據對象統一稱為段。一個段只屬于一個特定的數據對象,每當創建一個具有獨立段的數據對象時,Oracle將為它創建一個段。
段是為特定的數據對象(如表、索引、回滾等)分配的一系列數據區。段內包含的數據區可以不連續,并且可以跨越多個文件,使用段的目的是用來保存特定對象。一個Oracle數據庫通常有以下4種類型的段。
(1)數據段:數據段中保存的是表中的數據記錄。在創建數據表時,Oracle系統將為表創建數據段。當表中的數據量增大時,數據段的大小自然也隨著變大,數據段的增大過程是通過向其添加新的數據區來實現的。當創建一個表時,系統自動創建一個以該表的名字命名的數據段。
(2)索引段:索引段中包含了用于提高系統性能的索引。一旦建立索引,系統自動創建一個以該索引的名字命名的索引段。
(3)回滾段:回滾段(也可稱作撤銷段)中保存了回滾條目,Oracle將修改前的舊值保存在回滾條目中。利用這些信息,可以撤銷未提交的操作,以便為數據庫提供讀入一致性和回滾未提交的事務,即用來回滾事務的數據空間。當一個事務開始處理時,系統為之分配回滾段,回滾段可以動態創建和撤銷。Oracle 11g系統有個默認的回滾段,其管理方式既可以是自動的,也可以是手工的。
(4)臨時段:當執行創建索引、查詢等操作時,Oracle可能會使用一些臨時存儲空間,用于暫時性地保存解析過的查詢語句以及在排序過程中產生的臨時數據。Oracle系統將在專門用于存儲臨時數據的表空間中為操作分配臨時段。
在執行CREATE INDEX、SELECT ORDER BY、SELECT DISTINCT和SELECT GROUP BY等幾種類型的SQL語句時,Oracle系統就會在臨時表空間中為這些語句的操作分配一個臨時段。
在數據庫管理過程中,若經常需要執行上面這類SQL語句,最好調整SORT_AREA_SIZE初始化參數來增大排序區,從而使排序操作盡量能夠在內存中完成,以獲得更好的執行效率,但同時這對數據庫服務器的內存空間提出了更大的要求。
2.2.4 表空間(TableSpace)
Oracle使用表空間將相關的邏輯結構(比如段、數據區等)組合在一起,表空間是數據庫的最大邏輯劃分區域,通常用來存放數據表、索引、回滾段等數據對象(即Segment),任何數據對象在創建時都必須被指定存儲在某個表空間中。表空間(屬邏輯存儲結構)與數據文件(屬物理存儲結構)相對應,一個表空間由一個或多個數據文件組成,一個數據文件只屬于一個表空間;Oracle數據的存儲空間在邏輯上表現為表空間,而在物理上表現為數據文件。舉個例子來說,表空間相當于操作系統中的文件夾,而數據文件就相當于文件夾中的文件。每個數據庫至少有一個表空間(即SYSTEM表空間),表空間的大小等于所有從屬于它的數據文件大小的總和。
由于表空間在物理上(即磁盤上)包含操作系統中的一個或多個數據文件,因此在表空間中創建的數據對象就存在以下兩種情況。
(1)若表空間只包含一個數據文件,則該表空間中的所有對象都存儲在這個數據文件中。
(2)若表空間包含多個數據文件,則Oracle即可將數據對象存儲在該表空間的任意一個數據文件中,也可以將同一個數據對象中的數據分布在表空間的多個數據文件中。
在創建數據庫時,Oracle系統會自動創建多個默認的表空間,這些表空間除了用于管理用戶數據的表空間之外,還包括用于管理Oracle系統內部數據(如數據字典)的表空間,下面列舉了Oracle 11g版本默認創建的主要表空間。
(1)SYSTEM表空間。SYSTEM表—系統表空間,它用于存放Oracle系統內部表和數據字典的數據,如表名、列名、用戶名等。Oracle本身不贊成將用戶創建的表、索引等存放在系統表空間中。表空間中的數據文件個數不是固定不變的,可以根據需要向表空間中追加新的數據文件。
【例2.2】 通過dict查看數據庫中數據字典的信息,具體代碼如下。
SQL> col table_name for a30 SQL> col comments for a30 SQL> select * from dict;
【例2.3】 通過v$fixed_view_definition查看數據庫中內部系統表的信息,具體代碼如下。
SQL> col view_name format a30 SQL> col view_definition format a30 SQL> select * from v$fixed_view_definition;
(2)SYSAUX表空間。SYSAUX表空間是Oracle 11g新增加的表空間,是隨著數據庫的創建而創建的,它充當SYSTEM的輔助表空間,降低了SYSTEM表空間的負荷,主要存儲除數據字典以外的其他數據對象。SYSAUX表空間一般不存儲用戶的數據,由Oracle系統內部自動維護。
(3)UODO表空間。UODO表空間—撤銷表空間,是用于存儲撤銷信息的表空間。當用戶對數據表進行修改操作(包括插入、更新、刪除等操作)時,Oracle系統自動使用撤銷表空間來臨時存放修改前的舊數據。當所做的修改操作完成并執行提交命令后,Oracle根據系統設置的保留時間長度來決定何時釋放掉撤銷表空間的部分空間。一般在創建Oracle實例后,Oracle系統自動創建一個名字為UNDOTBS1的撤銷表空間,該撤銷表空間對應的數據文件是UNDOTBS01.DBF。
(4)USERS表空間。USERS表空間—用戶表空間,是Oracle建議用戶使用的表空間,可以在這個表空間上創建各種數據對象。比如,創建表、索引、用戶等數據對象。Oracle系統的樣例用戶SCOTT對象就存放在USERS表空間中。
除了Oracle系統默認創建的表空間外,用戶可根據應用系統的實際情況及其所要存放的對象類型創建多個自定義的表空間,以區分用戶數據與系統數據。此外,不同應用系統的數據應存放在不同的表空間上,而不同表空間的文件應存放在不同的盤上,從而減少I/O沖突,提高應用系統的操作性能。
- 現代C++編程:從入門到實踐
- The DevOps 2.3 Toolkit
- GAE編程指南
- JavaScript前端開發與實例教程(微課視頻版)
- 微信公眾平臺開發:從零基礎到ThinkPHP5高性能框架實踐
- SAS數據統計分析與編程實踐
- Visual Basic程序設計實驗指導(第4版)
- Python漫游數學王國:高等數學、線性代數、數理統計及運籌學
- Learning Python Design Patterns
- LabVIEW虛擬儀器入門與測控應用100例
- .NET 4.5 Parallel Extensions Cookbook
- 實戰Java高并發程序設計(第2版)
- 從零開始學UI:概念解析、實戰提高、突破規則
- HTML5游戲開發實戰
- Swift High Performance