Oracle中分区表中表空间属性(2)

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

Oracle中分区表中表空间属性

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

zx@TEST>col index_name for a30

zx@TEST>col def_tablespace_name for a30

zx@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 SYSAUX

P2                      2 SYSAUX

P3                      3 SYSAUX

P4                      4 SYSAUX

P5                      5 SYSAUX

  

zx@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 SYSAUX

P2                      2 SYSAUX

P3                      3 SYSAUX

P4                      4 SYSAUX

P5                      5 SYSAUX

P6                      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                 USERS

  

zx@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 SYSAUX

P2                      2 SYSAUX

P3                      3 SYSAUX

P4                      4 SYSAUX

P5                      5 SYSAUX

P6                      6 SYSAUX

P7                      7 USERS

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a1233c3ea8c5fc0a5156483a7cfbabb2.html