在ORACLE数据库中,如何计算一个表所占用的存储空间呢?我们可以通过系统视图DBA_SEGMENTS、USER_SEGMETNS、DBA_TABLES来查看一个表所占空间的大小,如下所示:

 

SELECT SEGMENT_NAME              TABLE_NAME

      ,SUM(BLOCKS)               BLOCKS

      ,SUM(BYTES)/(1024*1024)    "TABLE_SIZE[MB]"

FROM USER_SEGMENTS

WHERE  SEGMENT_TYPE='TABLE'

   AND SEGMENT_NAME=&TABLE_NAME

GROUP BY SEGMENT_NAME;

 

 

SELECT SEGMENT_NAME              TABLE_NAME

      ,SUM(BLOCKS)               BLOCKS

      ,SUM(BYTES)/(1024*1024)    "TABLE_SIZE[MB]"

FROM DBA_SEGMENTS

WHERE  SEGMENT_TYPE='TABLE'

   AND SEGMENT_NAME=&TABLE_NAME

GROUP BY SEGMENT_NAME;

注意,如果你通过系统视图DBA_TABELS、USER_TABLES统计、查看表所占的空间大小,那么由于统计信息过时或总是持续有DML操作(INSERTR、UPDATE、DELETE),那么有可能用下面SQL统计出的信息可能不准确。需要先收集一下表对象的统计信息。 另外,可能每个数据库的db_block_size有所不同,不一定是8192。所以注意修改.

ANALYZE TABLE OWNER.TABLE_NAME COMPUTE STATISTICS;

 

 

EXEC DBMS_STATS.GATHER_TABLE_STATS('OWNER','TABLE_NAME');

 

 

SELECT OWNER                    OWNER_NAME

      ,TABLE_NAME               TABLE_NAME

      ,TABLESPACE_NAME          TABLESPACE_NAME

      ,BLOCKS                   ACTUAL_BLOCKS

      ,BLOCKS + EMPTY_BLOCKS    TOTAL_BLOCKS

      ,(BLOCKS + EMPTY_BLOCKS) * 8192/(1024*1024)

                                "TABLE_SIZE[MB]"

FROM DBA_TABLES

WHERE OWNER=&OWNER

  AND TABLE_NAME=&TABLE_NAME

关于DBA_TABLES和DBA_SEGMENTS表中的block的区别,其实它们的关系如下所示:

自动段空间管理(Automatic Segment Space Management ASSM)

dba_segments.blocks = dba_tables.blocks + dba_tables.empty_blocks

本地管理表空间(Locally Managed Tablespace )

dba_segments.blocks = dba_tables.blocks + dba_tables.empty_blocks+ 1(SEGMENT HEADER BLOCK)

DBA_SEGMENTS.BLOCKS      holds the total number of blocks allocated to the table.

DBA_TABLES.BLOCKS         holds the total number of blocks allocated for data.

DBA_SEGMENTS中的blocks表示分配给表的存储空间,而DBA_TABLES中blocks表示表中数据实际占有的存储空间。所以这个是有细微差别的。所以你如果要查表的实际占用大小,那么就要使用DBA_TABLES来查询。查看数据库中占用存储空间从大到小的所有表对象

SELECT SEGMENT_NAME              TABLE_NAME

      ,SUM(BLOCKS)               BLOCKS

      ,SUM(BYTES)/(1024*1024)    "TABLE_SIZE[MB]"

FROM DBA_SEGMENTS

WHERE  SEGMENT_TYPE='TABLE'

GROUP BY SEGMENT_NAME

ORDER BY BLOCKS DESC;

