ITPub博客

首页 > 数据库 > Oracle > 【体系结构】SCN与checkpoint(检查点)

【体系结构】SCN与checkpoint(检查点)

原创 Oracle 作者:恩强Boy 时间:2021-02-01 20:55:27 0 删除 编辑

1.  什么是system change number(SCN)?

SCN 是一个戳,它定义了数据库在某一时刻的提交版本。 Oracle 为每一个提交的事务分配一个 SCN SCN 的值是对数据库进行更改的逻辑时间点,也可以理解为 SCN 是时间点的另一种表达方式。 Oracle 利用这个数字来记录对数据库所做的更改。

SCN 是一个 6Byte 48bit )的数字,它由两部分表示: SCN_BASE SCN_WRAP SCN_BASE 是一个 4Byte 32bit )的数字, SCN_WRAP 是一个 2Byte 16bit )的数字。当 SCN_BASE 达到其最大值( 2 32 次方 = 4294967296 ),SCN_WRAP 将增加 1 SCN_BASE 同时将被重置为 0. 这将一直持续到 SCN_WRAP 达到其最大值,及 2 16 次方 =65536

SCN = (SCN_WRAP * 4294967296) + SCN_BASE

12.2 版本开始,兼容性为 12.2 SCN 是一个 8Byte 的数字, SCN 的最大值可以高达 2 63 次方。

SCN 随着每个事务的提交完成而增加。提交不会写数据文件,也不会更新控制文件。

当前的SCN 可以通过以下查询获得

SQL> select dbms_flashback.get_system_change_number scn from dual;

SQL> select current_scn from v$database;

2.  什么是Checkpoint (检查点) ?

检查点是将修改的处于缓存的数据块刷新到磁盘的行为。通常,当我们对一个数据块进行修改时,该块的修改是在内存中完成的。当我们提交(commit )时,它不会写入数据文件,而是被写入 redolog 。所以我们可以在实例失败时“重演”事务。最后,系统将对磁盘上的数据文件的修改设置检查点。

检查点号是将所有脏缓冲区写入磁盘的SCN 号。在对象、表空间、数据文件、数据库级别都可以有检查点。检查点保证检查点 SCN 之前的数据库更改都已记录在数据文件中。因此,在实例恢复期间,只需要应用检查点之后所做的那些更改进行实例恢复。检查点的目标就是将脏缓冲区安全地从 SGA 写入到磁盘上。

有以下几种可能会导致检查点发生:

- Oracle SGA 中的所有脏缓冲区都被 DBWR 写入到数据文件时

- redolog 发生切换时

- 当达到 LOG_CHECKPOINT_TIMEOUT 参数设置时间时

- 通过发出指令“ alter system switch logfile ”或“ alter system checkpoint

当执行检查点时,检查点进程会更新控制文件。需要注意的是,检查点操作将所有更改的脏块写入磁盘,通过在控制文件中记录这一个过程。Oracle 知道在实例失败时需要应用哪些 redolog 。要从实例失败中恢复, Oracle 需要应用控制文件中记录的最后一个检查点之后生成的所有 redolog

commit 的时候不会触发 DBWR 将脏块从缓存写进磁盘上, commit 只会触发 LGWR 。日志切换会导致 checkpoint checkpoint 不会导致日志切换。

当日志缓冲区满足以下内容之一时都会触发redo write: 1MB ,满 1/3 ,每 3 秒或每次提交。

最后DBWR LGWR checkpoint commit 的对应关系为

DBWR <---> checkpoint

LGWR <---> commit

 

 

---- end ----

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31529886/viewspace-2755240/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
勤奋,专注和练习

注册时间:2018-04-03

  • 博文量
    77
  • 访问量
    143632