本地分区索引如何确定表空间(1)
2024-07-21 02:38:03
供稿:网友
表和索引建立的时候假如不指定表空间,会建立在用户的默认表空间中。对于分区表和分区索引,则确定建立的表空间的规则要复杂一些,本文进行简单的总结
分区表的分区增加分区假如不指定表空间,会根据分区表的默认表空间,假如分区表没有指定默认表空间,则建立在用户的默认表空间上。参考例一。
复合分区表增加子分区假如不指定表空间,会根据分区上的默认表空间,假如分区上没有指定,则根据表上面的默认表空间,假如表上也没有指定,则建立在用户的默认表空间上。参考例二。
分区索引的情况比分区还要复杂一些。由于本地索引会随着增加分区的操作自动增加,因此,无法明确的为这个索引指定表空间。假如在建立分区索引时,给出了默认表空间,那么新增的索引分区所在表空间和新增表分区所在表空间保持一致。参考例三。
复合分区索引的情况和分区索引类似。当复合分区表增加子分区时,假如复合分区索引给出了分区默认表空间,则新建的索引子分区建立在索引分区默认表空间上,假如分区一级没有明确致命默认表空间,则依据索引一级的默认表空间创建新子分区,假如索引一级仍然没有设置明确设置表空间,则索引子分区的表空间和表中子分区的表空间保持一致。参考例四。
例一:分区表增加分区
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 );