表大小
在Oracle中查询每月数据表大小,可以使用Oracle内置的一些函数和查询语句,来获取每月的数据表的大小信息。
首先,我们可以使用Oracle内置函数【Sum (bytes/blocks) over
(order by ……)】来统计某个表中每月的Blocks/Bytes,例如:
SELECT table_name,
TO_CHAR(scn_time, ‘YYYY-MM’) “Month”,
SUM (blocks) OVER (PARTITION BY TO_CHAR(scn_time, ‘YYYY-MM’)) blocks_size,
SUM (bytes) OVER (PARTITION BY TO_CHAR(scn_time, ‘YYYY-MM’)) bytes_size
FROM dba_segment_stats
WHERE segment_name = ‘
‘
AND scn_time > sysdate – 1
GROUP BY table_name, TO_CHAR(scn_time, ‘YYYY-MM’);
上面的SQL中,使用了Partition By 将查询结果按照指定的字段划分为不同的Partition,“TO_CHAR(scn_time, ‘YYYY-MM’)” 将日期划分为每月的形式,然后通过Sum函数,统计每月的Block/Bytes大小。
其次,使用我们可以使用【group by】子句来把查询结果分组,我们可以像下面这样写:
SELECT table_name,
TO_CHAR(scn_time, ‘YYYY-MM’) “Month”,
SUM (blocks) blocks_size,
SUM (bytes) bytes_size
FROM dba_segment_stats
WHERE segment_name = ‘
‘
AND scn_time > sysdate – 1
GROUP BY table_name, TO_CHAR(scn_time, ‘YYYY-MM’);
最后,我们可以使用【analytic functions】函数来实现,例如:
SELECT table_name,
LISTAGG(TO_CHAR(scn_time, ‘YYYY-MM’), ‘,’) WITHIN GROUP (ORDER BY TO_CHAR(scn_time, ‘YYYY-MM’)) “Month”,
SUM (blocks) blocks_size,
SUM (bytes) bytes_size
FROM dba_segment_stats
WHERE segment_name = ‘
‘
AND scn_time > sysdate – 1
GROUP BY table_name
ORDER BY “Month”;
上述查询把结果按照每月划分,并且使用LISTAGG函数将每月的划分按照字符串格式组合起来。
通过以上三种查询方式,我们可以轻松的获取Oracle中每月数据表的大小信息。