Oracle中统计表的大小,包括LOB大字段和INDEX的大小

2024年 4月 8日 42.1k 0

Oracle中统计表的大小,包括LOB大字段和INDEX的大小

最近在做数据迁移评估相关的工作,需要对Oracle数据库的表大小进行统计,但是在统计表大小的时候,需要注意表大小、lob字段的大小以及使用了索引的大小是保存的不同的数据段中。下面的语句是我编写的统计表大小的语句,分享给大家。

SELECT
dt.owner,
dt.num_rows,
dt.table_name,
round(sum(ds.bytes+dls.bytes+dis.bytes)/ 1024 / 1024 , 2) size_mb, --单位MB
dt.partitioned,
dp.partitioning_type
FROM dba_tables dt
--表的大小
LEFT JOIN dba_segments ds ON dt.owner = ds.owner AND dt.TABLE_NAME =ds.SEGMENT_NAME
--分区的类型
LEFT JOIN dba_part_tables dp ON dt.OWNER =dp.OWNER AND dt.table_name = dp.table_name
--lob字段大写
LEFT JOIN ( SELECT dl.OWNER ,dl.TABLE_NAME,sum(ds2.bytes) bytes FROM dba_lobs dl
LEFT JOIN DBA_SEGMENTS ds2 ON dl.OWNER =ds2.owner AND dl.SEGMENT_NAME = ds2.SEGMENT_NAME
GROUP BY dl.OWNER ,dl.TABLE_NAME ) dls ON dt.owner = dls.owner AND dt.TABLE_NAME =dls.TABLE_NAME
--索引的大小
LEFT JOIN ( SELECT di.OWNER ,di.TABLE_NAME,sum(ds3.bytes) bytes FROM DBA_INDEXES di
LEFT JOIN DBA_SEGMENTS ds3 ON di.OWNER =ds3.owner AND di.INDEX_NAME = ds3.SEGMENT_NAME
GROUP BY di.OWNER ,di.TABLE_NAME) dis ON dt.owner = dis.owner AND dt.TABLE_NAME =dis.TABLE_NAME
WHERE
dt.owner = 'SCOTT'
GROUP BY
dt.owner,
dt.table_name,
dt.partitioned,
dp.partitioning_type,
dt.num_rows;

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论