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

统计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中记录的分配给段的空间值才是可信的值。

猜你喜欢

转载自blog.csdn.net/w892824196/article/details/84848353
今日推荐