oracle數據庫的整體結構
數據庫的結構關系
其實,我前面一篇講表空間的時候就介紹了數據庫的結構,只是那個圖只是簡單的層次關系,這張圖片看上去挺封復雜的,只要關注幾個概念就行了。
Database(數據庫) :數據庫是按照數據結構來組織、存儲和管理數據的倉庫。
Tablespaces(表空間) :表空間是數據庫的邏輯劃分,一個表空間只能屬于一個數據庫。所有的數據庫對象都存放在指定的表空間中。但主要存放的對象是表, 所以稱作表空間。
Segments (段): 段是表空間的重要組織結構,段是指占用數據文件空間的通稱,或數據庫對象使用的空間的集合;段可以有表段、索引段、回滾段、臨時段和高速緩存段等。
extents (盤區):是數據庫存儲空間分配的一個邏輯單位,它由連續數據塊所組成。第一個段是由一個或多個盤區組成。當一段中間所有空間已完全使用,oracle為該段分配一個新的范圍。
Data Block (數據塊):是oralce 管理數據文件中存儲空間的單位,為數據庫使用的I/O的最小單位,其大小可不同于操作系統的標準I/O塊大小。
(Storage Clause Precedence)存儲規范優先
Oracle 在存儲控制上可以分為三個方式。oracle缺省級別、表空間級別、段級別,可以理解中央、省級、縣級。從中央到地方的法規條例。比如為了發展經濟,對于招商引資的規范。中央規定可以實行招商引資,某省比較窮,為了吸引投資商,規定降低企業所得稅。某縣為了吸引資源,可以規定對于投資商土地免費使用5年,不征收土地使用稅。那么某投資商來本縣后首先適用縣級規定。
具體規定:
1、不管你在哪個層面上修改存儲方式,修改的參數是對未來要分配的存儲extents (盤區)起作用。
2、一些參數只能在指定的級別上進行修改。有些參數只能表空間級別設置,有些參數只能在段級別設置。
Types of segments (段的類型)
因為關于表空間的一些基本知識我在另一節里做過專門介紹,這里我們認識一下段都有哪些常見類型。
Table :
對于一個只有幾百條幾千條數據,一個學校的學生成績表,那么一張表就是一個segments 。
Table partition :
如果一張表非常大,里面存儲了幾千萬條、上億條記錄,那么對這一張表進行操作,效率就非常低了。分區表是將大表的數據分成稱為分區的許多小的子集。假如一張表是存放中國13億人口信息的表,那么這么多條記錄是有規律的,可以基于某一個字段將其分開。那么可以根據省級行政區可以劃分34個分區,每個分區實際上就是一個獨立的表,但在邏輯上這些分區又同屬于一張表。
如果一張表是普通的表,只點一個segments;如果一張表是partition的表,可能占多個segments。
Cluster :
Oracle中普通的表稱為堆表(heap table),堆表中的數據是無序存放的,往往在使用一段時間后,數據就變得非常無序。如下圖所示,索引中相同的key對應的數據存放在不同的block中,這時,如果要通過索引查詢某個key的數據,就需要訪問很多不同的block,代價非常高。
我們發現很多表與表,他們的數據有相關性,因為我們訪問一個表里的數據,往往要訪問另一些表里的數據。我們可以把這些數據物理上存儲在一塊。
Index
索引是與表和聚集相關的一種選擇結構,就當于我們一本書的目錄,可以快快速的定位某章某節的頁數。索引可以建立在一個表的一列或多列上,那就可以大大提高對表的查詢。那么一個index也可能會占一個多個segments 。
Index-organized table :
索引組織表(IOT),就是存儲在一個索引結果中的表。存儲在堆中的表是無組織的(也就是說,只要有可用的空間,數據可放在任何地方),IOT中 暗則按主鍵存儲和排序。對你的應用來說,IOT表和一個“常規”表并無差別。使用堆組織表時,我們必須為表和表主鍵上的索引分別留出空間。而IOT不存在主鍵的空間開銷,因為所引就是數據,數據就是所引。
IOT帶來的好處不僅節約磁盤空間的占用,更重要的是大幅度降低了I/O,減少了訪問緩沖區緩存(盡管從緩沖區緩存獲取數據比硬盤要快得多,但緩沖區緩存并不是免費,而且也絕不是廉價的。第個緩沖區緩存獲取都需要緩沖區緩存的多個閂,而閂是串行化設備,會限制應用的擴展能力)
Index partition
對于table有partition ,那么對一個大的index有也partition 。
分區所引可以分為全局分區索引與本地分區索引,其中本地索引又可以分為本地前綴索引和本地非前綴索引。
本地索引的分區和其對應的表分區數量相等,因此每個表分區都對應著相應的索引分區。使用本地索引,不需要指定分區范圍因為索引對于表而言是本地的,當本地索引創建時,Oracle會自動為表中的每個分區創建獨立的索引分區。
全局索引以整個表的數據為對象建立索引,索引分區中的索引條目既可能是基于相同的鍵值但是來自不同的分區,也可能是多個不同鍵值的組合。 全局索引既允許索引分區的鍵值和表分區鍵值相同,也可以不相同。全局索引和表之間沒有直接的聯系,這一點和本地索引不同。
Undo segment
回滾段用于存放數據修改之前的值(包括數據修改之前的位置和值)?;貪L段的頭部包含正在使用的該回滾段事務的信息。一個事務只能使用一個回滾段來存放它的回滾信息,而一個回滾段可以存放多個事務的回滾信息。
Temporary segment
原文轉自:http://www.cnblogs.com/fnng/archive/2012/09/17/2689716.html