千家信息网

Oracle中分区表中表空间属性

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,Oracle中的分区表是Oracle中的一个很好的特性,可以把大表划分成多个小表,从而提高对于该大表的SQL执行效率,而各个分区对应用又是透明的。分区表中的每个分区有独立的存储特性,包括表空间、PCT
千家信息网最后更新 2026年11月01日Oracle中分区表中表空间属性

Oracle中的分区表是Oracle中的一个很好的特性,可以把大表划分成多个小表,从而提高对于该大表的SQL执行效率,而各个分区对应用又是透明的。

分区表中的每个分区有独立的存储特性,包括表空间、PCT_FREE等。那分区表中的各分区表空间之间有什么关系?新建的分区会创建在哪个表空间中呢?对应的local分区索引又会使用哪个表空间呢?下面使用一个例子来解释上面的这些问题。

创建测试分区表:

zx@TEST>create table t (id number,name varchar2(10))  2  tablespace users  3  partition by range(id)  4  (  5  partition p1 values less than (10) tablespace example,  6  partition p2 values less than (20) tablespace system,  7  partition p3 values less than (30)  8  );

上面创建了一个range分区表T,对表T指定了表空间为users,分区p1表空间为example,分区p2表空间为system,分区p3表空间没有指定。

下面分别从user_tables、user_tab_partitions视图中查看对应的表空间

zx@TEST>col tablespace_name for a30zx@TEST>col partition_name for a30zx@TEST>select tablespace_name,partitioned from user_tables where table_name='T';TABLESPACE_NAME           PARTITION------------------------------ ---------                               YESzx@TEST>select partition_name,tablespace_name from user_tab_partitions where table_name='T';PARTITION_NAME                 TABLESPACE_NAME------------------------------ ------------------------------P1                             EXAMPLEP2                             SYSTEMP3                             USERS

从上面的查询可以看出,分区表T在user_tables视图中没有记录表空间名的信息,分区P1和P2对应的分区与建表语句中指定的一致,分区P3对应的分区与表T指定的表空间一致为USERS。难道表T就没有表空间属性么?我们使用dbms_metadata.get_ddl查看表T的语句:

从上图中可以看出表T其实也是有表空间属性的,就是在建表时指定的USERS表空间。而分区P3继承了这一属性。那为什么说是分区P3继承了这一属性呢,我们查询下面的视图:

zx@TEST>col table_name for a30zx@TEST>select table_name,def_tablespace_name from user_part_tables;TABLE_NAME                     DEF_TABLESPACE_NAME------------------------------ ---------------------------------T                              USERS

官方文档对列def_tablespace_name的解释是Default tablespace to be used when adding a partition。从上面的查询可以知道,表T的分区如果没有明确指定表空间时都会使用USERS表空间。事实是这样么,下面给表T添加一个表空间:

zx@TEST>alter table t add partition p4 values less than (40);Table altered.zx@TEST>select partition_name,tablespace_name from user_tab_partitions where table_name='T';PARTITION_NAME                 TABLESPACE_NAME------------------------------ ------------------------------P1                             EXAMPLEP2                             SYSTEMP3                             USERSP4                             USERS

从上面可以看到,新添加的分区P4对应的表空间是USERS,证实了前面的观点。

如果当前的表空间已经无法扩展,想把新加的分区创建到其他表空间中,而在加表空间时不指定表空间信息,可以实现么?答案是肯定可以。

zx@TEST>alter table t modify default attributes tablespace example;Table altered.zx@TEST>select table_name,def_tablespace_name from user_part_tables;TABLE_NAME                     DEF_TABLESPACE_NAME------------------------------ ------------------------------------------------------------------------------------------T                              EXAMPLEzx@TEST>alter table t add partition p5 values less than (50);Table altered.zx@TEST>select partition_name,tablespace_name from user_tab_partitions where table_name='T';PARTITION_NAME                 TABLESPACE_NAME------------------------------ ------------------------------P1                             EXAMPLEP2                             SYSTEMP3                             USERSP4                             USERSP5                             EXAMPLE

从上面可以看到在修改了表T的表空间属性后,新加的分区P5创建在EXAMPLE表空间中。

下面再来看local分区索引对应的表空间。先在表上创建一个分区索引。

zx@TEST>create index idx_t on t(id) local;Index created.

下面看看local分区索引对应的表空间的属性:

zx@TEST>select tablespace_name,partitioned from user_indexes where index_name='IDX_T';TABLESPACE_NAME           PARTITION------------------------------ ---------                               YESzx@TEST>select partition_name,partition_position,tablespace_name from user_ind_partitions where index_name='IDX_T';PARTITION_NAME                 PARTITION_POSITION TABLESPACE_NAME------------------------------ ------------------ ------------------------------P1                                              1 EXAMPLEP2                                              2 SYSTEMP3                                              3 USERSP4                                              4 USERSP5                                              5 EXAMPLE

