Oracle可以将Redo Log联机日志文件保存到多个不同的位置,将联机日志转换为归档日志的过程称之为归档,相应的日志被称为归档日志。归档日志可以用来恢复数据库,因此它记录着数据库的各种操作。
如果我们需要记录某个操作消耗多少REDO,可以通过如下方式:
SQL> select name,value from (select b.name,a.value from v$mystat a,v$statname b where a.STATISTIC#=b.statistic#) where name='redo size' or name like 'undo change%';
NAME VALUE
---------------------------------------------------------------- ----------
redo size 0
undo change vector size 0
SQL> select * from test;
A
----------
SQL> insert into test select rownum from dual connect by rownum<=10;
10 rows inserted
SQL> commit;
Commit complete
SQL> select name,value from (select b.name,a.value from v$mystat a,v$statname b where a.STATISTIC#=b.statistic#) where name='redo size' or name like 'undo change%';
NAME VALUE
---------------------------------------------------------------- ----------
redo size 576
undo change vector size 156
SQL> select 576-0 as redo_size_insert_change,156-0 as undo_size_insert_change from dual;
REDO_SIZE_INSERT_CHANGE UNDO_SIZE_INSERT_CHANGE
----------------------- -----------------------
576 156
如果突然监控到有大量归档日志生成(进行时),该如何查询问题来源?可以参考如下方法:
create table t1 as select sid,value,NAME,sysdate as chkdt from v$sesstat a,v$statname b where a.STATISTIC#=b.STATISTIC# and b.CLASS=2;
<监控一段时间,比如1分钟、10分钟>
create table t2 as select sid,value,NAME,sysdate as chkdt from v$sesstat a,v$statname b where a.STATISTIC#=b.STATISTIC# and b.CLASS=2;
# 对比前后差异
select t1.SID,t1.NAME,sum((t2.VALUE-t1.VALUE)/(t2.CHKDT-t1.CHKDT)) from t1,t2 where t1.sid=t2.sid and t1.name=t2.name and t1.name in ('redo size','redo entries') group by t1.sid,t1.name order by 2,3;
如果突然监控到有大量归档日志生成,但远程维护已经停止生成,该如何查询问题来源?可以参考如下方法:
auto_logmnr.sql
来源:https://blog.csdn.net/weixin_38623994/article/details/100536189