Oracle11g維護分割槽(五)——Merging Partitions
合併分割槽
使用ALTER TABLE ... MERGE PARTITION語句將兩個分割槽的內容合併到一個分割槽。原來的兩個分割槽將會被刪除,相關的本地索引也會被刪除。對於雜湊分割槽表或者複合雜湊分割槽表的雜湊子分割槽,你不能使用這個語句。
對於引用分割槽表,你不能合併分割槽。相反,父表的合併操作會級聯到所有子表。儘管如此,當你在父表執行合併分割槽或者子分割槽操作時,你也可以使用DEPENDENT TABLES子句來為相關表設定特定屬性。
如果涉及到的分割槽或者子分割槽包含資料,那麼索引可能被標識為UNUSABLE,如下表所述:
表型別 |
索引操作 |
普通表(堆表) |
除非你在ALTER TABLE語句中指定UPDATE INDEXES字句: l 資料庫將生成的所有相關本地索引分割槽或者子分割槽標識為UNUSABLE。 l 全域性索引,或者分割槽全域性索引的所有分割槽,被標識為UNUSABLE,必須重建。 |
索引組織表 |
l 生成的所有相關本地索引分割槽標識為UNUSABLE。 l 所有全域性索引保持可用。 |
合併範圍分割槽
你可以將兩個相鄰的範圍分割槽的內容合併到一個分割槽。不相鄰的範圍分割槽不能合併。合併生成的分割槽繼承了這兩個合併分割槽中更高的上限。
合併範圍分割槽的一個原因是保持線上歷史資料在較大的分割槽。例如,你可以有每日分割槽,然後將最舊的分割槽聚合為周分割槽,進而周分割槽可以聚合為月分割槽,等等。
例4-31顯示了一個合併範圍分割槽的例子。
例4-31 合併範圍分割槽
點選(此處)摺疊或開啟
- -- First, create a partitioned table with four partitions, each on its own
-
-- tablespace partitioned by range on the data column
-
--
-
CREATE TABLE four_seasons
-
(
-
one DATE,
-
two VARCHAR2(60),
-
three NUMBER
-
)
-
PARTITION BY RANGE ( one )
-
(
-
PARTITION quarter_one
-
VALUES LESS THAN ( TO_DATE('01-apr-1998','dd-mon-yyyy'))
-
TABLESPACE quarter_one,
-
PARTITION quarter_two
-
VALUES LESS THAN ( TO_DATE('01-jul-1998','dd-mon-yyyy'))
-
TABLESPACE quarter_two,
-
PARTITION quarter_three
-
VALUES LESS THAN ( TO_DATE('01-oct-1998','dd-mon-yyyy'))
-
TABLESPACE quarter_three,
-
PARTITION quarter_four
-
VALUES LESS THAN ( TO_DATE('01-jan-1999','dd-mon-yyyy'))
-
TABLESPACE quarter_four
-
);
-
--
-
-- Create local PREFIXED index on Four_Seasons
-
-- Prefixed because the leftmost columns of the index match the
-
-- Partitioning key
-
--
-
CREATE INDEX i_four_seasons_l ON four_seasons ( one,two )
-
LOCAL (
-
PARTITION i_quarter_one TABLESPACE i_quarter_one,
-
PARTITION i_quarter_two TABLESPACE i_quarter_two,
-
PARTITION i_quarter_three TABLESPACE i_quarter_three,
-
PARTITION i_quarter_four TABLESPACE i_quarter_four
-
);
-
-
-- Next, merge the first two partitions
-
ALTER TABLE four_seasons
-
MERGE PARTITIONS quarter_one, quarter_two INTO PARTITION quarter_two
- UPDATE INDEXES;
點選(此處)摺疊或開啟
-
-- Rebuild index for quarter_two, which has been marked unusable
-
-- because it has not had all of the data from Q1 added to it.
-
-- Rebuilding the index corrects this.
-
--
-
ALTER TABLE four_seasons MODIFY PARTITION
- quarter_two REBUILD UNUSABLE LOCAL INDEXES;
合併間隔分割槽
你可以將兩個相鄰的間隔分割槽的內容合併到一個分割槽。不相鄰的間隔分割槽不能合併。第一個間隔分割槽也能喝最高的範圍分割槽進行合併。合併生成的分割槽繼承了這兩個合併分割槽中更高的上限。
合併間隔分割槽總是導致轉換點移動到這兩個合併分割槽中更高的上限。結果是間隔分割槽表的範圍分割槽擴充套件到這兩個合併分割槽中更高的上限。任何邊界低於新合併生成分割槽的物化間隔分割槽,都會自動轉化到範圍分割槽,並且使用它們的間隔分割槽上限定義作為範圍分割槽上限。
例如,考慮一下間隔分割槽transactions:
點選(此處)摺疊或開啟
-
CREATE TABLE transactions
-
( id NUMBER
-
, transaction_date DATE
-
, value NUMBER
-
)
-
PARTITION BY RANGE (transaction_date)
-
INTERVAL (NUMTODSINTERVAL(1,'DAY'))
- ( PARTITION p_before_2007 VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy')));
點選(此處)摺疊或開啟
-
INSERT INTO transactions VALUES (1,TO_DATE('15-JAN-2007','dd-MON-yyyy'),100);
-
INSERT INTO transactions VALUES (2,TO_DATE('16-JAN-2007','dd-MON-yyyy'),600);
- INSERT INTO transactions VALUES (3,TO_DATE('30-JAN-2007','dd-MON-yyyy'),200);
點選(此處)摺疊或開啟
-
ALTER TABLE transactions
-
MERGE PARTITIONS FOR(TO_DATE('15-JAN-2007','dd-MON-yyyy'))
- , FOR(TO_DATE('16-JAN-2007','dd-MON-yyyy'));
合併列表分割槽
當你合併列表分割槽時,本合併的分割槽可以是任意兩個分割槽。它們不必像範圍分割槽那樣必須是相鄰的,因為列表分割槽預設是沒有順序的。生成的分割槽由原來兩個分割槽的資料組成。如果你將預設分割槽和其他分割槽進行合併,那麼新生成的分割槽是預設分割槽。
下面的語句合併了一個列表分割槽表的兩個分割槽,新生成的分割槽繼承了所有表級別的預設屬性。語句指定了MAXEXTENTS子句。
點選(此處)摺疊或開啟
-
ALTER TABLE q1_sales_by_region
-
MERGE PARTITIONS q1_northcentral, q1_southcentral
-
INTO PARTITION q1_central
-
STORAGE(MAXEXTENTS 20);
-
原來的兩個分割槽的值列表如下:
-
PARTITION q1_northcentral VALUES ('SD','WI')
-
PARTITION q1_southcentral VALUES ('OK','TX')
-
由此生成的sales_west分割槽值列表包括這兩個分割槽值列表的集合,更具體的說:
- ('SD','WI','OK','TX')
合併複合雜湊分割槽
當你合併複合雜湊分割槽時,子分割槽會根據雜湊函式重新分佈到由SUBPARTITIONS n或者SUBPARTITIONS子句指定數量的分割槽。如果兩個都沒有指定,那麼就使用表級別的預設值。
需要注意的是,分割一個複合雜湊分割槽(在“分割一個複合雜湊分割槽”章節討論)和合並兩個複合雜湊分割槽,在屬性的繼承方面是不一樣的。當一個分割槽被分割時,新的分割槽可以繼承原分割槽的屬性,因為只有一個父節點。但是,當合並分割槽時,必須繼承表級別屬性。
對於間隔雜湊分割槽表,你只能合併兩個相鄰的間隔分割槽,或者時最高範圍分割槽和第一個間隔分割槽。如“合併間隔分割槽”所述,當你在間隔雜湊分割槽表合併分割槽時,轉換點時會移動的。
下面的例子合併了兩個範圍雜湊分割槽:
點選(此處)摺疊或開啟
-
ALTER TABLE all_seasons
-
MERGE PARTITIONS quarter_1, quarter_2 INTO PARTITION quarter_2
- SUBPARTITIONS 8;
合併複合列表分割槽
你可以在分割槽級別合併分割槽,也可以在列表子分割槽級別合併子分割槽。
在一個複合列表分割槽表中合併分割槽
在複合列表分割槽表中合併分割槽如前面所論述的“合併範圍分割槽”。但是,當你合併兩個複合列表分割槽時,生成的新分割槽將繼承子分割槽模版的子分割槽描述,前提是該模版存在。如果不存在子分割槽模版,那麼將為新分割槽建立一個預設子分割槽。
對於間隔雜湊分割槽表,你只能合併兩個相鄰的間隔分割槽,或者時最高範圍分割槽和第一個間隔分割槽。如“合併間隔分割槽”所述,當你在間隔雜湊分割槽表合併分割槽時,轉換點時會移動的。
下面的語句合併了範圍列表分割槽表stripe_regional_sales的兩個分割槽。該表存在一個子分割槽模版。
點選(此處)摺疊或開啟
-
ALTER TABLE stripe_regional_sales
-
MERGE PARTITIONS q1_1999, q2_1999 INTO PARTITION q1_q2_1999
- STORAGE(MAXEXTENTS 20);
新生成分割槽的資料由兩個分割槽的資料組成。但是,可能存在資料庫返回錯誤的情況。這個之所以會發生,可能是因為當同時滿足下列條件時,資料可能會對映到新分割槽之外:
l 合併後子分割槽的一些值可能並不屬於子分割槽模版。
l 子分割槽模版不包含預設分割槽定義。
我們可以透過在預設子分割槽模版中指定一個預設分割槽來消除這個錯誤條件。
在一個複合列表分割槽表中合併子分割槽
你可以合併同一分割槽中的任意兩個列表子分割槽的內容。由此生成的子分割槽值列表描述包括所有被合併分割槽的值。
下面的語句合併了範圍列表分割槽表的兩個子分割槽,並將新生成的子分割槽儲存到表空間ts4:
點選(此處)摺疊或開啟
原始的兩個分割槽的值列表如下:
l 子分割槽q1_1999_northwest被描述為('WA','OR')
l 子分割槽q1_1999_southwest被描述為('AZ','NM','UT')
新生成子分割槽的值列表由上述兩個子分割槽值列表的合集構成:
l 子分割槽q1_1999_west被描述為('WA','OR','AZ','NM','UT')
新生成子分割槽的儲存表空間以及子分割槽屬性都由分割槽級別的預設屬性決定,除非你顯式地指定。
如果任何現有地子分割槽名稱被重複使用,那麼新生成子分割槽將會繼承名稱被重複使用子分割槽的屬性。
合併複合範圍分割槽
你可以在分割槽級別合併分割槽,也可以在範圍子分割槽級別合併子分割槽。
在一個複合範圍分割槽表中合併分割槽
在複合範圍分割槽表中合併分割槽如前面所論述的“合併範圍分割槽”。但是,當你合併兩個複合範圍分割槽時,生成的新分割槽將繼承子分割槽模版的子分割槽描述,前提是該模版存在。如果不存在子分割槽模版,那麼將會建立一個上限邊界是MAXVALUE的新分割槽。
對於間隔範圍分割槽表,你只能合併兩個相鄰的間隔分割槽,或者時最高範圍分割槽和第一個間隔分割槽。如“合併間隔分割槽”所述,當你在間隔雜湊分割槽表合併分割槽時,轉換點時會移動的。
下面的語句合併了月份間隔範圍分割槽表orders的兩個分割槽。該表存在一個子分割槽模版。
點選(此處)摺疊或開啟
-
ALTER TABLE orders
-
MERGE PARTITIONS FOR(TO_DATE('01-MAR-2007','dd-MON-yyyy')),
-
FOR(TO_DATE('01-APR-2007','dd-MON-yyyy'))
- INTO PARTITION p_pre_may_2007;
對於分割槽p_pre_may_2007而言,所有子分割槽都將從子分割槽模版中繼承他們的屬性。新生成分割槽的資料由兩個分割槽的資料組成。但是,可能存在資料庫返回錯誤的情況。這個之所以會發生,可能是因為當同時滿足下列條件時,資料可能會對映到新分割槽之外:
l 合併後子分割槽的一些值可能並不屬於子分割槽模版。
l 子分割槽模版不包含一個上限邊界值為MAXVALUE的子分割槽定義。
我們可以透過在子分割槽模版中指定一個上限邊界值為MAXVALUE的子分割槽來消除這個錯誤條件。來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30162081/viewspace-1753566/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle11g維護分割槽(八)——Renaming PartitionsOracle
- Oracle11g維護分割槽(四)——Exchanging PartitionsOracle
- Oracle11g維護分割槽(二)——Coalescing PartitionsOracle
- Oracle11g維護分割槽(三)——Dropping PartitionsOracle
- Oracle11g維護分割槽(九)——Truncatinging PartitionsOracle
- Oracle11g維護分割槽(一)——Adding PartitionsOracle
- Oracle11g維護分割槽(七)——Modifying Real Attributes of PartitionsOracle
- Oracle11g維護分割槽概述Oracle
- Oracle11g維護分割槽(六)——Modifying Default AttributesOracle
- oracle分割槽及分割槽索引partition_partition index_維護(五)_快捷方法Oracle索引Index
- 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
- oracle分割槽及分割槽索引partition_partition index_維護(四)Oracle索引Index
- Oracle11g INTERVAL分割槽新增分割槽策略Oracle
- 海量資料處理_表分割槽(分割槽自動維護與歷史分割槽歸檔)
- ORACLE分割槽表梳理系列(二)- 分割槽表日常維護及注意事項Oracle
- 關於 Oracle 分割槽索引的建立和維護Oracle索引
- 在範圍分割槽表上分割槽維護操作對索引狀態的影響索引
- 在範圍分割槽表上分割槽維護操作對索引狀態的影響(1)索引
- Oracle分割槽之五:建立分割槽索引總結Oracle索引
- 【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運維
- 在範圍分割槽表上分割槽維護操作對全域性及本地索引狀態的影響(2)索引
- Oracle分割槽表基礎運維-01分割槽表分類Oracle運維
- Oracle分割槽表基礎運維-04列表分割槽Oracle運維