在 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'
);