国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

Oracle9i 數據庫管理實務講座(四)

2024-08-29 13:40:07
字體:
來源:轉載
供稿:網友

  Oracle9i 數據庫實體結構
  上一期我為大家介紹了Oracle9i服務器架構,并探討Oracle9i 執行個體之組成要素與其運作原理,本期將把重點放在Oracle9i數據庫實體結構。
  Oracle9i數據庫結構
  
  談及Oracle數據庫結構時,我們應該從兩個角度來探討:分別是數據庫的「邏輯層面」與「實體組成」。簡單的說,「邏輯層面」是由”數據庫內部”觀看其組成要素,包括:資料表空間(tablespaces)、區段(segments)、延伸區塊(extents)、資料區塊(data block)、以及綱要對象(Schema objects)(注[1])。而「實體組成」則是從”操作系統”角度來看 Oracle9i 數據庫的實體構成項目,包括:數據文件(Data files)、重置日志文件(redo log files)、控制文件(control files)、密碼文件(passWord)、起始參數檔(initialization parameter files)…等等。假如您有心成為一個頂尖的 Oracle DBA,那么不僅要對以上各項如數家珍般熟悉,還要了解其內部運作與相互關系才行。首先我們就先從「邏輯層面」探訪Oracle9i數據庫!
  
  數據庫之邏輯組成
  
  無論是任何規模的企業,在治理數據庫系統時,DBA都應該依據實際系統需求或是未來可能的治理方式,規劃出一個或多個資料儲存區域。重點是希望將資料分門別類地妥善存放。譬如,您可能會希望將公司內會計系統的帳務資料與產品銷售紀錄分開存放。
  
  Oracle9i數據庫答應DBA自行規劃各種用途的資料表空間(Tablespace),以便存放不同型態的資料與數據庫對象。舉例來說,存放Oracle系統信息的「資料辭典」(data dictionary)可放在 SYSTEM 資料表空間;應用系統資料可存放在 USER 資料表空間;而所有數據表的索引(Index)則可單獨存放在INDX 數據表空間內(注[2])。
  
  一般來說,Oracle9i數據庫至少應規劃出五個以上的資料表空間,如下圖一所示:
   Oracle9i 數據庫治理實務講座(四)(圖一)
  圖一:Oracle9i數據庫之資料表空間。
  那么,先從資料的最小儲存單位 — 「資料區塊」談起。
  何謂「資料區塊」?
  
  許多初次接觸數據庫的讀者最好奇的一點是:” 資料究竟是如何存放在數據庫呢?”。其實,Oracle9i 數據庫有幾種資料儲存體,其中最小的儲存單元就稱為「數據區塊」(data block)。資料區塊大小是由起始參數檔的 DB_BLOCK_SIZE 參數所決定,且在新建Oracle9i數據庫之前就必須明確地定義。實際上,資料區塊大小與”操作系統的磁盤讀寫區塊”(O.S. blocks)也有關系,所以您必須將 DB_BLOCK_SIZE 設定為 O.S. blocks的整數倍。附帶一提:Oracle9i在存取資料時是以data block為最小讀取單位,而不是以OS block為單位。
  從 Oracle9i 開始,數據庫內可以設定多種資料區塊大小。換句話說,Oracle9i數據庫內分為「標準資料區塊」與「非標準資料區塊」;預設情況下 SYSTEM 資料表空間就是以「標準資料區塊」建立而成。
  何謂「延伸區塊」?
  
  除了資料區塊之外,Oracle9i數據庫還有所謂的「延伸區塊」(extents)。雖然資料區塊是Oracle9i最小的資料讀寫單位,但值得注重的是:Oracle9i 在”配置”儲存空間時,并不是以資料區塊為單位,而是改采「延伸區塊」的方式來配置空間。那么,使用「延伸區塊」究竟有何好處呢?當您執行DDL指令建立數據庫對象時(例如CREATE TABLE 指令),Oracle9i會先配置出一連串的資料區塊;直到這些資料區塊全部存滿資料后,下次再配置一連串的資料區塊。這些連續的資料區塊就統稱為「延伸區塊」。
  舉例來說,假定您預備在Oracle9i數據庫內存放80 KB的資料,Oracle9i可以先配置一個「延伸區塊」,其大小可為資料區塊(8 KB)的5倍;然后視實際需要再配置第二個「延伸區塊」(大小還是40 KB)。如此一來,只要兩次的空間配置動作就可以存放80 KB的資料了!試想,假如Oracle9i每次只配置8 KB的「資料區塊」讓您存放資料,總共需要10次空間配置動作才能放滿80 KB的資料,是不是比較沒有效率呢?由此可見,「延伸區塊」的確有其存在的必要性。
  何謂「區段」?
  
  依照不同的數據處理性質,您可能需要在資料表空間內劃分出不同區域,以存放不同資料;我們將這些區域稱之為「區段」(segment)。例如,存放數據的稱為「數據區段」、存放數據的稱為「索引區段」。而「區段」其實就是由許多「延伸區塊」組合而成。除了上述兩種「區段」以外,Oracle9i數據庫內還有另外兩種區段結構,分別是:「暫時性區段」(temporary segment)與「退回區段」(rollback segment)。下圖二說明了Oracle9i數據庫內各邏輯組成要件之間的階層關系:
   Oracle9i 數據庫治理實務講座(四)(圖二)
  圖二:Tablespace、Segment、Extent、Block之間的關系。

  
  所以,從Oracle9i數據庫的「邏輯層面」來看,我們知道:
  
  n 資料是存放在每個「資料區塊」內,資料讀寫動作也將以「資料區塊」為單位。
  
  n 空間配置的動作則是引用「延伸區塊」的概念。一個「延伸區塊」由一連串的「資料區塊」所構成。
  
  n依實際資料量多寡,資料(或數據庫對象)由多個「延伸區塊」所組成。
  
  n「資料表空間」內可劃分不同的「區段」;而每個「區段」內又包含許多「延伸區塊」。
  
  n 在每個Oracle9i數據庫內可規劃不同的「資料表空間」,用以存放不同型態的資料。
  截至目前為止,無論是資料區塊、延伸區塊、區段、甚至數據表空間,都只是邏輯上的數據儲存概念。實際上,Oracle9i數據庫是藉由數個操作系統內實體檔案來維系數據庫系統之正常運作。接下來我們將從操作系統角度來探討Oracle9i的實體組成要素。
  
  數據庫之實體組成
  
  還記得上一期文章中我們曾經綜覽Oracle9i 服務器基本架構嗎?假如從操作系統的觀點來看,Oracle9i 數據庫的實體組成要素就是操作系統內各式檔案,最重要的有:數據文件、重置日志文件、控制文件、起始參數檔…等。下圖三描述了Oracle9i 數據庫的基本架構。
   Oracle9i 數據庫治理實務講座(四)(圖三)
  圖三:Oracle9i 數據庫基本架構。
  數據文件
  
  每個 Oracle9i 數據庫都包含為數不等的實體「數據文件」。數據庫內所有邏輯數據庫對象都是存放在數據文件內,如:數據表、索引….等。
  
  一但數據文件被建立后,系統就會在磁盤上配置出適當空間給數據文件;但尚未存放任何使用者資料。等到未來使用者將資料存入數據庫時,Oracle9i 才會在數據文件內配置出「數據區段」,以存放數據。而這些動作都是由 Oracle9i 自動完成的。
  
  當然了,假如數據文件剩余空間不足,您就必須調整數據文件大小;或增加新的數據文件。所以在 Oracle9i 數據庫內,一個數據庫對象有可能橫跨多個數據文件 (數據文件相關的治理與維護動作將在未來專欄內容中具體探討) 。
  
  如前所述,Oracle9i 數據庫內可規劃一個以上的「資料表空間」。但假如由操作系統角度來看,「資料表空間」其實是由一個或數個實體「數據文件」所組成。換句話說,數據庫的所有資料就是位于操作系統的各「數據文件」內。
  
  所以:
  
  n 一個「數據文件」只能對應的一個「資料表空間」。
  
  n 一個「資料表空間」可包含多個「數據文件」。
  如下圖四所示:SYSTEM 「資料表空間」對應到操作系統的 system01.ora 「數據文件」(注[3]);USER 「資料表空間」則是包含 user01.ora 與 user02.ora 兩個「數據文件」。
   Oracle9i 數據庫治理實務講座(四)(圖四)
  圖四:資料表空間與數據文件之對應。
  重置日志文件
  
  除了「數據文件」外,最重要的Oracle9i數據庫實體檔案就是「重置日志文件」(redo log files),也就是大家俗稱的「交易日志」(transaction log)。雖然它與「數據文件」不同,但是彼此間卻有密不可分的關系!簡單的說,Oracle9i 重置日志文件會負責紀錄數據庫內任何數據處理情況(注[4])。當資料被異動時,所有異動紀錄會先保留在內存的重置紀錄緩沖區,并在適當時機由LGWR背景處理程序負責寫入至硬盤上重置日志文件(注[5])。如此一來,所有資料異動情況都會完整地保留下來。萬一您的 Oracle9i 數據庫不小心當機或是遭遇毀損,Oracle9i 將憑借重置日志文件內相關紀錄將資料復原至最完整的狀態—這個動作我們又稱為『Roll Forward』。
  
  重置日志文件的配置方式
  
  請注重,Oracle9i數據庫正常運作的先決條件是至少配置兩個(組)重置日志文件!
  假定目前Oracle9i數據庫擁有兩個重置日志文件,分別是redo01.ora與redo02.ora。因為重置日志文件是以循環方式使用,所以當redo01.ora寫滿后就會輪到redo02.ora — 這個動作稱為「日志切換」(log switch)。理論上,當redo02.ora寫滿后應該會馬上從redo01.ora重新開始寫入動作。但實際上并非如此 — Oracle9i 會等到redo01.ora內紀錄的資料異動情況真正反應在數據文件之后(記得我們曾經提過的CKPT處理程序嗎?),才會覆寫redo01.ora的資料。在一個大型線上交易(OLTP)系統下,假如資料交易量十分頻繁,建議您不妨配置五個以上重置日志文件。以免Oracle9i進行「日志切換」時還要等候CKPT處理程序執行「檢查點動作」(checkpoint),因而影響系統效能。
  在執行要害性任務(mission-critical)的數據庫系統中,為了避免硬件問題導致重置日志文件毀損(例如硬盤產生壞軌),我們會考慮建置「多重重置日志文件」(multiplexed redo log)。所謂的「多重重置日志文件」其實就是在其它硬盤內同時存放多份重置日志文件之復本。以下圖五為例:假定原來的重置日志文件為Redo_A01.ora與Redo_A02.ora。我在第二個磁盤又額外規劃了兩個重置日志文件 — Redo_B01.ora與Redo_B02.ora(分

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 济阳县| 石棉县| 米脂县| 奈曼旗| 安西县| 密山市| 沂南县| 大足县| 祁东县| 耒阳市| 庆城县| 财经| 九江县| 芦山县| 威远县| 炉霍县| 灵武市| 六盘水市| 德格县| 张家港市| 庆安县| 承德县| 皮山县| 广州市| 正蓝旗| 新龙县| 连南| 应城市| SHOW| 清流县| 孝昌县| 钟祥市| 乌拉特后旗| 大埔区| 杂多县| 罗平县| 托克逊县| 洪雅县| 南和县| 鄢陵县| 洛隆县|