暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

本地分区索引如何确定表空间

原创 yangtingkun 2020-02-07
1068

表和索引建立的时候如果不指定表空间,会建立在用户的默认表空间中。对于分区表和分区索引,则确定建立的表空间的规则要复杂一些,本文进行简单的总结。
分区表的分区增加分区如果不指定表空间,会根据分区表的默认表空间,如果分区表没有指定默认表空间,则建立在用户的默认表空间上。参考例一。
复合分区表增加子分区如果不指定表空间,会根据分区上的默认表空间,如果分区上没有指定,则根据表上面的默认表空间,如果表上也没有指定,则建立在用户的默认表空间上。参考例二。
分区索引的情况比分区还要复杂一些。由于本地索引会随着增加分区的操作自动增加,因此,无法明确的为这个索引分区指定表空间。如果在建立分区索引时,没有给出默认表空间,那么新增的索引分区所在表空间和新增表分区所在表空间保持一致。参考例三。
复合分区索引的情况和分区索引类似。当复合分区表增加子分区时,如果复合分区索引给出了分区默认表空间,则新建的索引子分区建立在索引分区默认表空间上,如果分区一级没有明确致命默认表空间,则依据索引一级的默认表空间创建新子分区,如果索引一级仍然没有设置明确设置表空间,则索引子分区的表空间和表中子分区的表空间保持一致。参考例四。

例一:分区表增加分区

SQL> SELECT DEFAULT_TABLESPACE FROM USER_USERS;
DEFAULT_TABLESPACE
------------------------------
YANGTK
SQL> CREATE TABLE TEST (ID NUMBER)
  2  TABLESPACE USERS
  3  PARTITION BY RANGE (ID)
  4  (
  5   PARTITION P1 VALUES LESS THAN (100)
  6   TABLESPACE TEST
  7  );
表已创建。
SQL> CREATE TABLE TEST1 (ID NUMBER)
  2  PARTITION BY RANGE (ID)
  3  (
  4   PARTITION P1 VALUES LESS THAN (100)
  5   TABLESPACE TEST
  6  );
表已创建。
SQL> ALTER TABLE TEST ADD PARTITION P2 VALUES LESS THAN (200);
表已更改。
SQL> ALTER TABLE TEST1 ADD PARTITION P2 VALUES LESS THAN (200);
表已更改。
SQL> SELECT TABLE_NAME, TABLESPACE_NAME FROM USER_TAB_PARTITIONS
  2  WHERE PARTITION_NAME = 'P2';
TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
TEST                           USERS
TEST1                          YANGTK
SQL> DROP TABLE TEST;
表已丢弃。
SQL> DROP TABLE TEST1;
表已丢弃。



例二:复合分区表增加子分区

SQL> SELECT DEFAULT_TABLESPACE FROM USER_USERS;
DEFAULT_TABLESPACE
------------------------------
YANGTK
SQL> CREATE TABLE TEST (TIME DATE, STATE VARCHAR2(10))
  2  TABLESPACE TOOLS
  3  PARTITION BY RANGE (TIME) SUBPARTITION BY LIST (STATE)
  4  (
  5   PARTITION P1 VALUES LESS THAN (TO_DATE('2004-1-1', 'YYYY-MM-DD'))
  6   TABLESPACE USERS
  7   (
  8    SUBPARTITION SP1 VALUES ('BJ')
  9    TABLESPACE TEST
 10   )
 11  )
 12  ;
表已创建。
SQL> CREATE TABLE TEST1 (TIME DATE, STATE VARCHAR2(10))
  2  TABLESPACE TOOLS
  3  PARTITION BY RANGE (TIME) SUBPARTITION BY LIST (STATE)
  4  (
  5   PARTITION P1 VALUES LESS THAN (TO_DATE('2004-1-1', 'YYYY-MM-DD'))
  6   (
  7    SUBPARTITION SP1 VALUES ('BJ')
  8    TABLESPACE TEST
  9   )
 10  )
 11  ;
表已创建。
SQL> CREATE TABLE TEST2 (TIME DATE, STATE VARCHAR2(10))
  2  PARTITION BY RANGE (TIME) SUBPARTITION BY LIST (STATE)
  3  (
  4   PARTITION P1 VALUES LESS THAN (TO_DATE('2004-1-1', 'YYYY-MM-DD'))
  5   (
  6    SUBPARTITION SP1 VALUES ('BJ')
  7    TABLESPACE TEST
  8   )
  9  )
 10  ;
