表和索引建立的時候如果不指定表空間,會建立在用戶的默認表空間中。對于分區(qū)表和分區(qū)索引,則確定建立的表空間的規(guī)則要復(fù)雜一些,本文進行簡單的總結(jié)
  
  分區(qū)表的分區(qū)增加分區(qū)如果不指定表空間,會根據(jù)分區(qū)表的默認表空間,如果分區(qū)表沒有指定默認表空間,則建立在用戶的默認表空間上。參考例一。
  
  復(fù)合分區(qū)表增加子分區(qū)如果不指定表空間,會根據(jù)分區(qū)上的默認表空間,如果分區(qū)上沒有指定,則根據(jù)表上面的默認表空間,如果表上也沒有指定,則建立在用戶的默認表空間上。參考例二。
  
  分區(qū)索引的情況比分區(qū)還要復(fù)雜一些。由于本地索引會隨著增加分區(qū)的操作自動增加,因此,無法明確的為這個索引指定表空間。如果在建立分區(qū)索引時,給出了默認表空間,那么新增的索引分區(qū)所在表空間和新增表分區(qū)所在表空間保持一致。參考例三。
  
  復(fù)合分區(qū)索引的情況和分區(qū)索引類似。當(dāng)復(fù)合分區(qū)表增加子分區(qū)時,如果復(fù)合分區(qū)索引給出了分區(qū)默認表空間,則新建的索引子分區(qū)建立在索引分區(qū)默認表空間上,如果分區(qū)一級沒有明確致命默認表空間,則依據(jù)索引一級的默認表空間創(chuàng)建新子分區(qū),如果索引一級仍然沒有設(shè)置明確設(shè)置表空間,則索引子分區(qū)的表空間和表中子分區(qū)的表空間保持一致。參考例四。
  
  例一:分區(qū)表增加分區(qū)
  
  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 );
  
  表已創(chuàng)建。
  
  SQL> CREATE TABLE TEST1 (ID NUMBER)
   2 PARTITION BY RANGE (ID)
   3 (
   4  PARTITION P1 VALUES LESS THAN (100)
   5  TABLESPACE TEST
   6 );
  
  表已創(chuàng)建。
  
  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;
  
  表已丟棄。
  
  例二:復(fù)合分區(qū)表增加子分區(qū)
  
  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 ;
  
  表已創(chuàng)建。
  
  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 ;
  
  表已創(chuàng)建。
  
  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 ;
  
  表已創(chuàng)建。
  
  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;
  
  表已丟棄。
  
  例三:本地索引分區(qū)
  
  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 );
  
  表已創(chuàng)建。
  
  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 );

表已創(chuàng)建。
  
  SQL> CREATE INDEX IND_TEST_1 ON TEST (ID) LOCAL;
  
  索引已創(chuàng)建。
  
  SQL> CREATE INDEX IND_TEST_2 ON TEST (NAME)
   2 TABLESPACE INDX LOCAL;
  
  索引已創(chuàng)建。
  
  SQL> CREATE INDEX IND_TEST1_1 ON TEST1 (ID) LOCAL;
  
  索引已創(chuàng)建。
  
  SQL> CREATE INDEX IND_TEST1_2 ON TEST1 (NAME)
   2 TABLESPACE INDX LOCAL;
  
  索引已創(chuàng)建。
  
  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;
  
  表已丟棄。
  
  例四:復(fù)合分區(qū)索引
  
  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 ;
  
  表已創(chuàng)建。
  
  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 ;
  
  表已創(chuàng)建。
  
  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 ;
  
  表已創(chuàng)建。
  
  SQL> CREATE INDEX IND_TEST_1 ON TEST (ID) LOCAL;
  
  索引已創(chuàng)建。
  
  SQL> CREATE INDEX IND_TEST_2 ON TEST (TIME)
   2 TABLESPACE INDX LOCAL;
  
  索引已創(chuàng)建。
  
  SQL> CREATE INDEX IND_TEST_3 ON TEST (STATE)
   2 LOCAL (PARTITION P1 TABLESPACE SYSTEM)
   3 TABLESPACE INDX;
  
  索引已創(chuàng)建。
  
  SQL> CREATE INDEX IND_TEST1_1 ON TEST1 (ID) LOCAL;
  
  索引已創(chuàng)建。
  
  SQL> CREATE INDEX IND_TEST1_2 ON TEST1 (TIME)
   2 TABLESPACE INDX LOCAL;
  
  索引已創(chuàng)建。
  
  SQL> CREATE INDEX IND_TEST1_3 ON TEST1 (STATE)
   2 LOCAL (PARTITION P1 TABLESPACE SYSTEM)
   3 TABLESPACE INDX;
  
  索引已創(chuàng)建。
  
  SQL> CREATE INDEX IND_TEST2_1 ON TEST2 (ID) LOCAL;
  
  索引已創(chuàng)建。
  
  SQL> CREATE INDEX IND_TEST2_2 ON TEST2 (TIME)
   2 TABLESPACE INDX LOCAL;
  
  索引已創(chuàng)建。
  
  SQL> CREATE INDEX IND_TEST2_3 ON TEST2 (STATE)
   2 LOCAL (PARTITION P1 TABLESPACE SYSTEM)
   3 TABLESPACE INDX;
  
  索引已創(chuàng)建。
  
  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行。