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

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行。

 

增加表分区时,为local分区索引指定不同表空间的方法

ALTER INDEX IDX_TP MODIFY DEFAULT ATTRIBUTES TABLESPACE IDX_T2;
ALTER INDEX IDX_TP REBUILD PARTITION P3 TABLESPACE IDX_T3;

修改用户默认表空间:

alter user OSALE default tablespace osaledata_tbs