表已创建。
SQL> ALTER TABLE TEST MODIFY PARTITION P1 ADD SUBPARTITION SP2 VALUES ('SH');
表已更改。
SQL> ALTER TABLE TEST1 MODIFY PARTITION P1 ADD SUBPARTITION SP2 VALUES ('SH');
表已更改。
SQL> ALTER TABLE TEST2 MODIFY PARTITION P1 ADD SUBPARTITION SP2 VALUES ('SH');
表已更改。
SQL> SELECT TABLE_NAME, TABLESPACE_NAME FROM USER_TAB_SUBPARTITIONS 
  2  WHERE SUBPARTITION_NAME = 'SP2';
TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
TEST                           USERS
TEST1                          TOOLS
TEST2                          YANGTK
SQL> DROP TABLE TEST;
表已丢弃。
SQL> DROP TABLE TEST1;
表已丢弃。
SQL> DROP TABLE TEST2;
表已丢弃。

例三:本地索引分区

SQL> SELECT DEFAULT_TABLESPACE FROM USER_USERS;
DEFAULT_TABLESPACE
------------------------------
YANGTK
SQL> CREATE TABLE TEST (ID NUMBER, NAME VARCHAR2(30))
  2  TABLESPACE USERS
  3  PARTITION BY RANGE (ID)
  4  (
  5   PARTITION P1 VALUES LESS THAN (100)
  6   TABLESPACE TEST
  7  );
表已创建。
SQL> CREATE TABLE TEST1 (ID NUMBER, NAME VARCHAR2(30))
  2  PARTITION BY RANGE (ID)
  3  (
  4   PARTITION P1 VALUES LESS THAN (100)
  5   TABLESPACE TEST
  6  );
表已创建。
SQL> CREATE INDEX IND_TEST_1 ON TEST (ID) LOCAL;
索引已创建。
SQL> CREATE INDEX IND_TEST_2 ON TEST (NAME) 
  2  TABLESPACE INDX LOCAL;
索引已创建。
SQL> CREATE INDEX IND_TEST1_1 ON TEST1 (ID) LOCAL;
索引已创建。
SQL> CREATE INDEX IND_TEST1_2 ON TEST1 (NAME) 
  2  TABLESPACE INDX LOCAL;
索引已创建。
SQL> ALTER TABLE TEST ADD PARTITION P2 VALUES LESS THAN (200);
表已更改。
SQL> ALTER TABLE TEST1 ADD PARTITION P2 VALUES LESS THAN (200);
表已更改。
SQL> SELECT TABLE_NAME, TABLESPACE_NAME FROM USER_TAB_PARTITIONS
  2  WHERE PARTITION_NAME = 'P2';
TABLE_NAME           TABLESPACE_NAME
-------------------- --------------------
TEST                 USERS
TEST1                YANGTK
SQL> SELECT TABLE_NAME, A.INDEX_NAME, A.TABLESPACE_NAME 
  2  FROM USER_IND_PARTITIONS A, USER_INDEXES B
  3  WHERE PARTITION_NAME = 'P2'
  4  AND A.INDEX_NAME = B.INDEX_NAME
  5  ORDER BY 1, 2;
TABLE_NAME           INDEX_NAME           TABLESPACE_NAME
-------------------- -------------------- --------------------
TEST                 IND_TEST_1           USERS
TEST                 IND_TEST_2           INDX
TEST1                IND_TEST1_1          YANGTK
TEST1                IND_TEST1_2          INDX
SQL> DROP TABLE TEST;
表已丢弃。
SQL> DROP TABLE TEST1;
表已丢弃。

例四:复合分区索引

SQL> SELECT DEFAULT_TABLESPACE FROM USER_USERS;
DEFAULT_TABLESPACE
------------------------------
YANGTK
SQL> CREATE TABLE TEST (ID NUMBER, TIME DATE, STATE VARCHAR2(10))
  2  TABLESPACE TOOLS
  3  PARTITION BY RANGE (TIME) SUBPARTITION BY LIST (STATE)
  4  (
  5   PARTITION P1 VALUES LESS THAN (TO_DATE('2004-1-1', 'YYYY-MM-DD'))
  6   TABLESPACE USERS
  7   (
  8    SUBPARTITION SP1 VALUES ('BJ')
  9    TABLESPACE TEST
 10   )
 11  )
 12  ;
