oracle中的检查点Ckpt和SCN号

转载 2018年04月15日 21:30:44

Checkpoint

  checkpoint是用来减少在数据库恢复过程中所花的时间(instance recovery).数据库中有个CKPT进程,这个是个可选进程,但是真正执行检查点的任务并不是有ckpt来完成的,而是ckpt在更新控制文件和数据文件头的有关信息后,通知DBWn进程,产生一个检查点,在产生检查点的时候,DBWn进程会将buffer cache中的脏数据(当前online redo log对应的脏数据),写入我们的数据文件当中。那么这个时候如果数据库此时崩溃(比如我们做个shutdown abort),那么在进行实例恢复的时候就可以不需要当前online redo log的内容了,会很快就做完。因此ckpt进程只是个辅助进程,他的任务更多的是用来在系统做checkpoint的时候更新控制文件和数据文件头中的信息。其实在oracle 8i的时候呢,ckpt的任务一般都是由lgwr进程来完成,到了8i以后,随着CKPT进程的引入,lgwr的工作负担就减轻了很多(commit的速度加快了)


那么如何来产生检查点呢?有三种方法:

 

1.alter system checkpoint

2.alter system switch logfile

3.DBWn进程写出脏块


SCN (system change number)

 在Oracle的内部同步时钟,是系统改变号,的缩写(system change number。

 可以通过dbms_flashback包来查询当前系统的改变号:select dbms_flashback.get_system_change_number from dual;

 一般来讲SCN主要是用来标识数据库所做的所有改变,只能前进,不能回退,除非我们打算重建库,否则数据库中的SCN永远不会归0.

 

需要注意的是:

1.CKPT一定是是在checkpoint发生的时候将数据库当前的SCN更新入数据库文件头和控制文件当中,同时DBWn进程将buffer cache中的脏数据块(dirty block)写到数据文件当中(这个脏数据也一定是当前online redo log保护的那一部分)。


2.同时CKPT进程还会在控制文件当中记录(redo block address)RBA,这个地址用来标志恢复的时候需要从日志中的那个位置开始。


在Oracle数据库中和checkpoint相关的SCN总共有4个

1.System checkpoint SCN  (存在于控制文件)

在系统执行checkpoint后,Oracle会更新当前控制文件中的System checkpoint SCN。

我们可以通过以下视图来查看

select checkpoint_change# from v$database:


2.Datafile checkpoint SCN (存在于控制文件)

由于控制文件中记录了Oracle中各个数据库文件的位置和信息,其中当然也包括了Datafile checkpoint SCN,因此在执行checkpoint的时候,Oracle还会去更新控制文件中所记录的各个数据文件的datafile checkpoint SCN.

我们可以通过以下视图来查看

select checkpoint_change#  from v$datafile;


3.Start SCN (存在于各个数据文件头)

在执行checkpoint时,Oracle会更新存放在各个实际的数据文件头的Start SCN (除开控制文件),这个SCN存在的目的是用于检查数据库启动过程中是否需要做media recovery(介质恢复)

我们可以通过以下视图来查看

select checkpoint_change# from v$datafile_header;


4.End SCN(存在于控制文件)

最后一类SCN,End SCN他也是记录在控制文件当中,每一个所记录的数据文件头都有一个对应的End SCN,这个End SCN一定是存在于控制文件当中。这个SCN主要是用来去和控制文件的scn比较,判断数据库启动的时候是否需要做instance recovery。

我们可以通过以下视图来查看

select name,last_change# from v$datafile

那么其实在数据库正常运行的情况下,对于read/write的online 数据文件这个SCN号为#FFFFFF(NULL).


oracle的启动与oracle的SCN

1.在数据库的启动过程中,当System Checkpoint SCN=Datafile Checkpoint SCN=Start SCN的时候,Oracle数据库是可以正常启动的,而不需要做任何的media recovery。而如果三者当中有一个不同的话,则需要做media recovery


2.那什么时候需要做instance recovery呢?

   其实在正常open数据库的时候,oracle会将记录在控制文件中的每一个数据文件头的End SCN都设置为#FFFFFF(NULL),那么如果数据库进行了正常关闭比如(shutdown or shutdown immediate)这个时候,系统会执行一个检查点,这个检查点会将控制文件中记录的各个数据文件头的End SCN更新为当前online数据文件的各个数据文件头的Start SCN,也就是End SCN=Start SCN,如果再次启动数据库的时候发现二者相等,则直接打开数据库,并再次将End SCN设置为#FFFFFF(NULL).

   那么如果数据库是异常关闭,那么checkpoint就不会执行,因此再次打开数据库的时候End SCN != Start SCN这个时候就需要做实例恢复。

 这个更新SCN操作的执行着就是CKPT进程,他不仅仅会更新SCN,而且还会通知DBWn执行操作(write datafile , archive log file 等)。

再说一下System Checkpoint SCN和Datafile Checkpoint SCN,这两个SCN都是记录在控制文件当中的。但是这两个SCN有什么作用呢?


1.对于只读表空间(readonly tablespace) ,其数据文件的Datafile Checkpoint SCN、Start SCN和END SCN号均相同。这三个SCN在表空间处于只读期间都将被冻结。

 

2.如果控制文件不是当前的控制文件(其实就是说,想比当前redo log的SCN来讲,控制文件已经过时了),则System checkpoint SCN会小于Start SCN(Start SCN是来自实际的数据文件头,有比较依据)。记录这些SCN号,可以区分控制文件是否是当前的控制文件。当有一个Start SCN(从当前各个在线数据文件中获得)号超过了System Checkpoit SCN号时,则说明控制文件不是当前的控制文件,因此在做recovery时需要采用using backup controlfile。这是为什么需要记录SystemCheckpoint SCN的原因之一。


 控制文件已经过时,我们需要重建控制文件,重建方式分两种(resetlogs 和 noresetlogs)


1.使用resetlogs选项时,System Checkpoint SCN为被归为0,而其中记录的各个数据文件的Datafile Checkpoint SCN则来自于Start SCN(也就是说可能会从冷备份的数据文件的数据文件头中获取)。根据上述的描述,此时需要采用using backup controlfile做recovery. 因此情况是 System Checkpoint SCN=0 < Start SCN = Datafile Checkpoint SCN


2.使用noresetlogs选项时,有一个前提就是:一定要有online redo log的存在。否则就要使用resetlogs选项。这个时候控制文件重建好时,其system checkpoint SCN=Datafile Checkpoint SCN=Lastest Checkpoint SCN in online redo log,我们可以看到Datafile Checkpoint SCN并没有从Start SCN中读取。而是读取了最新的日志文件中的SCN作为自己的数据。此时重建的控制文件在恢复中的作用跟最新的控制文件类似,System Checkpoint SCN(已经读取最新的redo log的checkpoint SCN信息)可能会>Start SCN (因为数据文件可能会从冷备份中恢复),恢复时就不需要加using backup controlfile子句了

Oracle 系统改变号SCN详解

这篇文章是参考甲骨论老相老师的教学视频: http://v.youku.com/v_show/id_XNDAyNDIyMDgw.html 所做的学习笔记. 1. SCN的定义 ...
  • nvd11
  • nvd11
  • 2013-05-01 19:11:08
  • 1987

oracle中的检查点ckpt和scn号

在Oracle数据库中和checkpoint相关的SCN总共有4个 1.System checkpoint SCN  (存在于控制文件) 在系统执行checkpoint后,Oracle会更新当前控...
  • czyh1117
  • czyh1117
  • 2015-11-08 13:45:46
  • 102

scn及检查点概念解析

1、SCN的概念 SCN可以理解为oracle的内部时钟,是oracle内部自己维护的一个只增不减的序列,oracle的每个事物都是靠SCN来标示发生的先后顺序。 因为若是以系统时间为依照,若发生...
  • wang1016612067
  • wang1016612067
  • 2017-02-20 11:26:42
  • 726

个人经验总结:Oracle数据库SCN号详解

  • 2012年01月06日 20:36
  • 144KB
  • 下载

检查点详解

“三个钟”的故事:假设一个公司只有三个员工,每个员工有自己的一个钟。该公司规定,每天早晨8:30上班。有一天,非常不幸,三个员工的钟的时间各不相同,在没有其他外部因素的帮助下,他们无法确定当前的确切时...
  • YABIGNSHI
  • YABIGNSHI
  • 2013-06-13 07:31:43
  • 750

Oracle中的SCN与备份,恢复的关系。

控制文件中的SCN有3种: SQL> select current_scn from v$database; CURRENT_SCN -----------      9861...
  • wavelet123
  • wavelet123
  • 2014-06-08 17:16:31
  • 559

Oracle检查点ckpt (checkpoint)

由于Oracle中LGWR和DBWR工作的不一致,Oracle引入了检查点的概念,用于同步数据库,保证数据库的一致性。在Oracle里面,检查点分为两种:完全检查点和增量检查点。下面我们分别介绍这两种...
  • leader_ww
  • leader_ww
  • 2009-12-26 16:14:00
  • 1101

Oracle 检查点(ckpt)

Oracle 检查点(ckpt) http://apps.hi.baidu.com/share/detail/24548269
  • orion61
  • orion61
  • 2011-10-13 10:28:41
  • 306

oracle中 SCN号总结 下篇

重新创建的可以自动进行完全恢复(By biti) 示例 例子背景: oracle 8i windows 采用rman做热备,在备份期间,做不少事务,同时做alter system check...
  • changyanmanman
  • changyanmanman
  • 2012-09-24 09:24:08
  • 1875

oracle四个重要的后台进程(DBWR / LGWR / ARCH / CKPT)

使用不同颜色标识后台进程 全面了解oracle 备份和恢复机制, 参照oracle体系结构图解析进程(机构图文章有)...
  • wanghui5767260
  • wanghui5767260
  • 2014-03-08 09:51:52
  • 4733
收藏助手
不良信息举报
您举报文章:oracle中的检查点Ckpt和SCN号
举报原因:
原因补充:

(最多只允许输入30个字)