获取Oracle表大小的三种方法

 更新时间:2025年04月03日 10:48:40   作者:愿与狸花过一生  
在 Oracle 数据库中,获取表的大小可以通过查询数据字典视图 DBA_SEGMENTS、USER_SEGMENTS 或 ALL_SEGMENTS,具体取决于你的权限范围和需求,本文通过代码示例介绍的非常详细,需要的朋友可以参考下

直接查询段大小

表的存储空间信息存储在段(Segment)中,通过以下 SQL 可以获取表的大小(包含数据、索引、LOB 等占用的空间)

SELECT
    segment_name AS table_name,
    bytes,
    ROUND(bytes / 1024 / 1024, 2) AS size_mb
FROM
    user_segments  -- 根据权限替换为 dba_segments 或 all_segments
WHERE
    segment_type = 'TABLE'
  AND segment_name = 'AI_TOOLS';

  • 确保表名使用大写,因为 Oracle 数据字典默认存储大写对象名。

  • bytes 字段表示分配的存储空间,可能包含未使用的块。

  • 若表有分区,需查询 DBA_TAB_PARTITIONS 视图获取各分区大小。

计算表数据估算大小(基于统计信息)

结合 DBA_TABLES 中的行数和平均行长估算数据量(需更新统计信息):

BEGIN
    DBMS_STATS.GATHER_TABLE_STATS(
            ownname    => 'NEW_USER',
            tabname    => 'AI_TOOLS'
    );
END;
/
 
SELECT
    table_name,
    num_rows,
    avg_row_len,
    ROUND((num_rows * avg_row_len) / 1024 / 1024, 2) AS estimated_size_mb
FROM
    user_tables
WHERE
    table_name = 'AI_TOOLS';

汇总表及索引的总大小

SELECT 
    'TABLE' AS segment_type,
    segment_name,
    bytes AS table_size_bytes,
    ROUND(bytes / 1024 / 1024, 2) AS table_size_mb
FROM 
    user_segments
WHERE 
    segment_type = 'TABLE'
    AND segment_name = 'YOUR_TABLE_NAME'
 
UNION ALL
 
SELECT 
    'INDEX' AS segment_type,
    segment_name,
    bytes AS index_size_bytes,
    ROUND(bytes / 1024 / 1024, 2) AS index_size_mb
FROM 
    user_segments
WHERE 
    segment_type = 'INDEX'
    AND segment_name IN (
        SELECT index_name 
        FROM user_indexes 
        WHERE table_name = 'YOUR_TABLE_NAME'
    );

到此这篇关于获取Oracle表大小的三种方法的文章就介绍到这了,更多相关获取Oracle表大小内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Oracle VM VirtualBox 虚拟机硬盘扩容

    Oracle VM VirtualBox 虚拟机硬盘扩容

    这篇文章主要介绍了Oracle VM VirtualBox 虚拟机硬盘扩容,VirtualBox中使用Ubuntu虚拟机中,出现了虚拟硬盘不够用的情况,我们可以采取下文方式进行扩容,需要的朋友可以参考一下
    2022-03-03
  • Oracle中的SUM用法讲解

    Oracle中的SUM用法讲解

    今天小编就为大家分享一篇关于Oracle中的SUM用法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • Oracle一行拆分为多行方法实例

    Oracle一行拆分为多行方法实例

    工作和学习中常常会遇到一行要分割成多行数据的情况,在此整理一下做下对比,下面这篇文章主要给大家介绍了关于Oracle一行拆分为多行的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • 解决ORA-12154 TNS无法解析指定的连接标识符问题

    解决ORA-12154 TNS无法解析指定的连接标识符问题

    Oracle11g server 64bit服务器端安装在Windows Server2008 Enterprise上,安装Oracle11g client 32bit,通过SQL Plus以sysdba身份连接数据库,并且创建表空间、用户、授权成功,在连接数据库时出现问题,下面讲解ORA-12154无法解析指定的连接标识符问题,感兴趣的朋友一起看看
    2024-01-01
  • Oracle decode函数用法详解

    Oracle decode函数用法详解

    本文详细讲解了Oracle中decode函数的用法,文中有相关的图文示例,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-05-05
  • Oracle显示游标的使用及游标for循环

    Oracle显示游标的使用及游标for循环

    本篇文章给大家介绍oracle显示游标的使用及游标for循环,当查询返回单行记录时使用隐式游标,查询返回多行记录并逐行进行处理时使用显式游标,对本文感兴趣的朋友一起学习吧
    2015-11-11
  • Oracle to_date()函数的用法介绍

    Oracle to_date()函数的用法介绍

    to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,需要的朋友可以参考下
    2014-08-08
  • oracle通过行范围查询取4至10行

    oracle通过行范围查询取4至10行

    这篇文章主要介绍了oracle通过行范围查询取4至10行,以EMP表为范例,需要的朋友可以参考下
    2014-08-08
  • oracle中exp,imp的使用详解

    oracle中exp,imp的使用详解

    这篇文章主要介绍了oracle中exp,imp的使用详解,需要的朋友可以参考下
    2015-07-07
  • Oracle11g简单安装和使用教程

    Oracle11g简单安装和使用教程

    这篇文章主要为大家详细介绍了Oracle11g简单安装和使用教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09

最新评论