ORACLE系統概述(5)

jss001發表於2009-03-09
資料庫結構和空間管理
一個ORACLE資料庫是資料的集合,被處理成一個單位。一個ORACLE資料庫有一個物理結構和一個邏輯結構。
物理資料庫結構(physical database structure)是由構成資料庫的作業系統檔案所決定。每一個ORACLE資料庫是由三種型別的檔案組成:資料檔案、日誌檔案和控制檔案。資料庫的檔案為資料庫資訊提供真正的物理儲存。
邏輯資料庫結構是使用者所涉及的資料庫結構。一個ORACLE資料庫的邏輯結構由下列因素決定:
l 一個或多個表空間
l 資料庫模式物件(即表、檢視、索引、聚集、序列、儲存過程)
邏輯儲存結構如表空間(dataspace)、段(segment)和範圍將支配一個資料庫的物理空間如何使用。模式物件(schema object)用它們之間的聯絡組成了一個資料庫的關係設計。

1) 物理結構

(1) 資料檔案
每一個ORACLE資料庫有一個或多個物理的資料檔案(data file)。一個資料庫的資料檔案包含全部資料庫資料。邏輯資料庫結構(如表、索引)的資料物理地儲存在資料庫的資料檔案中。資料檔案有下列特徵:
l 一個資料檔案僅與一個資料庫聯絡。
l 一旦建立,資料檔案不能改變大小
l 一個表空間(資料庫儲存的邏輯單位)由一個或多個資料檔案組成。
資料檔案中的資料在需要時可以讀取並儲存在ORACLE記憶體儲區中。例如:使用者要存取資料庫一表的某些資料,如果請求資訊不在資料庫的記憶體儲存區內,則從相應的資料檔案中讀取並儲存在記憶體。當修改和插入新資料時,不必立刻寫入資料檔案。為了減少磁碟輸出的總數,提高效能,資料儲存在記憶體,然後由 ORACLE後臺程式DBWR決定如何將其寫入到相應的資料檔案。

(2) 日誌檔案
每一個資料庫有兩個或多個日誌檔案(redo log file)的組,每一個日誌檔案組用於收集資料庫日誌。日誌的主要功能是記錄對資料所作的修改,所以對資料庫作的全部修改是記錄在日誌中。在出現故障時,如果不能將修改資料永久地寫入資料檔案,則可利用日誌得到該修改,所以從不會丟失已有操作成果。
日誌檔案主要是保護資料庫以防止故障。為了防止日誌檔案本身的故障,ORACLE允許鏡象日誌(mirrored redo log),以致可在不同磁碟上維護兩個或多個日誌副本。
日誌檔案中的資訊僅在系統故障或介質故障恢復資料庫時使用,這些故障阻止將資料庫資料寫入到資料庫的資料檔案。然而任何丟失的資料在下一次資料庫開啟時,ORACLE自動地應用日誌檔案中的資訊來恢復資料庫資料檔案。

(3) 控制檔案
每一ORACLE資料庫有一個控制檔案(control file),它記錄資料庫的物理結構,包含下列資訊型別:
l 資料庫名;
l 資料庫資料檔案和日誌檔案的名字和位置;
l 資料庫建立日期。
為了安全起見,允許控制檔案被鏡象。
每一次ORACLE資料庫的例項啟動時,它的控制檔案用於標識資料庫和日誌檔案,當著手資料庫操作時它們必須被開啟。當資料庫的物理組成更改時,ORACLE自動更改該資料庫的控制檔案。資料恢復時,也要使用控制檔案。

2) 邏輯結構
資料庫邏輯結構包含表空間、段、範圍(extent)、資料塊和模式物件。
(1) 表空間
一個資料庫劃分為一個或多個邏輯單位,該邏輯單位稱為表空間(TABLESPACE)。一個表空間可將相關的邏輯結構組合在一起。DBA可利用表空間作下列工作:
l 控制資料庫資料的磁碟分配。
l 將確定的空間份額分配給資料庫使用者。
l 透過使單個表空間線上或離線,控制資料的可用性。
l 執行部分資料庫後備或恢復操作。
l 為提高效能,跨越裝置分配資料儲存。
資料庫、表空間和資料檔案之間的關係如下圖所示:
Database

SYSTEM DATA

Tablespace Tablespace





