Oracle分割槽表(Partition Table)

jss001發表於2009-02-13

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語句,可以使在進行分割槽維護的同時重建全域性索引。

全域性索引可以包含多個分割槽的值 區域性索引比全域性索引容易管理,而全域性索引比較快
注意:不能為雜湊分割槽 或者 子分割槽建立全域性索引

Oracle的分割槽功能十分強大。不過用起來發現有兩點不大方便:

第一是已經存在的表沒有方法可以直接轉化為分割槽表。不過Oracle提供了線上重定義表的功能,可以透過這種方式來完成普通表到分割槽表的轉化。可以參考這個例子:http://blog.itpub.net/post/468/13091

第二點是如果採用了local分割槽索引,那麼在增加表分割槽的時候,索引分割槽的表空間是不可控制的。如果希望將表和索引的分割槽分開到不同的表空間且不同索引分割槽也分散到不同的表空間中,那麼只能在增加分割槽後,對新增的分割槽索引單獨rebuild。

Oracle最大允許存在多少個分割槽呢?

我們可以從Oracle的上找到這個資訊,對於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.

[@more@]

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

相關文章