暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle中统计表的大小,包括LOB大字段和INDEX的大小

原创 墨竹 2024-04-08
1592

Oracle中统计表的大小,包括LOB大字段和INDEX的大小

最近在做数据迁移评估相关的工作,需要对Oracle数据库的表大小进行统计,但是在统计表大小的时候,需要注意表大小、lob字段的大小以及使用了索引的大小是保存的不同的数据段中。下面的语句是我编写的统计表大小的语句,分享给大家。

SELECT
    dt.owner,
    dt.num_rows,
    dt.table_name,
    round(sum(ds.bytes+dls.bytes+dis.bytes)/ 1024 / 1024 , 2) size_mb, --单位MB
    dt.partitioned,
    dp.partitioning_type
FROM dba_tables dt
--表的大小
LEFT JOIN dba_segments ds ON dt.owner = ds.owner AND dt.TABLE_NAME =ds.SEGMENT_NAME
--分区的类型 
LEFT JOIN dba_part_tables dp ON dt.OWNER =dp.OWNER AND  dt.table_name = dp.table_name
 --lob字段大写
LEFT JOIN ( SELECT dl.OWNER ,dl.TABLE_NAME,sum(ds2.bytes) bytes  FROM dba_lobs dl
LEFT JOIN DBA_SEGMENTS  ds2 ON dl.OWNER =ds2.owner AND dl.SEGMENT_NAME = ds2.SEGMENT_NAME 
GROUP BY dl.OWNER ,dl.TABLE_NAME ) dls ON dt.owner = dls.owner AND dt.TABLE_NAME =dls.TABLE_NAME
--索引的大小
LEFT JOIN ( SELECT di.OWNER ,di.TABLE_NAME,sum(ds3.bytes) bytes  FROM DBA_INDEXES di
LEFT JOIN DBA_SEGMENTS  ds3 ON di.OWNER =ds3.owner AND di.INDEX_NAME = ds3.SEGMENT_NAME 
GROUP BY di.OWNER ,di.TABLE_NAME) dis ON dt.owner = dis.owner AND dt.TABLE_NAME =dis.TABLE_NAME
WHERE
     dt.owner = 'SCOTT'
GROUP BY
    dt.owner,
    dt.table_name,
    dt.partitioned,
    dp.partitioning_type,
    dt.num_rows;

– / END / –

可以通过下面的方式联系我

  • 微信公众号:@墨竹札记
  • 墨天轮:@墨竹
  • 微信:wshf395062788
  • PGFans:@墨竹

如果这篇文章为你带来了灵感或启发,就请帮忙点赞收藏转发;如果文章中不严谨或者错漏之处,请及时评论指正。非常感谢!

最后修改时间:2025-02-06 11:04:12
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论