今天有朋友问我能查询到表或者索引实际存放的物理文件吗?
表、索引都有对应的Segment。Segment是物理存储上的概念,表、索引是逻辑上的概念。
一个Segments由多个Extents组成,每个Extent只能属于一个DataFile,但同一个Segment的不同Extend可以属于不同的Datafile。
可以查找每个Extent属于哪个DataFile的。那么也就应该能查询到表或索引属于哪个DataFile了
SQL> select a.owner, a.segment_name, a.segment_type, c.file_name
2 from dba_segments a
3 inner join dba_extents b on a.segment_name = b.segment_name
4 left join dba_data_files c on b.file_id = c.file_id
5 where a.owner = 'SCOTT'
6 and a.segment_type in ('TABLE', 'INDEX');
OWNER SEGMENT_NAME SEGMENT_TYPE FILE_NAME
------ ------------- ------------- ----------------------------------------
SCOTT SALGRADE TABLE /u01/app/oracle/oradata/MBBN/users01.dbf
SCOTT PK_EMP INDEX /u01/app/oracle/oradata/MBBN/users01.dbf
SCOTT PK_DEPT INDEX /u01/app/oracle/oradata/MBBN/users01.dbf
SCOTT EMP TABLE /u01/app/oracle/oradata/MBBN/users01.dbf
SCOTT DEPT TABLE /u01/app/oracle/oradata/MBBN/users01.dbf
SCOTT BONUS TABLE /u01/app/oracle/oradata/MBBN/users01.dbf
6 rows selected.