直接查询段大小
表的存储空间信息存储在段(Segment)中,通过以下 SQL 可以获取表的大小(包含数据、索引、LOB 等占用的空间)
1 2 3 4 5 6 7 8 9 | 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
中的行数和平均行长估算数据量(需更新统计信息):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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' ; |
汇总表及索引的总大小
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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表大小内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!