DTATAFILE1
(2MB) DATAFILE2
(2MB) DATAFILE3
(2MB)

Driver1 Driver2

。每個資料庫可邏輯劃分為一個或多個表空間
。每一個表空間是由一個或多個資料檔案組成,該表空間物理地儲存表空間中全部邏輯結構的資料。DBA可以建立新的表空間,可為表空間增加資料檔案或可刪除資料檔案,設定或更改預設的段儲存位置。

每一個ORACLE資料庫包含有一個名為SYSTEM的表空間,在資料庫建立是自動建立。在該表空間中總包含有整個資料庫的資料字典表。最小的資料庫可只需要SYSTEM表空間。該表空間必須總是線上。表和儲存的PL/SQL程式單元(過程、函式、包和觸發器)的全部儲存資料是儲存在SYSTEM表空間中。如果這些PL/SQL物件是為資料庫建的,DBA在SYSTEM表空間中需要規劃這些物件所需要的空間。
表空間利用增加資料檔案擴大表空間,表空間的大小為組成該表空間的資料檔案大小的和。
DBA可以使ORACLE資料庫中任何表空間(除SYSTEM表空間外)線上(ONLINE)或離線(OFFLINE)。表空間通常是線上,以致它所包含的資料對資料庫使用者是可用的。當表空間為離線時,其資料不可使用。在下列情況下,DBA可以使其離線。
。使部分資料不可用,而剩餘的部分允許正常存取
。執行離線的表空間後備
。為了修改或維護一應用,使它和它的一組表臨時不可用。
包含有正在活動的回滾段的表空間不能被離線,僅當回滾段不正在使用時,該表空間才可離線。
在資料字典中記錄表空間的狀態,線上還是離線。如果在資料庫關閉時一表空間為離線,那麼在下次資料庫裝配和重新開啟後,它仍然保持離線。
當出現某些錯誤時,一個表空間可自動地由線上改變為離線。透過使用多個表空間,將不同型別的資料分開,更方便DBA來管理資料庫。
ORACLE 資料庫中一表空間是由一個或多個物理資料檔案組成,一個資料檔案只可與一個表空間想聯絡。當為一表空間建立一資料檔案時,ORACLE建立該檔案,分配指定的磁碟空間容量。在資料檔案初時建立後,所分配的磁碟不包含任何資料。表空間可以線上或離線。在ORACLE中還允許單獨資料檔案線上或離線。

(2) 段、範圍和資料塊
ORACLE透過段、範圍和資料塊邏輯資料結構可更細地控制磁碟空間的使用。


段(SEGMENT)包含表空間中一種指定型別的邏輯儲存結構,是由一組範圍組成。在ORACLE資料庫中有幾種型別的段:資料段、牽引段、回滾段和臨時段。
資料段:對於每一個非聚集的表有一資料段,表的所有資料存放在該段。每一聚集有一個資料段,聚集中每一個表的資料儲存在該段中。
索引段:每一個索引有一索引段,儲存索引資料。
回滾段:是由DBA建立,用於臨時儲存要撤消的資訊,這些資訊用於生成讀一致性資料庫資訊、在資料庫恢復時使用、回滾未提交的事務。
臨時段:當一個SQL語句需要臨時工作區時,由ORACLE建立。當語句執行完畢,臨時段的範圍退回給系統。
ORACLE對所有段的空間分配,以範圍為單位。

範圍
一個範圍(EXTENT)是資料庫儲存空間分配的一個邏輯單位,它由連續資料塊所組成。每一個段是由一個或多個範圍組成。當一段中間所有空間已完全使用時,ORACLE為該段分配一個新的範圍。
為了維護的目的,在資料庫的每一段含有段標題塊(segment header block)說明段的特徵以及該段中的範圍目錄。

資料塊
資料塊(data block)是ORACLE管理資料檔案中儲存空間的單位,為資料庫使用的I/O的最小單位,其大小可不同於作業系統的標準I/O塊大小。


資料塊的格式:
公用的變長標題
表目錄
行目錄
未用空間
行資料

