`

oracle中的检查点Ckpt和SCN号

 
阅读更多

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机制解析

    Oracle SCN(System Change Number)机制是Oracle数据库中用于追踪和管理数据变化的关键组件。SCN是一个不断递增的数字,确保了数据库能够准确地识别和处理事务中的数据修改,尤其是在故障恢复、Data Guard、Streams...

    oracle scn

    当发出 ckpt 时,ckpt 会将检查点时刻的 scn 写入到控制文件和数据文件头部,同时会促使 dbwr 进程将 data buffer 中的所有的脏数据写入到数据文件中。 Checkpoint 的具体工作包括: * 触发 DBWn 向磁盘写入 Dirty...

    检查点SCN深入研究

    检查点SCN(System Change Number)是Oracle数据库中用于数据一致性与恢复的关键概念。SCN是一个全局递增的序列号,记录了数据库发生的每一次变化,确保在实例故障或崩溃后,能够通过重做日志恢复到一致性的状态。 ...

    oracle_检查点概念及说明解读.pdf

    总结来说,Oracle检查点是数据库维护的重要组成部分,它协调数据写入、保证数据一致性,并优化数据库的恢复效率。通过理解检查点的概念和工作原理,DBA可以更好地管理和优化数据库性能,确保数据安全。

    Oracle SCN机制解析.docx

    5. 检查点(checkpoint)发生时,CKPT进程更新控制文件和数据文件头部信息,DBWn进程将Buffer Cache的脏数据写入数据文件。 SCN机制解决了在数据库意外宕机后确定已写入数据和未写入数据的问题。主要有四种类型的...

    ORACLE中数据库的恢复策略.pdf

    检查点(CKPT)进程则会在适当时间更新控制文件和数据文件头,记录当前SCN,确保数据文件、控制文件和重做日志的一致性。 重做日志(Redo Log)由一系列重做记录组成,记录了数据块、回滚段块和事务表的变化。如果在...

    Checkpoint Oracle

    缓冲区管理使用了双向链表结构,例如REPL(正在使用的缓冲区)、REPL-AUX(准备用于I/O或CR构建的缓冲区)、WRITE(需要I/O的脏缓冲区)和CKPT-Q(写入检查点的脏缓冲区)。通过Touch Count来确定REPL链中缓冲区的...

    oracle原厂培训笔记

    - **增量检查点** (Checkpoint Not Complete): 仅更新控制文件中的SCN。 - **完全检查点** (Handy Checkpoint): 更新控制文件和数据文件。 - **恢复机制**: - **SMON (System Monitor)**: 负责恢复失败的事务至...

    oracle体系结构8.09

    - **功能**:CKPT进程负责更新控制文件中的检查点记录。检查点的发生是为了同步数据库缓冲区中的数据与物理磁盘文件之间的状态。 - **触发条件**:日志切换(Log Switch)会触发检查点。 ##### 4. SMON(System ...

    关于checkpoint比较经典的解释

    1. **记录检查点状态**:系统会记录该检查点发生的系统变更编号(SCN)和最后一次修改的DB_Buffer块的Redo Byte Address (RBA)。 2. **写入数据块**:CKPT进程会促使DBWR进程将之前修改的所有DB_Buffer中的数据块写入...

    oracle checkpoint

    其主要目的是将脏缓冲区(Dirty Buffer)中的数据写入数据文件,并更新控制文件和重做日志文件中的检查点信息。通过这种方式,可以确保在发生故障时,数据库能够快速恢复到一个一致的状态。 #### 三、Checkpoint ...

    ORACLE_数据库备份和恢复

    在Oracle正常运行过程中,CKPT(检查点)进程起着关键作用,它确保内存中的数据块被写入数据文件,并更新控制文件以记录当前系统状态。物理备份通常包括备份数据文件、控制文件、参数文件和归档日志文件,以确保在...

    oracle 培训笔记

    后台进程如SMON(系统监控)、PMON(进程监控)、DBWR(数据写入)、LGWR(日志写入)、CKPT(检查点)和ARCH(归档)执行各种系统任务。 **数据库组件** 数据库由数据文件、控制文件、重做日志、参数文件、口令...

    Oracle架构的基础知识(入门级)

    - **CKPT**(Checkpoint Process):协调检查点,确保数据库的一致性。 这些进程协同工作,确保数据库的高效稳定运行。 #### 五、SCN(System Change Number) SCN是一个递增的序列号,用来标识数据库中的每一次...

    oracle结构体系组件

    - **提交**:提交事务时,LGWR进程会将重做日志记录写入重做日志文件,CKPT进程确保数据文件头和控制文件中的SCN(系统更改号)与重做日志文件中的SCN一致。 #### 五、数据库管理员的角色 数据库管理员(DBA)负责...

    Oracle的体系

    - **检查点进程(CKPT)**:更新控制文件和数据文件中的数据库状态信息。 - **归档进程(ARCn)**:在日志切换时对重做日志进行归档。 - **服务进程**:响应用户进程的请求,执行SQL语句等操作。 - **用户进程**:...

    oracle 10G常见进程

    - 在定期检查点(Checkpoint)期间,CKPT进程会触发DBWn进程将数据写入磁盘。 **参数配置**: - `db_writer_processes` 参数用于指定DBWn进程的数量,默认情况下,Oracle会根据系统的CPU和处理器数量自动设定这一...

Global site tag (gtag.js) - Google Analytics