在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数据库当中,我们即可找出一个数据文件中保存有哪些对象, 又可以通过对象名(表名、索引名)定位到当前对象分布在哪些数据文件当中。

最后修改:2022 年 02 月 08 日
如果觉得我的文章对你有用,请随意赞赏