(3) 模式和模式物件
一個模式(schema)為模式物件(scehma object)的一個集合,每一個資料庫使用者對應一個模式。模式物件為直接引用資料庫資料的邏輯結構,模式物件包含如表、檢視、索引、聚集、序列、同義詞、資料庫鏈、過程和包等結構。模式物件是邏輯資料儲存結構,每一種模式物件在磁碟上沒有一個相應檔案儲存其資訊。一個模式物件邏輯地儲存在資料庫的一個表空間中,每一個物件的資料物理地包含在表空間的一個或多個資料檔案中。


表(table)為資料庫中資料儲存的基本單位,其資料按行、列儲存。每個表具有一表名和列的集合。每一列有一個列名、資料型別、寬度或精度、比例。一行是對應單個記錄的列資訊的集合。

檢視
一個檢視(view)是由一個或多個表(或其他檢視)中的資料的一種定製的表示,是用一個查詢定義,所以可認為是一個儲存的查詢(stored query)或是一個虛表(virtual table)。檢視可在使用表的許多地方使用。
由於檢視是由表匯出的,檢視和表存在許多類似,檢視象表最多可定義254列。檢視可以被查詢,而在修改、插入或刪除時具有一定的限制,在檢視上執行的全部操作真正地影響檢視的基本表中的資料,受到基本表的完整性約束和觸發器的限制。
檢視與表不同,一個檢視不分配任何儲存空間,檢視不真正地包含資料。由查詢定義的檢視相應於檢視引用表中的資料。檢視只在資料字典中儲存其定義。
引入檢視有下列好處:
。透過限制對錶的行預定義集合的存取,為表提供附加的安全性
。隱藏資料複雜性。
。為使用者簡化命令
。為基本表的資料提供另一種觀點。
。可將應用隔離基本表定義的修改
。用於不用檢視無法表示的查詢。
。可用於儲存複雜查詢。

聚集
聚集(cluster)是儲存表資料的可選擇的方法。一個聚集是一組表,將具有同一公共列值的行儲存在一起,並且它們經常一起使用。這些公共列構成聚集碼。例如:EMP表各DEPT表共享DEPTNO列,所以EMP表和DEPT表可聚集在一起,聚集碼的列為DEPTNO列,該聚集將每個部門的全部職工行各該部門的行物理地儲存在同一資料塊中。

索引
索引(index)是與表和聚集相關的一種選擇結構。索引是為提高資料檢索的效能而建立,利用它可快速地確定指定的資訊。ORACLE索引為表資料提供快速存取路徑。索引適用於一範圍的行查詢或指定行的查詢。
索引可建立在一表的一列或多列上,一旦建立,由ORACLE自動維護和使用,對使用者是完全透明的。索引是邏輯地和物理地獨立於資料,它們的建立或刪除對錶沒有影響,應用可繼續處理。索引資料的檢索效能幾乎保持常數,而當一表上存在許多索引時,修改、刪除和插入操作的效能會下降。
索引有唯一索引各非唯一索引。唯一索引保證表中沒有兩行在定義索引的列上具有重複值。ORACLE在唯一碼上自動地定義唯一索引實施UNIQUE完整性約束。
組合索引是在表的某個列上所建立的一索引。組全索引可加快SELECT語句的檢索速度,在其WHERE子句中可引用組合索引的全部或主要部分 。所以在定義中給出列的次序,將經常存取的或選擇最多的列放在首位。
在建立索引時,將在表空間自動地建立一索引段,索引段空間分配和保留空間的使用受下列方式控制:
索引段範圍的分配常駐該索引段的儲存引數控制。
其資料塊中未用空間可受該段的PCTFREE引數設定所控制。

序列生成器
序列生成器(sequence generator)產生序列號。在多使用者環境下該序列生成器特別有用,可生成各返回序列號而不需要磁碟I/O或事務封鎖。
序列號為ORACLE整數,最多可有38個數字。一個序列定義指出一般資訊:序列的名字、上升或下降、序列號之間間距和其它資訊。對所有序列的確的定義以行儲存在SYSTEM表空間中的資料字典表中,所以所有序列定義總是可用。由引用序列號的SQL語句使用序列號,可生成一個新的序列號或使用當前序列號。一旦在使用者會話中的SQL語句生成一序列號,該序列號僅為該會話可用。序列號生成是獨立於表,所以同一序列生成器可用於一個和多個表。所生成序列號可用於生成唯一的主碼。[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18921899/viewspace-1016780/,如需轉載,請註明出處,否則將追究法律責任。

相關文章