在 Oracle 数据库中,获取表的大小可以通过查询数据字典视图 DBA_SEGMENTS
、USER_SEGMENTS
或 ALL_SEGMENTS
,具体取决于你的权限范围和需求
直接查询段大小
表的存储空间信息存储在段(Segment)中,通过以下 SQL 可以获取表的大小(包含数据、索引、LOB 等占用的空间)
SELECTsegment_name AS table_name,bytes,ROUND(bytes / 1024 / 1024, 2) AS size_mb FROMuser_segments -- 根据权限替换为 dba_segments 或 all_segments WHEREsegment_type = 'TABLE'AND segment_name = 'AI_TOOLS';
-
确保表名使用大写,因为 Oracle 数据字典默认存储大写对象名。
-
bytes
字段表示分配的存储空间,可能包含未使用的块。 -
若表有分区,需查询
DBA_TAB_PARTITIONS
视图获取各分区大小。
计算表数据估算大小(基于统计信息)
结合 DBA_TABLES
中的行数和平均行长估算数据量(需更新统计信息):
BEGINDBMS_STATS.GATHER_TABLE_STATS(ownname => 'NEW_USER',tabname => 'AI_TOOLS');
END;
/SELECTtable_name,num_rows,avg_row_len,ROUND((num_rows * avg_row_len) / 1024 / 1024, 2) AS estimated_size_mb
FROMuser_tables
WHEREtable_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 ALLSELECT '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');