在看樣本庫的時候,發現有一些表的DDL不僅有Column部分,還有很多Partition部分,不理解什麼意思。於是搜尋了一下,發現原來是Oracle的一個Feature。 以下是參考資料:(可以結合樣本庫中的SH下的一些表學習)
Oracle提供了分區技術以支援VLDB(Very Large DataBase)。分區表通過對分區列的判斷,把分區列不同的記錄,放到不同的分區中。分區完全對應用透明。
Oracle的分區表可以包括多個分區,每個分區都是一個獨立的段(SEGMENT),可以存放到不同的資料表空間中。查詢時可以通過查詢表來訪問各個分區中的資料,也可以通過在查詢時直接指定分區的方法來進行查詢。
分區提供以下優點:
由於將資料分散到各個分區中,減少了資料損毀的可能性;
可以對單獨的分區進行備份和恢複;
可以將分區映射到不同的物理磁碟上,來分散IO;
提高可管理性、可用性和效能。
Oracle提供了以下幾種分區類型:
定界分割(range);
雜湊分割(hash);
列表分區(list);
範圍-雜湊複合分區(range-hash);
範圍-列表複合分區(range-list)。
索引也可以進行分區,分區索引有兩種類型:global和local。對於local索引,每一個表分區對應一個索引分割區,當表的分區發生變化時,索引的維護由Oracle自動進行。對於global索引,可以選擇是否分區,而且索引的分區可以不與表分區相對應。當對分區進行維護操作時,通常會導致全域索引的INVALDED,必須在執行完操作後REBUILD。Oracle9i提供了UPDATE GLOBAL INDEXES語句,可以使在進行分區維護的同時重建全域索引。
全域索引可以包含多個分區的值 局部索引比全域索引容易管理,而全域索引比較快
注意:不能為散列分區 或者 子分區建立全域索引
如果表中預期的資料量較大,通常都需要考慮使用分區表,確定使用分區表後,還要確定什麼類型的分區(range partition、hash partition、list partition等)、分區區間大小等。分區的建立最好與程式有某種默契,偶曾經建立分區表,按自然月份定義分區的,但程式卻在查詢時預設的開始時間與結束時間是:當前日期-30至當前日期,比如當天是9.18號,那查詢條件被產生為8.18-9.18,結果分區後並不沒有大幅提高效能,後來對程式的查詢日期做了調整,按自然月查詢,系統的負載小了很多。
從Oracle8.0開始支援表分區(MSSQL2005開始支援表分區)。
Oracle9i 分區能夠提高許多應用程式的可管理性、效能與可用性。分區可以將表、索引及索引編排表進一步劃分,從而可以更精細地對這些資料庫物件進行管理和訪問。Oracle 提供了種類繁多的資料分割配置以滿足所有的業務需要。另外,由於在 SQL 陳述式中是完全透明的,所以分區可以用於幾乎所有的應用程式。
分區表允許將資料分成被稱為分區甚至子分區的更小的更好管理的塊。索引也可以這麼分區。每個分區可以被單獨管理,可以不依賴於其他分區而單獨發揮作用,因此提供了一個更有利於可用性和效能的結構。
分區可以提高可管理性、效能與可用性,從而給各種各樣的應用程式帶來極大的好處。通常,分區可以使某些查詢以及維護操作的效能大大提高。此外,分區還能夠在很大程度上簡化日常管理工作。分區還使資料庫設計人員和管理員能夠解決尖端應用程式帶來的最難的問題。分區是建立上億萬位元組資料系統或需要極高可用性系統的關鍵工具。
在多CPU配置環境下,如果打算使用並存執行,則分區提供了另一種並行的方法。通過給表或索引的不同分區分配不同的並存執行伺服器,就可以並存執行對分區表和分區索引的操作。
表或索引的分區和子分區都共用相同的邏輯屬性。例如表的所有分區或子分區共用相同的列和約束定義,一個索引的分區或子分區共用相同的索引選項。然而它們可以具有不同的物理屬性如資料表空間。
儘管不需要將表或索引的每個分區或子分區放在不同的資料表空間,但這樣做更好。將分區儲存到不同的資料表空間能夠
l 減少資料在多個分區中衝突的可能性
l 可以單獨備份和恢複每個分區
l 控制分區與磁碟機之間的映射對平衡I/O 負載是重要的
l 改善可管理性可用性和效能
分區操作對現存的應用和運行在分區表上的標準DML 語句來說是透明的。但是可以通過在DML 中使用分區擴充表或索引的名字來對應用編程,使其利用分區的優點。
可以使用SQL*Loader、Import 和Export 工具來裝載或卸載分區表中的資料。這些工具都是支援分區和子分區的。
分區的方法Oracle9i 提供了如下5種分區方法:
l 定界分割Range
l 散列分區Hash
l 列表分區List
l 組合範圍-散列分區Range-Hash
l 組合範圍-列表分區Range-List
可對索引和表分區。全域索引只能定界分割,但可以將其定義在任何類型的分區或非分區表上。通常全域索引比局部索引需要更多的維護。
一般組建局部索引,以便反映其基礎資料表的結構。它與基礎資料表是等同分區的,即它與基礎
表在同樣的列上分區,建立同樣數量的分區或子分區,設定與基礎資料表相對應的同樣的分區邊界。對局部索引而言,當維護活動影響分區時,會自動維護索引分割區。這保證了索引與基礎資料表之間的等同分區。
關於定界分割Range:
要想將行映射到基於列值範圍的分區,就使用定界分割方法。當資料可以被劃分成邏輯範圍時如年度中的月份,這種類型的分區就有用了。當資料在整個範圍中能被均等地劃分時效能最好。如果靠範圍的分區會由於不均等的劃分而導致分區在大小上明顯不同時,就需要考慮其他的分區方法。
關於散列分區Hash:
如果資料不那麼容易進行定界分割,但為了效能和管理的原因又想分區時,就使用散列分區方法。散列分區提供了一種在指定數量的分區中均等地劃分資料的方法。基於分區鍵的散列值將行映射到分區中。建立和使用散列分區會給你提供了一種很靈活的放置資料的方法,因為你可以通過在I/O 磁碟機之間播撒(摘掉)這些均等定量的分區,來影響可用性和效能。
關於列表分區List:
當你需要明確地控制如何將行映射到分區時,就使用列表分區方法。可以在每個分區的描述中為該分區列指定一列離散值,這不同於定界分割,在那裡一個範圍與一個分區相關,這也不同於散列分區,在那裡使用者不能控制如何將行映射到分區。列表分區方法是特意為遵從離散值的模組化資料劃分而設計的。定界分割或散列分區不那麼容易做到這一點。進一步說列表分區可以非常自然地將無序的和不相關的資料集進行分組和組織到一起。
與定界分割和散列分區所不同,列表分區不支援多列分區。如果要將表按列分區,那麼分區鍵就只能由表的一個單獨的列組成,然而可以用定界分割或散列分區方法進行分區的所有的列,都可以用列表分區方法進行分區。
關於組合範圍-散列分區:
範圍和散列技術的組合,首先對錶進行定界分割,然後用散列技術對每個定界分割再次分區。給定的定界分割的所有子分區加在一起表示資料的邏輯子集。
關於組合範圍-列表分區:
範圍和列表技術的組合,首先對錶進行定界分割,然後用列表技術對每個定界分割再次分區。與組合範圍-散列分區不同的是,每個子分區的所有內容表示資料的邏輯子集,由適當的範圍和列表分區設定來描述。
建立或更改分區表時可以指定行移動子句,即ENABLE ROW MOVEMENT 或者DISABLE ROW MOVEMENT ,當其鍵被更改時,該子句啟用或停用將行遷移到一個新的分區。預設值為DISABLE ROW MOVEMENT。本產品(項目)使用ENABLE ROW MOVEMENT子句。
分區技術能夠提高資料庫的可管理性:
使用分區技術,維護操作可集中於表的特定部分。例如,資料庫管理員可以只對錶的一部分做備份,而不必對整個表做備份。對整個資料庫物件的維護操作,可以在每個分區的基礎上進行,從而將維護工作分解成更容易管理的小塊。
分區技術提高可管理性的一個典型用法是支援資料倉儲中的‘滾動視窗’載入進程。假設資料庫管理員每周向表中載入新資料。該表可以是定界分割,以便每個分區包含一周的資料。載入進程只是簡單地添加新的分區。添加一個新分區的操作比修改整個表效率高很多,因為資料庫管理員不需要修改任何其他分區。從分區後的表中去除資料也是一樣。你只要用一個很簡便快捷的資料字典操作刪掉一個分區,而不必發出使用大量資源和調動所有要刪除的資料的 ‘DELETE’ 命令。
分區技術能夠提高資料庫的效能:
由於減少了所檢查或操作的資料數量,同時允許並存執行,Oracle9i 的資料分割函數提供了效能上的優勢。這些效能包括:
l 分區修整:分區修整是用分區技術提高效能的最簡單最有價值的手段。分區修整常常能夠將查詢效能提高几個數量級。例如,假定應用程式中有包含定單記錄的定單表,該表用周進行了分區。查詢一周的定單只需訪問該定單表的一個分區。如果該定單表包含兩年的記錄,這個查詢只需要訪問一個而不是一百零四個分區。該查詢的執行速度因為分區修整而有可能快一百倍。分區修整能與所有其他 Oracle 效能特性協作。Oracle 公司將把分區修整技術與索引技術、連結技術和並行存取方法一起聯合使用。
l 分區智能聯結:資料分割函數可以通過稱為分區智能聯結的技術提高多表聯結的效能。當兩個表要聯結在一起,而且每個表都用聯結關鍵字來分區時,就可以使用分區智能聯結。分區智能聯結將大型聯結分解成較小的發生在各個分區間的聯結,從而用較少的時間完成全部聯結。這就給串列和並行的執行都能帶來顯著的效能改善。
l 更新和刪除的並存執行:資料分割函數能夠無限地並存執行 UPDATE、DELETE 與 MERGE 語句。當訪問分區或未分區的資料庫物件時Oracle 將平行處理 SELECT 與 INSERT 語句。當不使用位元影像索引時,也可以對分區或未分區的資料庫物件平行處理 UPDATE、DELETE 和 MERGE 語句。為了對有位元影像索引的對象平行處理那些操作,目標表必須先分區。這些 SQL 陳述式的並存執行可以大大提高效能,特別是提高 UPDATE 與 DELETE 或 MERGE 操作涉及大量資料時的效能。
分區技術提高可用性:
分區的資料庫物件具有分區獨立性。該分區獨立性特點可能是高可用性戰略的一個重要部分,例如,如果分區表的分區不能用,但該表的所有其他分區仍然保持線上並可用。那麼這個應用程式可以繼續針對該分區表執行查詢和交易處理,只要不是訪問那個停用分區,資料庫操作仍然能夠成功運行。 資料庫管理員可以指定各分區存放在不同的資料表空間裡,從而讓管理員獨立於其它表分區針對每個分區進行備份與恢複操作。 還有,資料分割函數可以減少計劃停機時間。效能由於資料分割函數得到了改善,使資料庫管理員在相對較小的批處理視窗完成大型資料庫物件的維護工作。
Oracle最大允許存在多少個分區呢?
我們可以從Oracle的Concepts手冊上找到這個資訊,對於Oracle9iR2:
Tables can be partitioned into up to 64,000 separate partitions.
對於Oracle10gR2,Oracle增強了分區特性:
Tables can be partitioned into up to 1024K-1 separate partitions.
關於何時應該進行分區,Oracle有如下建議:
■ Tables greater than 2GB should always be considered for partitioning.
■ Tables containing historical data, in which new data is added into the newest partition. A typical example is a historical table where only the current month's data is updatable and the other 11 months are read only.