<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    tbwshc

    HASH分區新增分區對索引狀態的影響

    一直認為Oracle對于所有分區的操作都是一樣的,只有數據的改變才會導致分區狀態的失效,沒想到HASH分區的實現方式并不相同。

    HASH分區表增加新的分區的一點研究: 

     

    看一個范圍分區SPLIT的例子:

    SQL> CREATE TABLE T_PART
     2 (ID NUMBER, NAME VARCHAR2(30))
     3 PARTITION BY RANGE (ID)
     4 (PARTITION P1 VALUES LESS THAN (10),
     5 PARTITION PMAX VALUES LESS THAN (MAXVALUE));

    Table created.

    SQL> INSERT INTO T_PART
     2 SELECT ROWNUM, TNAME 
     3 FROM TAB;

    12 rows created.

    SQL> CREATE INDEX IND_T_PART_ID ON T_PART(ID) LOCAL;

    Index created.tb

    SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS
     2 FROM USER_IND_PARTITIONS
     3 WHERE INDEX_NAME = 'IND_T_PART_ID';

    INDEX_NAME                     PARTITION_NAME                 STATUS
    ------------------------------ ------------------------------ --------
    IND_T_PART_ID                  P1                             USABLE
    IND_T_PART_ID                  PMAX                           USABLE

    SQL> SELECT COUNT(*) FROM T_PART PARTITION (PMAX);

     COUNT(*)
    ----------
             3

    SQL> ALTER TABLE T_PART SPLIT PARTITION PMAX AT (20)
     2 INTO (PARTITION P2, PARTITION P3);

    Table altered.

    SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS
     2 FROM USER_IND_PARTITIONS
     3 WHERE INDEX_NAME = 'IND_T_PART_ID';

    INDEX_NAME                     PARTITION_NAME                 STATUS
    ------------------------------ ------------------------------ --------
    IND_T_PART_ID                  P2                             USABLE
    IND_T_PART_ID                  P3                             USABLE
    IND_T_PART_ID                  P1                             USABLE

    可以看到,對于范圍分區而言,即使是SPLIT包含數據的分區,只要沒有真正導致數據發生變化,就不會導致索引的失效。這里將PMAX分區SPLIT成P2和P3兩個分區,其中PMAX中的所有數據都進入P2分區,而P3分區為空,這種情況下沒有數據的改變,因此所有分區索引的狀態都不會變為UNUSABLE。

    但是HASH分區的ADD PARTITION并沒有遵守這個規則,事實上對于每次ADD分區,都會導致一個分區的數據發生分裂,而分裂的結果不管原分區的數據是否發生變化,都會導致原分區索引狀態變為UNUSABLE,至于新增分區的索引狀態,則取決于是否有數據的改變。

    SQL> CREATE TABLE T_HASH
     2 (ID NUMBER)
     3 PARTITION BY HASH (ID)
     4 (PARTITION P1,
     5 PARTITION P2,
     6 PARTITION P3,
     7 PARTITION P4);

    Table created.

    SQL> CREATE INDEX IND_T_HASH_ID ON T_HASH(ID) LOCAL;

    Index created.

    SQL> INSERT INTO T_HASH SELECT ROWNUM FROM TAB;

    12 rows created.

    SQL> COMMIT;

    Commit complete.

    SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS
     2 FROM USER_IND_PARTITIONS
     3 WHERE INDEX_NAME = 'IND_T_HASH_ID';

    INDEX_NAME                     PARTITION_NAME                 STATUS
    ------------------------------ ------------------------------ --------
    IND_T_HASH_ID                  P1                             USABLE
    IND_T_HASH_ID                  P2                             USABLE
    IND_T_HASH_ID                  P3                             USABLE
    IND_T_HASH_ID                  P4                             USABLE

    SQL> SELECT * FROM T_HASH PARTITION (P1);

            ID
    ----------
             6
            11

    SQL> SELECT * FROM T_HASH PARTITION (P2);

            ID
    ----------
             9
            10
            12

    SQL> SELECT * FROM T_HASH PARTITION (P3);

            ID
    ----------
             2
             5
             8

    SQL> SELECT * FROM T_HASH PARTITION (P4);

            ID
    ----------
             1
             3
             4
             7

    下面新增一個PARTITION P5:

    SQL> ALTER TABLE T_HASH ADD PARTITION P5;

    Table altered.

    SQL> SELECT * FROM T_HASH PARTITION (P5);

    no rows selected

    SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS
     2 FROM USER_IND_PARTITIONS
     3 WHERE INDEX_NAME = 'IND_T_HASH_ID';

    INDEX_NAME                     PARTITION_NAME                 STATUS
    ------------------------------ ------------------------------ --------
    IND_T_HASH_ID                  P5                             USABLE
    IND_T_HASH_ID                  P1                             UNUSABLE
    IND_T_HASH_ID                  P2                             USABLE
    IND_T_HASH_ID                  P3                            USABLE
    IND_T_HASH_ID                  P4                             USABLE

    新增的PARTITION P5中并沒有任何的數據,也就是說沒有任何的數據從P1遷移到P5中,但是查詢分區索引的狀態發現,P1對應的分區索引狀態已經變為UNUSABLE。這和范圍分區的處理方式完全不同。而P5分區由于沒有任何數據,因此分區狀態是USABLE。

    SQL> ALTER TABLE T_HASH ADD PARTITION P6;

    Table altered.

    SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS
     2 FROM USER_IND_PARTITIONS
     3 WHERE INDEX_NAME = 'IND_T_HASH_ID';

    INDEX_NAME                     PARTITION_NAME                 STATUS
    ------------------------------ ------------------------------ --------
    IND_T_HASH_ID                  P5                             USABLE
    IND_T_HASH_ID                  P6                             UNUSABLE
    IND_T_HASH_ID                  P1                             UNUSABLE
    IND_T_HASH_ID                  P2                             UNUSABLE
    IND_T_HASH_ID                  P3                             USABLE
    IND_T_HASH_ID                  P4                             USABLE

    6 rows selected.

    SQL> DELETE T_HASH WHERE ID = 5;        

    1 row deleted.

    SQL> COMMIT;

    Commit complete.

    SQL> ALTER TABLE T_HASH ADD PARTITION P7;

    Table altered.

    SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS
     2 FROM USER_IND_PARTITIONS
     3 WHERE INDEX_NAME = 'IND_T_HASH_ID';

    INDEX_NAME                     PARTITION_NAME                 STATUS
    ------------------------------ ------------------------------ --------
    IND_T_HASH_ID                  P5                             USABLE
    IND_T_HASH_ID                  P6                             UNUSABLE
    IND_T_HASH_ID                  P7                             UNUSABLE
    IND_T_HASH_ID                  P1                             UNUSABLE
    IND_T_HASH_ID                  P2                             UNUSABLE
    IND_T_HASH_ID                  P3                             UNUSABLE
    IND_T_HASH_ID                  P4                             USABLE

    7 rows selected.

    SQL> SELECT * FROM T_HASH PARTITION (P3);

    no rows selected

    SQL> SELECT * FROM T_HASH PARTITION (P7);

            ID
    ----------
             2
             8

    為了更好的說明這個問題,在增加PARTITION P7之前,刪除了ID為5的記錄,這是增加分區后可以發現,原有的P3已經不包含任何的數據,全部的記錄都進入到新增的P7分區,但是無論是P3還是P7,狀態都是UNUSABLE。這證明了前面提到的,只要是新增HASH分區,就會導致源分區索引狀態變為UNUSABLE,除非是一種情況:源分區本身就沒有數據:

    SQL> ALTER TABLE T_HASH ADD PARTITION P8;

    Table altered.

    SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS                         
     2 FROM USER_IND_PARTITIONS
     3 WHERE INDEX_NAME = 'IND_T_HASH_ID';

    INDEX_NAME                     PARTITION_NAME                 STATUS
    ------------------------------ ------------------------------ --------
    IND_T_HASH_ID                  P5                             USABLE
    IND_T_HASH_ID                  P6                             UNUSABLE
    IND_T_HASH_ID                  P7                             UNUSABLE
    IND_T_HASH_ID                  P1                             UNUSABLE
    IND_T_HASH_ID                  P2                             UNUSABLE
    IND_T_HASH_ID                  P3                             UNUSABLE
    IND_T_HASH_ID                  P4                             USABLE
    IND_T_HASH_ID                  P8                             USABLE

    8 rows selected.

    事實上,對于HASH分區的ADD PARTITION操作,Oracle基本上還是秉承了沒有數據變化就不會導致索引失效的思路。唯一的差別在于,對于源分區包含記錄的情況,Oracle并沒有最后去驗證,是否真的發生了數據的遷移。

    posted on 2012-09-05 11:43 chen11-1 閱讀(1260) 評論(0)  編輯  收藏

    主站蜘蛛池模板: 中文字幕精品无码亚洲字| 四虎成人免费大片在线| 亚洲乱码无码永久不卡在线| 免费视频淫片aa毛片| 精品国产一区二区三区免费看| 老湿机一区午夜精品免费福利| 精品特级一级毛片免费观看| 精品久久久久久无码免费| 最近2019中文字幕免费大全5| 免费影院未满十八勿进网站| 亚洲午夜视频在线观看| 亚洲 日韩 色 图网站| 在线观看视频免费完整版| 涩涩色中文综合亚洲| 日本免费一区二区三区最新| 羞羞漫画小舞被黄漫免费| 国产a v无码专区亚洲av| 亚洲精品无码人妻无码| 午夜色a大片在线观看免费| 免费福利在线观看| 色窝窝免费一区二区三区| 亚洲av最新在线观看网址| 免费精品国产自产拍观看| 国产精品午夜免费观看网站| 久久夜色精品国产亚洲AV动态图 | 亚洲熟妇AV一区二区三区宅男| 色多多A级毛片免费看| 国产精品视频免费观看| 亚洲成aⅴ人片久青草影院按摩| APP在线免费观看视频| 吃奶摸下高潮60分钟免费视频| 国产免费直播在线观看视频| 国产精品无码免费专区午夜| 亚洲精品美女在线观看| 日韩一区二区免费视频| 中文字幕在线观看免费| 亚洲一级毛片视频| 99国产精品视频免费观看| 亚洲精品无码一区二区| 亚洲av无码片在线播放| 中文字幕在线观看免费|