[toc]

适用范围

创建索引组织表(分区表)及查询其使用的表空间名称

问题概述

通过 USER_TAB_PARTITIONS 视图无法查询索引组织表(分区表)使用的表空间名称。

问题原因

由于索引组织表的本质是索引,索引查看分区需要通过user_ind_partitions 视图进行查询,以下是根据 ORACLE docs SQL Language Reference 手册 手册创建的索引组织表(分区表)及查看使用的表空间的名称例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

CREATE TABLE IOTEST
(
a NUMBER NOT NULL,
b DATE,
CONSTRAINT iii_PK
PRIMARY KEY
(a)
ENABLE VALIDATE
)
ORGANIZATION INDEX
TABLESPACE iot1
PARTITION BY LIST (a)
(
PARTITION SSS VALUES (2)
TABLESPACE iot2,
PARTITION S3 VALUES (1)
TABLESPACE iot3
);
1
2
3
4
5
6
7
8
9
10
SQL> set lines 200
SQL> col index_name for a20
SQL> col partition_name for a20
SQL> col tablespace_name for a20
SQL> select index_name,partition_name,tablespace_name from user_ind_partitions where index_name='III_PK'

INDEX_NAME PARTITION_NAME TABLESPACE_NAME
-------------------- -------------------- --------------------
III_PK S3 IOT3
III_PK SSS IOT2

或者通过dba_segments进行查询

1
2
3
4
5
6
7
8
SQL>  select OWNER,SEGMENT_NAME,TABLESPACE_NAME from dba_segments where SEGMENT_NAME='III_PK';

OWNER SEGMENT_NAME TABLESPACE_NAME
-------------------- ------------------------------ ------------------------------
SYS III_PK IOT3
SYS III_PK IOT2

SQL>

解决方案

1、通过user_ind_partitions 视图查询索引组织表(分区表)的表空间使用
2、通过dba_segments 视图查询索引组织表(分区表)的表空间使用

参考文档

原文作者: liups.com

原文链接: http://liups.com/posts/dee2bb27/

许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议