文章归档

日志文件切换

本文主要翻译自Jonathan Lewis的Blog Entry Log File Switch, 最后关于checkpoint部分,我添加了部分我自己的注释(以斜体字显示).

日志文件切换

几天前,我发布一个简单的查询语句,它通过查询v$log_history视图展示日志文件切换之间的时间间隔.如果你运行这个脚本,并且认为你的系统的日志文件切换频率不合适,那么你该如何处理呢?
如果时间间隔太短(由于日志文件频繁切换引发的checkpoint动作可能会导致DBWR进程过于活跃),可以通过新增新的更大的日志文件并删除旧的日志文件来解决.
如果切换的时间间隔太久,或者是时间间隔波动太大,而你希望使日志切换更加有规律,那么可以使用参数archive_lag_target(在Oracle 9i中引入)来为日志文件切换设置一个超时值(单位为秒).如果日志文件没有在指定的时间间隔内发生切换,那么系统会强制其切换日志,并且归档对应的已经使用的在线重做日志.
在此之前,人们一般使用类似于cron或者dbms_job一类的工具来实现(通过执行一条”alter system switch logfile“命令).从Oracle 9i开始,利用这个参数来实现就简单多了.

附录

Instance Recovery Checkpoint

实例恢复触发的检查点

Media Recovery Checkpoint

介质恢复触发的检查点

Thread Checkpoint

单个instance关闭以及log file switch触发的检查点

Interval Checkpoint

log_checkpoint_timeout参数超时触发的检查点

Tablespace Checkpoint

表空间online/offline/read only/read write操作对应的检查点

PQ Tablespace Checkpoint

不清楚具体原因

Close Database Checkpoint
Incremental Checkpoint

常规的检查点动作

Local Database Checkpoint

对应于alter system checkpoint

Global Database Checkpoint

对应于alter system checkpoint all命令的检查点.

Object Reuse Checkpoint

对应于truncate table操作的检查点

Object Checkpoint

对应于drop table的检查点操作

Oracle支持多种不同类型的checkpoint,这个列表会随着Oracle版本的不同而有所不同.Oracle 10.2.0.3的对应的checkpoint看似有如下这些:
在这些中间,我认为日志文件切换时引发的checkpoint可能是ThreadCheckpoint.