当分析ORACLE存储空间分配情况时,常用到三个视图DBA_SEGMENTS,DBA_EXTENTS。
DBA_FREE_SPACE,DBA_SEGMENTS(段信息)基于段信息数据字典seg; 另外常用的两个DBA_EXTENTS(已经分配区信息), DBA_FREE_SPACE(可用区信息)有所不同,底层会基于X表。X$表没有实体表,当读取时实际是执行了ORACLE相应功能代码。
X$KTFBUE ==== DBA_EXTENTS
查询会读取段头、位图块,当数据库比较大,SEGMENT比较多时,读取会非常慢。当同时指定KTFBUESEGTSN,KTFBUESEGFNO,KTFBUESEGBNO 条件进行查询时,可以用到X$上的特殊索引,加快查询。
SQL> @desc X$KTFBUE
Name Null? Type
------------------------------- -------- ----------------------------
1 ADDR RAW(8)
2 INDX NUMBER
3 INST_ID NUMBER
4 CON_ID NUMBER
5 KTFBUESEGTSN NUMBER
6 KTFBUESEGFNO NUMBER
7 KTFBUESEGBNO NUMBER
8 KTFBUEEXTNO NUMBER
9 KTFBUEFNO NUMBER
10 KTFBUEBNO NUMBER
11 KTFBUEBLKS NUMBER
12 KTFBUECTM NUMBER
13 KTFBUESTT VARCHAR2(20)
14 KTFBUESTA NUMBER
X$KTFBFE ==== DBA_FREE_SPACE
查询会读取文件头、位图块
SQL> @desc X$KTFBFE
Name Null? Type
------------------------------- -------- ----------------------------
1 ADDR RAW(8)
2 INDX NUMBER
3 INST_ID NUMBER
4 CON_ID NUMBER
5 KTFBFETSN NUMBER
6 KTFBFEFNO NUMBER
7 KTFBFEBNO NUMBER
8 KTFBFEBLKS NUMBER




