1. 程式人生 > >oracle資料庫——邏輯結構

oracle資料庫——邏輯結構

##邏輯結構

oracle資料庫的邏輯結構可分為:

  • 表空間
  • 資料塊

  •   在介紹資料庫的基本邏輯結構之前我們應該首先有資料庫物件的概念,在運用資料庫的過程中我們建立的表、檢視、索引、儲存過程、觸發器等包括使用者都是資料庫物件。

表空間

  這些資料庫物件就存放在表空間中,在我們安裝資料庫的時候通常會預設生成SYSTEM,SYSAUX,TEMP(臨時表空間),UNDOTBS(重做表空間),在實際程式運用中又會建立應用程式專用的幾個表空間。回到關於表空間用來存放資料庫物件的概念中,是不是一個數據庫物件只能存放在一個表空間中呢?答案是否定的,資料庫物件可以存放在多個表空間中,但是需要注意的是一個表空間只能屬於一個數據庫(在分散式架構中,應用程式會使用多個數據庫。)也就是多資料庫應用系統中表空間不可重名。

資料塊

  介紹完邏輯結構中最高層結構或者說是最大邏輯單位,再來看一下邏輯結構中的最小單位:資料塊。(http://blog.csdn.net/yujin2010good/article/details/7747204)博主就oracle資料庫資料庫進行了更為詳細的講解與演示。
  資料塊由磁碟儲存單位中的若干位元組構成,oracle預設的資料庫大小為8kb,可以在初始化引數檔案裡面(init.ora)中通過修改db_block_size引數進行設定,一般是作業系統塊的整數倍。

“  oracle正是通過自己的資料塊來遮蔽不同作業系統儲存結構的差異,無論是Windows環境,還是Unix、Linux環境,其作業系統儲存結構和方式、甚至字元排列的方式都是不同的。Oracle利用資料塊將這些差異加以遮蔽,全部資料操作採用對Oracle塊的操作,相當於是一個層次的抽象。"(

https://wenku.baidu.com/view/b8664cbe2f60ddccda38a0d1.html)

  應用資料庫時,記錄的每行資料都儲存在資料塊中,實際上oracle所有對資料的操作和空間分配,都是針對資料塊Block的操作。從資料表中搜索出一行,oracle就會從儲存中讀取到該行所在的資料塊,再返回該資料塊上的資料記錄。在設計資料表的時候定義的列的大小等都與資料塊的大小有關。如果某行記錄的資料太大超出了設計的資料塊的大小時,又產生了行連結與行遷移(http://blog.csdn.net/yujin2010good/article/details/7747204)的解決方法。
###區
  比資料塊高一級的單位是

extent)是一連串連續資料塊的集合;在進行儲存資料資訊的時候,oracle會分配資料塊進行儲存,但是不能保證所有分配的資料塊都是連續結構,由此引申出分割槽的概念。分割槽又可以分為水平分割槽與垂直分割槽。前文講到資料庫物件存放在表空間中,以一個大學5年的入學學生資訊表為例,表包含姓名,年紀,性別,家庭人員數,家庭住址,聯絡電話,高考各科的成績等等資料列,資料量非常大,水平分割槽的方案就是將每年的資料存放在一個分割槽中;垂直分割槽就是從各種列中將資料大的列(例如列型別為大物件資料型別)提出來存放在另外的分割槽中;這兩種方式的使用都避免了在查詢資訊的時候對整張表的掃描,提高了查詢效率。至於如何確定在哪個分割槽中進行查詢,只能說資料庫自己知道。引用一個百度百科的例子:

  百萬行的表劃分為10個分割槽,每個分割槽就包含十萬行資料,那麼查詢分割槽需要的時間僅僅是全表掃描的十分之一了,很明顯的對比。同時對十萬行的表建立索引的速度也會比百萬行的快得多得多。如果你能把這些分割槽建立在不同的磁碟上,這時候的I/O讀寫速度就“不堪設想”(沒用錯詞,真的太快了,理論上100倍的速度提升啊,這是多麼快的響應速度啊,所以有點不堪設想了)

  段(segment)與資料庫物件相對應,一般一個數據庫物件對應一個數據段。前面分析可知,一個數據庫物件可能由多個分割槽構成,引入資料段的概念,可以說是由多個extent構成一個數據段。關於資料段的概念需要注意以下兩點:
  1.資料段在資料物件建立的時候就已經建立出來,隨著資料庫物件內容的增多,不斷的分配多個分割槽進行管理。
  2.在表空間中,一個段包含來自多個檔案的資料區,段可以跨越資料檔案,按照段中儲存的資料特徵和用途不同,可以將段分為:資料段,索引段,臨時段和回滾段。

…The end…
  關於資料庫檔案則是資料庫物理結構的內容將在下一篇中進行研究學習。
文中相關連結介紹了與本文相關的一些內容,個人認為是比較詳細與精確的介紹了相關概念,如果有任何講得不夠清楚的地方,去這些網頁參考一下,收穫應該會挺大。