oracle 邏輯體系結構詳解


  以前對數據庫的了解大多數是集中在mysql,最近工作里面一直使用的是oracle,雖然說在互聯網行業mysql大行其道,但是一些傳統行業或者是金融領域還是更加傾向於使用oracle,sqlserver這種大型數據庫。為此還是有必要深入了解以下oracle的一些內部機制的。

  有過oracle使用經驗的人都知道表空間(tablespace)的概念,表空間其實是一個邏輯概念,它並不實際存在。而與之關系密切的是數據文件(datafile),數據文件是實際存在的,並且和表空間是多對1的關系。其實只知道這些是遠遠不夠的,前段時間遇到一個數據文件超過32G導致的業務問題,才突然醒悟騷年靜下心好好學習學習oracle底層的一些概念才是解決問題的王道。首先我們從整體來上了解一下oracle的邏輯體系結構。在這里附上一張百度到的圖片。

oracle體系結構

  圖片中展示的oracle的最大的邏輯結構為數據庫,其實這里最大的體系結構應該是實例(instance),並且實例和數據庫是一對一的關系,這樣的話我們可以將上圖看作是oracle體系結構中的一個可分割的最大單元。 可以看出數據庫可划分的最大單元為表空間,而表空間又由段(segment)組成,段由extent構成,如果再往下分的話是block,oracle中block的概念不同於操作系統中塊文件的概念,這個我們后面章節解釋。下面我們對上述的一些概念進行一下闡述:

  表空間:表空間是oracle抽象出來的最大的邏輯單元,用於存儲數據庫對象。和表空間相關的概念為數據文件,可以通過dba_data_files來查看表空間和數據文件的關系。

                    

     表空間分類: 

      • 永久表空間:存儲數據庫中需要永久化存儲的對象,比如二維表、視圖、存儲過程、索引。
      • 臨時表空間:存儲數據庫的中間執行過程,如:保存order by數據庫排序,分組時產生的臨時數據。操作完成后存儲的內容會被自動釋放。臨時表空間是通用的,所的用戶都使用TEMP作為臨時表空間。一般只有tmp一個臨時表空間,如果還需要別的臨時表空間時,可以自己創建。
      • UNDO表空間:保存數據修改前的副本。存儲事務所修改的舊址,即被修改之前的數據。當我們對一張表中的數據進行修改的同時會對修改之前的信息進行保存,為了對數據執行回滾、恢復、撤銷的操作。

  段: 段是指占用數據文件空間的通稱,或數據庫對象使用的空間的集合;段可以有表段、索引段、回滾段、臨時段和高速緩存段等。說到這里有必要提一下表段,因為標段中如果表作為一個分區表,那么表的一個分區占用一個段。

    段分類: 由於oracle中段比較多,這里我們只是簡單的說一些比較常見的段。

      • 表段: 表段,故名思意,它是專門用於存儲表的信息的數據結構,通常與索引段聯合使用。 
      • 分區段:這種段類型用於分區,與表段很相似。分區表由一個或多個表分區段組成,組合分區表則由一個或多個表子分區段組成。  
      • 索引段:這種段類型可以保存索引結構,與mysql類似,在mysql中mysiam存儲引擎下索引和數據是分開的,而innodb引擎下是存儲在一起的。
      • 索引分區: 類似於表分區,這種段類型包含一個索引的某個片。分區索引由一個或多個索引分區段組成。
      • 臨時段: 用於存放臨時數據,比如帶有order by語句的sql會在臨時段內存儲數據。
      • 回滾段:回滾段是DBA手動創建的段。Type2 undo段由Oracle自動創建和管理。
      • 還有很多其他的段,感興趣的大家自行研究一哈。

  區:區是oracle中由塊組成的邏輯單元,在10G中只要創建了表的時候就會分配區,而在11G及其之后是當插入數據的時候才會分配區。區的分配則是動態的,當表的容量超過當前區所能承載的范圍時就會自動添加新的區。這個內容可以通過dba_extents表查看。

  塊: oracle的塊是建立在數據庫塊的基礎之上的,通常oracle的塊可以是2,4,8,16,32K,是系統塊的整數倍,並且定義之后不能被修改。在這里引入一個前段時間遇到的問題: oracle數據文件超過32G導致業務失敗的問題。這是因為測試環境上面使用的是smallfile tablespace 模式,所以需要滿足以下制約:

   由於Oracle的Rowid中使用22位來代表Block號,這22位最多只能代表2^22-1(4194303)個數據塊,而在我們一般情況下使用的數據塊大小為8k,所以數據文件的理論大小最大為: 31.9999924G,並且在數據文件超過32G的情況下,唯一能做的就是添加一個datafile。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM