Oracle SCN 三篇文章
是什么?
是一个非常重要的标记, 使用它来
标记数据库在过去时间内的状态和轨迹。
使用 来保存所有变化的轨迹。 是一个逻辑时钟来记录数据库
事件。它非常的重要,并不是只是为了恢复。
有点类似于 , 在 中增加它。当一个事务修改或者
插入数据, 首先写入一个新的 到回滚段中。 进程立刻
把提交的记录写入到重做日志中,这条提交的记录将拥有唯一的 。事实上,
把 写入到日志,就意味着一个事务的完成。 帮助 决定在一次
突然中断或者 !"# 后,是否需要一个崩溃恢复。每当数据库
发生 $%,写一个 # 命令到数据文件头。控制文件
维护着每个数据文件的 ,称为 &,通常是无穷大,每当实例正常
关闭( !#'( !)''* )*), 会
复制数据文件头 # 到控制文件的 &。如果是正常的重启数
据库,是不需要恢复的,因为控制文件和数据文件的 是吻合的。反之,突
然中断系统就没法同步 , 不匹配, 就认为需要做恢复。
另外 还使用数据块的 来维护查询的一致性和多版本。
$% 是一个数据库事件,用来同步所有的 +,,, 和
+,。当发出 $% 时(回顾什么时候 会发出 $% 呢),$%
会将检查点时刻的 写入到控制文件和数据文件头部,同时会促使 + 进
程将 +- 中的所有的脏数据写入到数据文件中。而 + 进程工作时
又会促使 写 - 中的日志数据到 +, 中。所以当发出检
查点时 .&, "!# 和 (!# 同时工作,三种文件的 完全一致,从而
能保持完全同步。
一次 $% 包含以下步骤/
010 把 +- 的内容刷到 + 中。
212 在 +, 中留下一个 $% 记录。
313 把 +- 的变更刷新到磁盘。
414 在 $% 完成后,更新数据文件头和控制文件。
$% 的具体工作包括:
5触发 "! 向磁盘写入 +。
5把 $% 信息更新到 +,+ 上。
5把 $% 信息更新到 , 里。
5$% 做的事情之一是触发 "! 把 - 中的
磁盘。另外就是把最近的系统的 更新到 +,+ 和
,(每一个事务都有一个 ),做第一件事的目的是为了减少由于
系统突然宕机而需要的恢复时间,做第二件事实为了保证数据库的一致性。