oracle列表分區ADD VALUES或DROP VALUES包含資料變化

來源:互聯網
上載者:User

在介紹ADD VALUES和DROP VALUES語句的時候提到過,ADD VALUES和DROP VALUES只是資料字典上的變更,並不涉及資料的變化。因此如果ADD VALUES或DROP VALUES語句執行時,新增或刪除的索引值在資料庫中已經存在,則會報錯。

仍然借用上一篇文章中的例子:

SQL> CREATE TABLE T_PART_LIST

2  (

3     OWNER VARCHAR2(30),

4     NAME VARCHAR2(30),

5     TABLESPACE_NAME VARCHAR2(30),

6     TYPE VARCHAR2(18)

7  )

8  PARTITION BY LIST (TABLESPACE_NAME)

9  (

10  PARTITION P1 VALUES ('SYSTEM'),

11  PARTITION P2 VALUES ('YANGTK'),

12  PARTITION P3 VALUES ('USERS'),

13  PARTITION P4 VALUES (DEFAULT)

14  );

表已建立。

SQL> INSERT INTO T_PART_LIST

2  SELECT OWNER, SEGMENT_NAME, TABLESPACE_NAME, SEGMENT_TYPE

3  FROM DBA_SEGMENTS;

已建立5628行。

SQL> COMMIT;

提交完成。

一般來說,我們不會執行下面的這種SQL:

SQL> ALTER TABLE T_PART_LIST

2  MODIFY PARTITION P2

3  ADD VALUES ('USERS');

ALTER TABLE T_PART_LIST

*

第1行出現錯誤:

ORA-14312:值'USERS'已經存在於分區3中

顯然索引值’USERS’對應的是另一個分區,這時只需要進行MERGE PARTITIONS操作就可以了:

SQL> ALTER TABLE T_PART_LIST

2  MERGE PARTITIONS P2, P3

3  INTO PARTITION P2;

表已更改。

SQL>COLTABLE_NAME FORMAT A15

SQL>COLPARTITION_NAME FORMAT A15

SQL>COLHIGH_VALUE FORMAT A30

SQL> SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE

2  FROM USER_TAB_PARTITIONS

3  WHERE TABLE_NAME = 'T_PART_LIST';

TABLE_NAME      PARTITION_NAME  HIGH_VALUE

--------------- --------------- ------------------------------

T_PART_LIST     P1              'SYSTEM'

T_PART_LIST     P2              'USERS', 'YANGTK'

T_PART_LIST     P4              DEFAULT

這種ADD VALUES的需求很容易解決。更容易出現的需求類型下面的SQL:

SQL> ALTER TABLE T_PART_LIST

2  MODIFY PARTITION P1

3  ADD VALUES ('SYSAUX');

ALTER TABLE T_PART_LIST

  *

第1行出現錯誤:

ORA-14324:所要添加的值已存在於DEFAULT分區之中

SQL> SELECT DISTINCT TABLESPACE_NAME

2  FROM T_PART_LIST PARTITION (P4);

TABLESPACE_NAME

------------------------------

SYSAUX

UNDOTBS1

對於這種情況,就沒有辦法使用一個SQL來完成操作了,需要先對DEFAULT分區進行SPLIT,然後再進行MERGE:

SQL> ALTER TABLE T_PART_LIST

2  SPLIT PARTITION FOR('SYSAUX')

3  VALUES ('SYSAUX')

4  INTO (PARTITION P3, PARTITION P4);

表已更改。

SQL> ALTER TABLE T_PART_LIST

2  MERGE PARTITIONS FOR('SYSTEM'), FOR('SYSAUX')

3  INTO PARTITION P1;

表已更改。

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.