表已创建。
SQL> CREATE TABLE TEST1 (ID NUMBER, TIME DATE, STATE VARCHAR2(10))
  2  TABLESPACE TOOLS
  3  PARTITION BY RANGE (TIME) SUBPARTITION BY LIST (STATE)
  4  (
  5   PARTITION P1 VALUES LESS THAN (TO_DATE('2004-1-1', 'YYYY-MM-DD'))
  6   (
  7    SUBPARTITION SP1 VALUES ('BJ')
  8    TABLESPACE TEST
  9   )
 10  )
 11  ;
表已创建。
SQL> CREATE TABLE TEST2 (ID NUMBER, TIME DATE, STATE VARCHAR2(10))
  2  PARTITION BY RANGE (TIME) SUBPARTITION BY LIST (STATE)
  3  (
  4   PARTITION P1 VALUES LESS THAN (TO_DATE('2004-1-1', 'YYYY-MM-DD'))
  5   (
  6    SUBPARTITION SP1 VALUES ('BJ')
  7    TABLESPACE TEST
  8   )
  9  )
 10  ;
表已创建。
SQL> CREATE INDEX IND_TEST_1 ON TEST (ID) LOCAL;
索引已创建。
SQL> CREATE INDEX IND_TEST_2 ON TEST (TIME)
  2  TABLESPACE INDX LOCAL;
索引已创建。
SQL> CREATE INDEX IND_TEST_3 ON TEST (STATE)
  2  LOCAL (PARTITION P1 TABLESPACE SYSTEM)
  3  TABLESPACE INDX;
索引已创建。
SQL> CREATE INDEX IND_TEST1_1 ON TEST1 (ID) LOCAL;
索引已创建。
SQL> CREATE INDEX IND_TEST1_2 ON TEST1 (TIME)
  2  TABLESPACE INDX LOCAL;
索引已创建。
SQL> CREATE INDEX IND_TEST1_3 ON TEST1 (STATE)
  2  LOCAL (PARTITION P1 TABLESPACE SYSTEM)
  3  TABLESPACE INDX;
索引已创建。
SQL> CREATE INDEX IND_TEST2_1 ON TEST2 (ID) LOCAL;
索引已创建。
SQL> CREATE INDEX IND_TEST2_2 ON TEST2 (TIME)
  2  TABLESPACE INDX LOCAL;
索引已创建。
SQL> CREATE INDEX IND_TEST2_3 ON TEST2 (STATE)
  2  LOCAL (PARTITION P1 TABLESPACE SYSTEM)
  3  TABLESPACE INDX;
索引已创建。
SQL> ALTER TABLE TEST MODIFY PARTITION P1 ADD SUBPARTITION SP2 VALUES ('SH');
表已更改。
SQL> ALTER TABLE TEST1 MODIFY PARTITION P1 ADD SUBPARTITION SP2 VALUES ('SH');
表已更改。
SQL> ALTER TABLE TEST2 MODIFY PARTITION P1 ADD SUBPARTITION SP2 VALUES ('SH');
表已更改。
SQL> SELECT TABLE_NAME, TABLESPACE_NAME FROM USER_TAB_SUBPARTITIONS 
  2  WHERE SUBPARTITION_NAME = 'SP2';
TABLE_NAME           TABLESPACE_NAME
-------------------- ------------------------------
TEST                 USERS
TEST1                TOOLS
TEST2                YANGTK
SQL> SELECT TABLE_NAME, A.INDEX_NAME, A.TABLESPACE_NAME 
  2  FROM USER_IND_SUBPARTITIONS A, USER_INDEXES B
  3  WHERE SUBPARTITION_NAME = 'SP2'
  4  AND A.INDEX_NAME = B.INDEX_NAME
  5  ORDER BY 1, 2;
TABLE_NAME           INDEX_NAME           TABLESPACE_NAME
-------------------- -------------------- -----------------------
TEST                 IND_TEST_1           USERS
TEST                 IND_TEST_2           INDX
TEST                 IND_TEST_3           SYSTEM
TEST1                IND_TEST1_1          TOOLS
TEST1                IND_TEST1_2          INDX
TEST1                IND_TEST1_3          SYSTEM
TEST2                IND_TEST2_1          YANGTK
TEST2                IND_TEST2_2          INDX
TEST2                IND_TEST2_3          SYSTEM
已选择9行。


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论