V$CONTROLFILE_RECORD_SECTION-LOG HISTORY-MAXLOGHISTORY

xixuefeng Parameter 2015-01-08 17:04:36 1,972 次浏览 , V$CONTROLFILE_RECORD_SECTION-LOG HISTORY-MAXLOGHISTORY已关闭评论

之所以对LOG HISTORY 这个有兴趣,是源于一个查询日志切换频率的SQL,如下:

这个SQL可以查询出日志切换的频率,从中可发现业务高峰,也可判断日志大小设置是否合理等。

问题是这样的:

①在20多套生产库中,为什么,有一些库的日志切换记录的保留时间很长,一个月甚至两个月以上,有的库保留的很短,7天。

②是什么控制它的保留期限呢?

在手工建库的时候我们会发现其中有一个参数“MAXLOGHISTORY”这个值其实就是保留日志切换记录的条数。

参数文件中,参数“control_file_record_keep_time”是控制保留的时间。

我们先测试一下参数“MAXLOGHISTORY”

测试环境:

操作系统:OEL 5.6 64bit

数据库:Oracle11.2.0.4

1)为了方便测试,我们采用手工建库,步骤参见http://xxf-home.net/?p=135

注:MAXLOGHISTORY参数设置为1,意思是,最大的保存条数为1

2)数据库创建完成后,执行以下命令,我们可以发现records_total不是我们设置的1而是292,日志已经切换的记录数为60

 3)我们手工切换日志200次

 4)再次查看动态性能视图v$controlfile_record_section,我们可以看到,最大值依然为292,不过切换的次数已经为260次了

 5)再次切换50次日志,目的是切换的次数超出最大值292

 6)再次查看动态性能视图v$controlfile_record_section

 7)通过上面的测试,我们可以得出如下结论(当然,只测了一次,也不能完全说明问题:)

a) MAXLOGHISTORY这个参数,初始值在292以下的,那么默认的最大值就为292,原因是,分配记录数是以块来分配的,1个块约能存放292条记录,后续又做过验证,如果初始值设置为293,那么,MAXLOGHISTORY即为584,也就是,默认值是按照块的数量来计算最终的大小,当然,如果初始值特别大,是否还按照块块来分配,有兴趣可以测测;

b) 当记录日志切换记录数超出最大值时,同时又没有过期的数据,那么最大值得限制会增大10倍;

c) 最大值只会扩大不会缩小,也就是说,一旦MAXLOGHISTORY变大,那么将永远变大(除非重建控制文件);

d) 如果想让日志切换记录保存1个月的,那么只需要修改参数“control_file_record_keep_time”为31即可,无需理会MAXLOGHISTORY的大小。

 

 

 

 

 

回顶部