统计Oracle数据库用户所有表的大小

本文提供了一种查询Oracle数据库中所有用户表大小的方法,并通过对比DBA_SEGMENTS与DBA_EXTENTS视图的数据来验证表空间统计的一致性。在特定情况下,如频繁的DML/DDL操作可能导致两者数据不一致,此时DBA_EXTENTS提供的数据更为准确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

统计Oracle数据库用户所有表的大小

 SELECT OWNER as "用户名", sum(BYTES) / 1024 / 1024 / 1024 as "所有表的大小(GB)"
  FROM DBA_SEGMENTS
 WHERE SEGMENT_NAME in (select t2.OBJECT_NAME
                          from dba_objects t2
                         where t2.OBJECT_TYPE = 'TABLE')
 group by OWNER order by 2 desc;

经过测试发现,从DBA_EXTENTS中统计出来的大小和DBA_SEGMENTS一样:

SELECT OWNER as "用户名", sum(BYTES) / 1024 / 1024 / 1024 as "所有表的大小(GB)"
  FROM DBA_EXTENTS
 WHERE SEGMENT_NAME in (select t2.OBJECT_NAME
                          from dba_objects t2
                         where t2.OBJECT_TYPE = 'TABLE')
 group by OWNER order by 2 desc;


在metalink上搜索到如下资料: Doc ID: Note:463101.1
HOW TO DISCOVER AND FIX THE MISTMATCH BETWEEN DBA_SEGMENTS AND DBA_EXTENTS DICTIONARY VIEWS
里面讲到当DML/DDL操作(parallel index creation, frequent deletes/inserts)会导致这种不一致,
导致dba_segments中的不正确, 所以dba_extents中记录的分配给段的空间值才是可信的值。

如有不对之处,请各位指出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值