Oracle11g維護分割槽(四)——Exchanging Partitions
交換分割槽
你可以透過交換資料段將一個分割槽(或子分割槽)轉化為一個非分割槽表,也可以將一個非分割槽錶轉化為一個分割槽表的分割槽(或子分割槽)。你也可以將一個雜湊分割槽錶轉化為一個複合雜湊分割槽表的一個分割槽,或者將一個複合雜湊分割槽表的一個分割槽轉化為一個雜湊分割槽表。類似的,你可以將一個【範圍|列表】分割槽錶轉化為一個複合【範圍|列表】分割槽表的一個分割槽,或者將一個複合【範圍|列表】分割槽表的一個分割槽轉化為一個【範圍|列表】分割槽表。
當你有一個需要將非分割槽錶轉化成一個分割槽表的分割槽的應用時,交換表分割槽是非常有用的。例如,在資料倉儲環境下,交換分割槽有利於將新增資料快速載入到一個現存分割槽表。一般來說,OLTP和資料倉儲都受益於從一個分割槽表中交換出舊的分割槽資料。該資料從分割槽表中清除,而無需實際刪除,並可以在以後分別歸檔。
當你交換分割槽時,日誌屬性將被保留。你可以指定本地索引是否也進行交換(INCLUDING INDEXES子句),並且可以指定行是否以合適的對映進行驗證(WITH VALIDATION子句)。
注意:
當你給交換分割槽操作指定WITHOUT VALIDATION子句時,這通常是一個非常快速的操作,因為它只涉及到更新資料字典。但是,如果交換操作涉及到的表或者分割槽表啟用了主鍵或者唯一約束,那麼執行交換操作時會預設執行WITH VALIDATION選項來維持約束的完整性。
為了避免這種情況下驗證操作的開銷,在執行交換分割槽操作之前為每個約束執行以下語句:
點選(此處)摺疊或開啟
然後,在交換分割槽操作完成後,重新啟用約束。
如果你指定了WITHOUT VALIDATION,那麼你必須確保要交換的資料屬於你執行交換操作的分割槽。
除非你指定了UPDATE INDEXES,否則資料庫會將執行交換分割槽所屬表的全域性索引或者所有全域性索引分割槽標識為UNUSABLE。執行交換分割槽所屬表的全域性索引或者所有全域性索引分割槽仍然無效(你不能在索引組織表上使用UPDATE INDEXES,可以使用UPDATE GLOBAL INDEXES來代替)。
交換一個範圍、雜湊或列表分割槽
如果要拿一個非分割槽表和範圍分割槽、雜湊分割槽或者列表分割槽表的一個分割槽進行交換,可以使用ALTER TABLE ... EXCHANGE PARTITION語句;反之亦然。下面是將一個分割槽轉化為一個非分割槽表的例子。在這個例子中,表stocks可以是範圍分割槽、雜湊分割槽或者列表分割槽表。
點選(此處)摺疊或開啟
-
ALTER TABLE stocks
-
- EXCHANGE PARTITION p3 WITH TABLE stock_table_3;
交換間隔分割槽表的一個分割槽
你可以在一個間隔分割槽表中交換間隔分割槽。但是,你必須確保在交換分割槽之前該間隔分割槽已經建立。你可以讓資料庫透過鎖定間隔分割槽來建立分割槽。
下面的例子顯示了interval_sales分割槽表的一個分割槽交換,該間隔分割槽表以月為間隔,就像2004年1月1日。這個例子顯示瞭如何透過交換分割槽向該間隔分割槽表載入新增2007年6月份的資料。我們假設interval_sales表只有本地索引,並且表interval_sales_june_2007上等價的索引已經被建立。
點選(此處)摺疊或開啟
注意FOR語法的使用,是用來標識系統生成的一個分割槽。該分割槽名稱可用於透過查詢*_TAB_PARTITIONS資料字典檢視來查詢系統生成分割槽的名稱。
交換引用分割槽表的一個分割槽
你可以在一個引用分割槽表中交換分割槽,但是你必須確保在父表的相應分割槽中你引用的資料是可用的。
例4-30顯示了範圍分割槽表orders和引用分割槽表order_items的一個分割槽交換載入場景。注意order_items_dec_2006表的資料只包含order_date在2006月12月份的訂單的詳細資料。
點選(此處)摺疊或開啟
需要注意的是,你必須在父表的交換分割槽上使用UPDATE GLOBAL INDEXES或者UPDATE INDEXES,這樣可以確保主鍵索引保持可用。另外,也要注意你必須在order_items_dec_2006表上建立或者啟用外來鍵約束,以便在引用分割槽表上的分割槽交換可以執行成功。
交換表的一個分割槽和虛擬列
你可以在包含虛擬列的情況下進行交換分割槽。為了使包含虛擬列的分割槽表的分割槽交換成功,你必須建立一個表,該表需要匹配分表中一個分割槽的所有非虛擬列的定義。你並不需要包括虛擬列定義,除非虛擬列上定義的有約束或者索引。
在這種情況下,你必須包含虛擬列定義,用來匹配分割槽表的約束和索引定義。該方案也適用於基於虛擬列的分割槽表。
交換一個雜湊分割槽表和一個複合雜湊分割槽
在這個例子中,你交換的是一個雜湊分割槽表(包含所有分割槽)和一個複合雜湊分割槽表的分割槽(包含所有子分割槽)。下面的例子說明了一個範圍雜湊分割槽表的定義。
首先,建立一個雜湊分割槽表:
點選(此處)摺疊或開啟
填充該表後,建立一個範圍雜湊分割槽表,如下:
點選(此處)摺疊或開啟
其中,t1表的分割槽鍵等於t2表的子分割槽鍵,這一點很重要。
要將t1表的資料遷移到t2表,並且驗證行資料,使用以下語句:
點選(此處)摺疊或開啟
-
ALTER TABLE t2 EXCHANGE PARTITION p1 WITH TABLE t1
-
- WITH VALIDATION;
交換複合雜湊分割槽表的一個子分割槽
使用ALTER TABLE ... EXCHANGE SUBPARTITION語句將一個複合雜湊分割槽表的一個雜湊分割槽轉化為一個非分割槽表,反之亦然。下面的例子將sales表的子分割槽q3_1999_s1轉化為非分割槽表q3_1999。本地索引分割槽與分割槽q3_1999上相關的索引進行交換。
點選(此處)摺疊或開啟
交換一個列表分割槽表和一個複合列表分割槽
ALTER TABLE ... EXCHANGE PARTITION語句的含義和上面“交換一個雜湊分割槽表和一個複合雜湊分割槽”章節的描述是一樣的。下面的例子顯示了一個列表-列表分割槽表的分割槽交換方案。
點選(此處)摺疊或開啟
用亞太地區客戶填充該表,然後建立一個列表-列表分割槽表:
點選(此處)摺疊或開啟
接下來,交換apac分割槽:
點選(此處)摺疊或開啟
-
ALTER TABLE customers
-
-
EXCHANGE PARTITION apac
-
-
WITH TABLE customers_apac
-
- WITH VALIDATION;
交換複合列表分割槽表的一個子分割槽
ALTER TABLE ... EXCHANGE SUBPARTITION語句的含義和上面“交換複合雜湊分割槽表的一個子分割槽”章節的描述是一樣的。
交換一個範圍分割槽表和一個複合範圍分割槽
ALTER TABLE ... EXCHANGE PARTITION語句的含義和上面“交換一個雜湊分割槽表和一個複合雜湊分割槽”章節的描述是一樣的。下面的例子涉及到表orders,該表以order_date作為間隔分割槽鍵,並以列order_total作為範圍子分割槽鍵值。該例子顯示如何將一個單月間隔分割槽和一個範圍分割槽表進行交換。
點選(此處)摺疊或開啟
用2007年3月份的訂單資料填充該表,然後建立一個間隔-範圍複合分割槽表:
點選(此處)摺疊或開啟
接下來,交換分割槽。需要注意的是,由於要交換一個間隔分割槽,因此首先要鎖定該分割槽以確保該分割槽被建立。
點選(此處)摺疊或開啟
-
LOCK TABLE orders PARTITION FOR (TO_DATE('01-MAR-2007','dd-MON-yyyy'))
-
-
IN SHARE MODE;
-
-
-
ALTER TABLE orders
-
-
EXCHANGE PARTITION
-
-
FOR (TO_DATE('01-MAR-2007','dd-MON-yyyy'))
-
-
WITH TABLE orders_mar_2007
-
- WITH VALIDATION;
交換複合範圍分割槽表的一個子分割槽
ALTER TABLE ... EXCHANGE SUBPARTITION語句的含義和上面“交換複合雜湊分割槽表的一個子分割槽”章節的描述是一樣的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30162081/viewspace-1752163/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle11g維護分割槽(八)——Renaming PartitionsOracle
- Oracle11g維護分割槽(二)——Coalescing PartitionsOracle
- Oracle11g維護分割槽(三)——Dropping PartitionsOracle
- Oracle11g維護分割槽(九)——Truncatinging PartitionsOracle
- Oracle11g維護分割槽(五)——Merging PartitionsOracle
- Oracle11g維護分割槽(一)——Adding PartitionsOracle
- Oracle11g維護分割槽(七)——Modifying Real Attributes of PartitionsOracle
- Oracle11g維護分割槽概述Oracle
- oracle分割槽及分割槽索引partition_partition index_維護(四)Oracle索引Index
- Oracle11g維護分割槽(六)——Modifying Default AttributesOracle
- oracle分割槽表的維護Oracle
- 【轉】Oracle分割槽表維護Oracle
- Oracle分割槽表基礎運維-08Coalescing PartitionsOracle運維
- 分割槽索引維護(add partition)索引
- 測試oracle子分割槽維護Oracle
- oracle分割槽及分割槽索引partition_partition index_維護(一)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(二)Oracle索引Index
- oracle分割槽及分割槽索引partition_partition index_維護(三)Oracle索引Index
- Oracle11g INTERVAL分割槽新增分割槽策略Oracle
- 海量資料處理_表分割槽(分割槽自動維護與歷史分割槽歸檔)
- ORACLE分割槽表梳理系列(二)- 分割槽表日常維護及注意事項Oracle
- oracle分割槽及分割槽索引partition_partition index_維護(五)_快捷方法Oracle索引Index
- 關於 Oracle 分割槽索引的建立和維護Oracle索引
- 在範圍分割槽表上分割槽維護操作對索引狀態的影響索引
- 在範圍分割槽表上分割槽維護操作對索引狀態的影響(1)索引
- 【學習筆記】分割槽表和分割槽索引——管理索引分割槽(四)筆記索引
- 【eygle】Oracle的分割槽表和Local索引建立與維護Oracle索引
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- Oracle分割槽表基礎運維-02範圍分割槽Oracle運維
- Oracle分割槽表基礎運維-03HASH分割槽Oracle運維
- Oracle分割槽表基礎運維-05組合分割槽Oracle運維
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- Oracle分割槽表基礎運維-09刪除分割槽Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- 【Linux】MBR磁碟分割槽表只能有四個分割槽?Linux
- 在範圍分割槽表上分割槽維護操作對全域性及本地索引狀態的影響(2)索引
- Oracle分割槽表基礎運維-01分割槽表分類Oracle運維