表和索引建立的时候如果不指定表空间,会建立在用户的默认表空间中。对于分区表和分区索引,则确定建立的表空间的规则要复杂一些,本文进行简单的总结。
分区表的分区增加分区如果不指定表空间,会根据分区表的默认表空间,如果分区表没有指定默认表空间,则建立在用户的默认表空间上。参考例一。
复合分区表增加子分区如果不指定表空间,会根据分区上的默认表空间,如果分区上没有指定,则根据表上面的默认表空间,如果表上也没有指定,则建立在用户的默认表空间上。参考例二。
分区索引的情况比分区还要复杂一些。由于本地索引会随着增加分区的操作自动增加,因此,无法明确的为这个索引分区指定表空间。如果在建立分区索引时,没有给出默认表空间,那么新增的索引分区所在表空间和新增表分区所在表空间保持一致。参考例三。
复合分区索引的情况和分区索引类似。当复合分区表增加子分区时,如果复合分区索引给出了分区默认表空间,则新建的索引子分区建立在索引分区默认表空间上,如果分区一级没有明确致命默认表空间,则依据索引一级的默认表空间创建新子分区,如果索引一级仍然没有设置明确设置表空间,则索引子分区的表空间和表中子分区的表空间保持一致。参考例四。
例一:分区表增加分区
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
690次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
635次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
546次阅读
2025-04-20 10:07:02
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
494次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
490次阅读
2025-04-22 00:20:37
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
480次阅读
2025-04-22 00:13:51
一页概览:Oracle GoldenGate
甲骨文云技术
469次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
418次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
372次阅读
2025-04-15 14:48:05
OR+DBLINK的关联SQL优化思路
布衣
358次阅读
2025-05-05 19:28:36