ORACLE计算表引占用空间大小的更多相关文章

  1. Oracle 表的行数、表占用空间大小,列的非空行数、列占用空间大小 查询

    --表名,表占用空间大小(MB),行数select table_name, round(num_rows * avg_row_len /1024/1024, 8) as total_len, num_ ...

  2. mysql查看数据库和表的占用空间大小

    mysql查看数据库和表的占用空间大小   第一部分-任务 将线上db,导出后,导入到office db 一. 两种方案: 1,将数据直接从online-->office,通过mysqldump ...

  3. [转载]Oracle修改表空间大小

    Oracle修改表空间大小 使用Oracle10g建立数据库后,向数据库中导入了部分数据,第二天继续向数据库中导入数据表时发生错误: 查了很多资料发现原来是Oracle表空间限制,导致无法继续导入数据 ...

  4. 快速查看SQL Server 中各表的数据量以及占用空间大小

    快速查看SQL Server 中各表的数据量以及占用空间大小. CREATE TABLE #T (NAME nvarchar(100),ROWS char(20),reserved varchar(1 ...

  5. SQL查询表占用空间大小

    SQL查询表占用空间大小. create table tmp (name varchar(50),rows int,reserved varchar(50),data varchar(50),inde ...

  6. MySQL查看表占用空间大小(转)

    MySQL查看表占用空间大小(转) //先进去MySQL自带管理库:information_schema //自己的数据库:dbwww58com_kuchecarlib //自己的表:t_carmod ...

  7. 【转】Linux命令之查看文件占用空间大小-du,df

    原文网址:http://blog.csdn.net/wangjunjun2008/article/details/19840671 du(disk usage),顾名思义,查看目录/文件占用空间大小 ...

  8. 统计Oracle数据库文件的大小

    1. 统计数据文件.暂时文件.日志文件大小 select sum(bytes)/1024/1024/1024 as GB from dba_data_files; select sum(bytes)/ ...

  9. 转载:Linux命令之查看文件占用空间大小-du,df

    转载自:<du命令>-linux命令五分钟系列之三 du(disk usage),顾名思义,查看目录/文件占用空间大小 #查看当前目录下的所有目录以及子目录的大小$ du -h $ du ...

随机推荐

  1. 如何 判断 设备 是否 连接 上 了 wifi

    这里,我给出一个函数 public boolean sale_connect_check(WifiConfiguration wcg,Context context) { boolean judge_ ...

  2. C语言 第六章 多重循环练习

    一.循环输入 #include "stdio.h" void main() { char c; do { printf("我告诉你1+1=2\n"); prin ...

  3. 【知识积累】使用Httpclient实现网页的爬取并保存至本地

    程序功能实现了爬取网页页面并且将结果保存到本地,通过以爬取页面出发,做一个小的爬虫,分析出有利于自己的信息,做定制化的处理. 其中需要的http*的jar文件,可以在网上自行下载 import jav ...

  4. 从SqlServer转手Oracle的一些坑

    为将SqlSugar ORM转制成OracleSugar ORM 本想一天搞定,凭着经验不看任何Oracle资料就直接强上了,但是从配置PLSQL和一些语法区别带来了很多坑让我进度放缓 这个贴子对于身 ...

  5. 创建实体数据模型【Create Entity Data Model】(EF基础系列5)

    现在我要来为上面一节末尾给出的数据库(SchoolDB)创建实体数据模型: SchoolDB数据库的脚本我已经写好了,如下: USE master GO IF EXISTS(SELECT * FROM ...

  6. C# 异步操作 async await

    在编程的过程中,我们会遇到很多需要异步操作的场景.比如要下载一个文件,如果使用同步的方式进行下载,那么UI操作就会被卡住,这时最好能够使用异步的方式进行下载.在C#中,很早就开始支持异步的操作了,只不 ...

  7. [Access] C# 通过 COM 组件访问 Access 文件

    说明: 1,采用 dynamic 调用 COM 组件,适用于 .NET 4.0 以上支持 dynamic 版本的才可以: 2,执行速度不敢恭维,只是因为要用于 Silverlight OOB 模式中才 ...

  8. dobbo zookeeper 认识

    dubbo 主要使用来整合各种协议的服务,服务提供者可以向dubbo平台注册服务,服务消费都可以看到所有服务的详细信息,而已可以调用所提供的服务接口.zookeeper:主是要服务的集群,配置管理(如 ...

  9. thinkphp配置文件路径

    thinkphp配置文件路径在入口文件index.php中配置. 如果Public目录在应用程序目录同等级位置: 2.如果Public在app内部则: 3.如果使用Public在app外部,但定义为: ...

  10. [修正] iOS 10 使用相机及相簿闪退的问题修正

    iOS 10 新规定,在取用相机,相簿,联络资讯,麦克风需要在 Version Info 加入指定的 key,否则闪退: 注:将下面的 Key 复制到工程 Option -> Version I ...