小知识:统计Oracle的日归档量

首先这对于Oracle DBA来说是个初级问题,即使不熟悉的初级DBA也可以快速在网上搜索到现成的SQL语句。
网上搜到的查询SQL基本类似这样的逻辑:

select trunc(completion_time) "Date", count(*) cnt, round(sum(block_size * blocks / 1024 / 1024), 1) "MB"
from v$archived_log
group by trunc(completion_time) 
order by 1;

如果我们是在DG环境中,主库肯定配置了其他的log_archive_dest_N,如果还是使用上面这个统计SQL就很可能出现大的讹误,这类场景下我们要加入限制条件dest_id=1,即正常应该只统计本地归档量即可:

select trunc(completion_time) "Date", count(*) cnt, round(sum(block_size * blocks / 1024 / 1024), 1) "MB"
from v$archived_log
where dest_id = 1  /* 限制条件 dest_id = 1 */
group by trunc(completion_time) 
order by 1;

另外看见过一些初级DBA会在统计RAC环境的日归档量时,想当然的将v$archived_log写成gv$archived_log,导致统计结果出现double放大的讹误。
这类小知识点也可以作为一道基础的DBA面试题,考验下候选人的基本功。
最后也建议广大DBA,像这类简单查询,还是不要选择复制网上的,自己对某个视图或其中的字段含义有疑问的,建议直接查阅官方文档reference章节:

  • https://docs.oracle.com/cd/E11882_01/server.112/e40402/dynviews_1016.htm#REFRN30011
This entry was posted in Oracle日常运维 and tagged , . Bookmark the permalink.