Oracle数据库获取数据表大小的三种方法
在 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表大小内容请继续浏览下面的相关文章!