从上面的查询可以看出,local分区索引上没有表空间信息,而每个索引分区对应的表空间名与相应的分区所在的表空间一致。我们同样使用dbms_metadata包来查看索引的建表语句:

从上图可以看到索引IDX_T确实没有表空间属性。我们再来查看user_part_index来验证一下是否是真的呢:

zx@TEST>col index_name for a30zx@TEST>col def_tablespace_name for a30zx@TEST>select index_name,def_tablespace_name from user_part_indexes where index_name='IDX_T';INDEX_NAME                     DEF_TABLESPACE_NAME------------------------------ ------------------------------IDX_T

从上面的查询中可以看到索引IDX_T也没有默认的表空间存储选项,而在官方文档中看到:New partitions or subpartitions added to the local index will be created in the same tablespace(s) as the corresponding partitions or subpartitions of the underlying table。说明local分区索引默认与相关联的表分区在同一个表空间,上面的查询也可以验证这一结论。那可以把local分区索引所在的表空间与表分区所在的表空间分开来么?答案是肯定可以的。在创建本地索引进指定表空间参数即可:

zx@TEST>drop index idx_t;Index dropped.zx@TEST>create index idx_t on t(id) local tablespace sysaux;Index created.zx@TEST>select tablespace_name,partitioned from user_indexes where index_name='IDX_T';TABLESPACE_NAME           PARTITION------------------------------ ---------                               YES                               zx@TEST>select partition_name,partition_position,tablespace_name from user_ind_partitions where index_name='IDX_T';PARTITION_NAME                 PARTITION_POSITION TABLESPACE_NAME------------------------------ ------------------ ------------------------------P1                                              1 SYSAUXP2                                              2 SYSAUXP3                                              3 SYSAUXP4                                              4 SYSAUXP5                                              5 SYSAUXzx@TEST>select index_name,def_tablespace_name from user_part_indexes where index_name='IDX_T';INDEX_NAME                     DEF_TABLESPACE_NAME------------------------------ ------------------------------IDX_T                          SYSAUX

从上面的查询中可以看到所有的分区索引的表空间都为SYSAUX。

创建一个新的分区,看对应的分区索引是否还是在SYSAUX表空间:

zx@TEST>alter table t add partition p6 values less than (60);Table altered.zx@TEST>select partition_name,partition_position,tablespace_name from user_ind_partitions where index_name='IDX_T';PARTITION_NAME                 PARTITION_POSITION TABLESPACE_NAME------------------------------ ------------------ ------------------------------P1                                              1 SYSAUXP2                                              2 SYSAUXP3                                              3 SYSAUXP4                                              4 SYSAUXP5                                              5 SYSAUXP6                                              6 SYSAUX

从上面可以看出新的分区索引所在的表空间仍是SYSAUX。

下面来看如何修改新分区索引创建的对应的表空间:

zx@TEST>alter index idx_t modify default attributes tablespace users;Index altered.zx@TEST>select index_name,def_tablespace_name from user_part_indexes where index_name='IDX_T';INDEX_NAME                     DEF_TABLESPACE_NAME------------------------------ ------------------------------IDX_T                          USERSzx@TEST>alter table t add partition p7 values less than (70);Table altered.zx@TEST>select partition_name,partition_position,tablespace_name from user_ind_partitions where index_name='IDX_T';PARTITION_NAME                 PARTITION_POSITION TABLESPACE_NAME------------------------------ ------------------ ------------------------------P1                                              1 SYSAUXP2                                              2 SYSAUXP3                                              3 SYSAUXP4                                              4 SYSAUXP5                                              5 SYSAUXP6                                              6 SYSAUXP7                                              7 USERS

从上面的结果可以看出,新加分区对应的分区索引的表空间变为了新指定的USERS。修改成功。



空间 索引 面的 属性 分区表 查询 所在 一致 信息 视图 语句 上图 官方 文档 特性 答案 存储 肯定 解释 验证 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 天津市摩尔互联网科技 互联网科技公司起名 互联网科技巨头监管 杭州互联网科技公司 凡科互联网科技 广州互联网络科技有限公司 融势互联网科技 互联网科技小额贷款 广州紫鲸互联网科技 江苏南京365互联网科技 互联网媒体平台算高科技产业 河南住房之家互联网科技 乌鲁木齐新华智原互联网科技学校 黑科技 体验场景 互联网大会 四川互联网展示科技馆设计 江苏互联网智能科技软件 半导体是互联网高科技吗 35岁以上互联网科技行业 九思连强互联网电子科技有限公司 张家口科技产业互联网平台 科技信息互联网 上海挚品互联网科技 互联网科技小额贷款 福州新华互联网科技学校 知乎 华服互联网科技官网 世界互联网科技公司市值排名 陕西云淼互联网科技公司 新氧科技和美国互联网有关系吗 广西科技产业互联网是什么 陕西彩京云互联网科技有限公司
0