首页 > 技术文章 > oracle查看表占磁盘大小

attlia 2014-04-12 17:46 原文

select segment_name, bytes/1024/1024
from user_segments S
where S.segment_type = 'TABLE'
AND S.segment_name = ‘XXXX';//表名
 
但对于有blob字段的不适用,blob内容不会被统计,统计blob大小的方法:
 
select SEGMENT_NAME, TABLESPACE_NAME, TO_CHAR(SUM(BYTES) / (1024 * 1024), '999G999D999') CNT_MB from dba_extents T WHERE T.owner = 'USER1' AND T.segment_name in ('SYS_LOB0000080922C00004$$', 'SYS_IL0000080922C00004$$')
 
 in后面对应的lobid 在 select * from dba_lobs t where t.owner = 'USER1';
在结果中找到logid
 
另外一种方法:
dbms_lob.getLength函数,参数是blob的字段名
select sum(dbms_lob.getLength(blob))/(1024*1024) from XXX;//含有blob字段的那个表名
 
 
如果要查询long raw的占用空间大小,dbms_lob.getLength不适用, 
需要建立临时表,将long raw 另存为blob,然后查看blob大小
 
create table tmp(id int,img blob);
 
insert into tmp select block_id,to_lob(blog) from XXX;;
 
select sum(dbms_lob.getLength(img))/(1024*1024) from tmp

推荐阅读