今天有朋友問我能查詢到表或者索引實際存放的物理檔案嗎。
表、索引都有對應的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.dbfSCOTT PK_EMP INDEX /u01/app/oracle/oradata/MBBN/users01.dbfSCOTT PK_DEPT INDEX /u01/app/oracle/oradata/MBBN/users01.dbfSCOTT EMP TABLE /u01/app/oracle/oradata/MBBN/users01.dbfSCOTT DEPT TABLE /u01/app/oracle/oradata/MBBN/users01.dbfSCOTT BONUS TABLE /u01/app/oracle/oradata/MBBN/users01.dbf6 rows selected.