熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle9i 數據庫管理實務講座(四)-Oracle9i 數據庫實體結構

2022-06-13   來源: Oracle 

  作者: 何致億 美商甲骨文公司台灣分公司特約顧問
  
  
  
  上一期我為大家介紹了Oraclei服務器架構並探討Oraclei 執行個體之組成要素與其運作原理本期將把重點放在Oraclei數據庫實體結構
  
  
  
  Oraclei數據庫結構
  
  談及Oracle數據庫結構時我們應該從兩個角度來探討分別是數據庫的「邏輯層面」與「實體組成」簡單的說「邏輯層面」是由數據庫內部觀看其組成要素包括資料表空間(tablespaces)區段(segments)延伸區塊(extents)資料區塊(data block)以及綱要對象(Schema objects)(注[])而「實體組成」則是從操作系統角度來看 Oraclei 數據庫的實體構成項目包括數據文件(Data files)重置日志文件(redo log files)控制文件(control files)密碼文件(password)起始參數檔(initialization parameter files)…等等如果您有心成為一個頂尖的 Oracle DBA那麼不僅要對以上各項如數家珍般熟悉還要了解其內部運作與相互關系才行首先我們就先從「邏輯層面」探訪Oraclei數據庫!
  
  
  
  數據庫之邏輯組成
  
  無論是任何規模的企業在管理數據庫系統時DBA都應該依據實際系統需求或是未來可能的管理方式規劃出一個或多個資料儲存區域重點是希望將資料分門別類地妥善存放譬如您可能會希望將公司內會計系統的帳務資料與產品銷售紀錄分開存放
  
  Oraclei數據庫允許DBA自行規劃各種用途的資料表空間(Tablespace)以便存放不同型態的資料與數據庫對象舉例來說存放Oracle系統信息的「資料辭典」(data dictionary)可放在 SYSTEM 資料表空間應用系統資料可存放在 USER 資料表空間而所有數據表的索引(Index)則可單獨存放在INDX 數據表空間內(注[])
  
  一般來說Oraclei數據庫至少應規劃出五個以上的資料表空間如下圖一所示
   
  圖一Oraclei數據庫之資料表空間
  
  
  
  那麼先從資料的最小儲存單位 — 「資料區塊」談起
  
  
  
  何謂「資料區塊」?
  
  許多初次接觸數據庫的讀者最好奇的一點是 資料究竟是如何存放在數據庫呢?其實Oraclei 數據庫有幾種資料儲存體其中最小的儲存單元就稱為「數據區塊」(data block)資料區塊大小是由起始參數檔的 DB_BLOCK_SIZE 參數所決定且在新建Oraclei數據庫之前就必須明確地定義實際上資料區塊大小與操作系統的磁盤讀寫區塊(OS blocks)也有關系所以您必須將 DB_BLOCK_SIZE 設定為 OS blocks的整數倍附帶一提Oraclei在存取資料時是以data block為最小讀取單位而不是以OS block為單位
  
  
  
  從 Oraclei 開始數據庫內可以設定多種資料區塊大小換句話說Oraclei數據庫內分為「標准資料區塊」與「非標准資料區塊」預設情況下 SYSTEM 資料表空間就是以「標准資料區塊」建立而成
  
  
  
  何謂「延伸區塊」?
  
  除了資料區塊之外Oraclei數據庫還有所謂的「延伸區塊」(extents)雖然資料區塊是Oraclei最小的資料讀寫單位但值得注意的是Oraclei 在配置儲存空間時並不是以資料區塊為單位而是改采「延伸區塊」的方式來配置空間那麼使用「延伸區塊」究竟有何好處呢?當您執行DDL指令建立數據庫對象時(例如CREATE TABLE 指令)Oraclei會先配置出一連串的資料區塊直到這些資料區塊全部存滿資料後下次再配置一連串的資料區塊這些連續的資料區塊就統稱為「延伸區塊」
  
  
  
  舉例來說假定您准備在Oraclei數據庫內存放 KB的資料Oraclei可以先配置一個「延伸區塊」其大小可為資料區塊( KB)的然後視實際需要再配置第二個「延伸區塊」(大小還是 KB)如此一來只要兩次的空間配置動作就可以存放 KB的資料了!試想如果Oraclei每次只配置 KB的「資料區塊」讓您存放資料總共需要次空間配置動作才能放滿 KB的資料是不是比較沒有效率呢?由此可見「延伸區塊」的確有其存在的必要性
  
  
  
  何謂「區段」?
  
  依照不同的數據處理性質您可能需要在資料表空間內劃分出不同區域以存放不同資料我們將這些區域稱之為「區段」(segment)例如存放數據的稱為「數據區段」存放數據的稱為「索引區段」而「區段」其實就是由許多「延伸區塊」組合而成除了上述兩種「區段」以外Oraclei數據庫內還有另外兩種區段結構分別是「暫時性區段」(temporary segment)與「退回區段」(rollback segment)下圖二說明了Oraclei數據庫內各邏輯組成要件之間的階層關系
   
  圖二TablespaceSegmentExtentBlock之間的關系
  
  
  
  所以從Oraclei數據庫的「邏輯層面」來看我們知道
  
  n      資料是存放在每個「資料區塊」內資料讀寫動作也將以「資料區塊」為單位
  
  n      空間配置的動作則是引用「延伸區塊」的概念一個「延伸區塊」由一連串的「資料區塊」所構成
  
  n      依實際資料量多寡資料(或數據庫對象)由多個「延伸區塊」所組成
  
  n      「資料表空間」內可劃分不同的「區段」而每個「區段」內又包含許多「延伸區塊」
  
  n      在每個Oraclei數據庫內可規劃不同的「資料表空間」用以存放不同型態的資料
  
  
  
  截至目前為止無論是資料區塊延伸區塊區段甚至數據表空間都只是邏輯上的數據儲存概念實際上Oraclei數據庫是藉由數個操作系統內實體檔案來維系數據庫系統之正常運作接下來我們將從操作系統角度來探討Oraclei的實體組成要素
  
  數據庫之實體組成
  
  還記得上一期文章中我們曾經綜覽Oraclei 服務器基本架構嗎?如果從操作系統的觀點來看Oraclei 數據庫的實體組成要素就是操作系統內各式檔案最重要的有數據文件重置日志文件控制文件起始參數檔…等下圖三描述了Oraclei 數據庫的基本架構
   
  圖三Oraclei 數據庫基本架構
  
  
  
  數據文件
  
  每個 Oraclei 數據庫都包含為數不等的實體「數據文件」數據庫內所有邏輯數據庫對象都是存放在數據文件內數據表索引…
  
  一但數據文件被建立後系統就會在磁盤上配置出適當空間給數據文件但尚未存放任何使用者資料等到未來使用者將資料存入數據庫時Oraclei 才會在數據文件內配置出「數據區段」以存放數據而這些動作都是由 Oraclei 自動完成的
  
  當然了如果數據文件剩余空間不足您就必須調整數據文件大小或增加新的數據文件所以在 Oraclei 數據庫內一個數據庫對象有可能橫跨多個數據文件 (數據文件相關的管理與維護動作將在未來專欄內容中詳細探討)
  
  如前所述Oraclei 數據庫內可規劃一個以上的「資料表空間」但如果由操作系統角度來看「資料表空間」其實是由一個或數個實體「數據文件」所組成換句話說數據庫的所有資料就是位於操作系統的各「數據文件」內
  
  所以
  
  n     一個「數據文件」只能對應的一個「資料表空間」
  
  n     一個「資料表空間」可包含多個「數據文件」
  
  
  
  如下圖四所示SYSTEM 「資料表空間」對應到操作系統的 systemora 「數據文件」(注[])USER 「資料表空間」則是包含 userora 與 userora 兩個「數據文件」
   
  圖四資料表空間與數據文件之對應
  
  
  
  重置日志文件
  
  除了「數據文件」外最重要的Oraclei數據庫實體檔案就是「重置日志文件」(redo log files)也就是大家俗稱的「交易日志」(transaction log)雖然它與「數據文件」不同但是彼此間卻有密不可分的關系!簡單的說Oraclei 重置日志文件會負責紀錄數據庫內任何數據處理情況(注[])當資料被異動時所有異動紀錄會先保留在內存的重置紀錄緩沖區並在適當時機由LGWR背景處理程序負責寫入至硬盤上重置日志文件(注[])如此一來所有資料異動情況都會完整地保留下來萬一您的 Oraclei 數據庫不小心當機或是遭遇毀損Oraclei 將憑借重置日志文件內相關紀錄將資料復原至最完整的狀態—這個動作我們又稱為『Roll Forward』
  
  重置日志文件的配置方式
  
  請注意Oraclei數據庫正常運作的先決條件是至少配置兩個(組)重置日志文件!
  
  
  
  假定目前Oraclei數據庫擁有兩個重置日志文件分別是redoora與redoora因為重置日志文件是以循環方式使用所以當redoora寫滿後就會輪到redoora — 這個動作稱為「日志切換」(log switch)理論上當redoora寫滿後應該會立刻從redoora重新開始寫入動作但實際上並非如此 — Oraclei 會等到redoora內紀錄的資料異動情況真正反應在數據文件之後(記得我們曾經提過的CKPT處理程序嗎?)才會覆寫redoora的資料在一個大型線上交易(OLTP)系統下如果資料交易量十分頻繁建議您不妨配置五個以上重置日志文件以免Oraclei進行「日志切換」時
From:http://tw.wingwit.com/Article/program/Oracle/201311/17695.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.