当一个大的DML 是,先database buffer cache 中进行修改同时在修改之前会将数据的前镜像保存在回滚段中,
然后将修改之前和修改之后的数据都写入到redo log buffer中.
? 当提交事务时
? 当重做日志缓冲区三分之一满时
? 当重做日志缓冲区内有超过 1 MB 的已更改记录时
? 当发生超时时每三秒钟
? 在 DBWn 将数据库缓冲区高速缓存内的修改块写入数据文件之前.
则redo log buffer 开始写redo log file .在这期间
DBWn可能会writes modified blocks from the database buffer cache to the datafiles.
In the most common case, DBWn writes only when more data needs to be read into the SGA and too few database buffers are free.
The least recently used data is written to the datafiles first.
DBWn also performs writes for other functions, such as checkpointing.
检查点
在检查点期间
? DBW n 将许多由正在经历检查点事件的日志覆盖的灰数据库缓冲区写入到
数据文件中由 DBWn 写入的缓冲区数量由参数
FAST_START_IO_TARGET 决定如果指定了的话这在Enterprise
DBA Part 1B: Backup and Recovery 企业 DBA 1B 部分备份和恢复课程
中有更详细阐述
? 检查点后台进程 CKPT 更新所有数据文件和控制文件的标题以反映该进程已
成功完成
检查点可以为数据库内所有 数据文件发生或者仅为特定数据文件发生
例如检查点可发生在下面情况中
? 每次日志切换时
? 当已通过正常事务处理或者立即选项关闭例程时
? 当通过设置初始化参数 LOG_CHECKPOINT_INTERVAL
LOG_CHECKPOINT_TIMEOUT 和FAST_START_IO_TARGET 强制时
见后续部分
? 当数据库管理员手动请求时见后续部分
如果初始化参数 LOG_CHECKPOINTS_TO_ALERT 设置为 TRUE 则每个检查
点信息都记录在 ALERT 文件内该参数缺省值为 FALSE 不记录检查点
Checkpoint并非只在log switch时触发
log_checkpoint_interval
log_checkpoint_timeout
fast_start_mttr_target
fast_start_io_target
....
都会影响检查点触发
检查点又分为:
增量检查点
完全检查点
关于Checkpoint not complete的理解
一个大DML,在buffer cache 产生很多dirty blocks.
同时相对应的也产生很多redo log entries,假设这些redo log entries写到了redo logfile 1#,
当要重用这个redo logfile 1#时,在它上面的redo log entries所对应的在buffer cache的dirty blocks.,没有被
写到磁盘上,就会产生Checkpoint not complete的错误
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/51726/viewspace-65955/,如需转载,请注明出处,否则将追究法律责任。