请注意,本文编写于 602 天前,最后修改于 602 天前,其中某些信息可能已经过时。
在ORACLE数据中,我们能否找出一个大表的段对象分布在哪些数据文件中呢? 答案是 可以
,我们可以用下面脚本来找出对应表的区、段分别位于哪些数据文件中
SET PAGESIZE 60;
COL SEGMENT_TYPE FOR A12;
COL FILE_NAME FOR A64;
COL SEGMENT_NAME FOR A24;
COL TABLESPACE_NAME FOR A24;
COL SEGMENT_OWNER FOR A12;
SELECT E.OWNER AS SEGMENT_OWNER
, E.SEGMENT_TYPE AS SEGMENT_TYPE
, E.SEGMENT_NAME AS SEGMENT_NAME
, E.PARTITION_NAME AS PARTITION_NAME
, E.TABLESPACE_NAME AS TABLESPACE_NAME
, F.FILE_NAME AS FILE_NAME
, SUM(E.BYTES)/1024/1024 AS SEGMENT_SIZE
FROM DBA_EXTENTS E
INNER JOIN DBA_DATA_FILES F ON E.FILE_ID= F.FILE_ID
WHERE E.OWNER='&OWNER'
AND E.SEGMENT_NAME='&SEGMENT_NAME'
GROUP BY E.OWNER
,E.SEGMENT_TYPE
,E.PARTITION_NAME
,E.SEGMENT_NAME
,E.TABLESPACE_NAME
,F.FILE_NAME
ORDER BY SEGMENT_SIZE DESC;
这个脚本只是那个脚本的“变异版本”,本质没有区别。所以,在ORACLE数据库当中,我们即可找出一个数据文件中保存有哪些对象, 又可以通过对象名(表名、索引名)定位到当前对象分布在哪些数据文件当中。