查询Oracle中每月数据(oracle按月份查询)

表大小

在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中每月数据表的大小信息。


数据运维技术 » 查询Oracle中每月数据(oracle按月份查询)