scn

一.数据变化写入数据文件的过程

1.事务开始:
2.在buffer cache中寻找需要的数据块,如果没有,则从数据文件读入数据块
3.生成重做项写入redo log buffer,修改buffer cache,被修改的区域标识为'脏缓冲区'
4.事务提交,LGWR进程将Logbuffer中的重做记录写入online redo log file中
5.当发生check point,ckpt进程更新所有数据库文件头的信息,DBWn进程将buffer cache中的脏数据写入data file中

二.最新SCN和四种SCN

  四种SCN包括系统检查点(system checkpoint)SCN,数据文件检查点(datafile checkpoint)SCN,结束SCN(stop scn),开始SCN(start scn)
除了start SCN存在于数据文件头部,其他三种都存在于控制文件中。
  在控制文件中systen change SCN是针对整个数据库全局的,只存在一个,而datafile checkpoint SCN和stop SCN是针对每个数据文件的,
每个数据文件对应一个
1.系统最新SCN
SQL> select current_scn from v$database;


CURRENT_SCN
-----------
    1254832
2.system checkpoint SCN
  当checkpoint(检查点)完成后,oracle将system checkpoint scn存放在控制文件中
SQL> select checkpoint_change# from v$database;


CHECKPOINT_CHANGE#
------------------
           1236767
 通过多次查询可以发现,该scn没有发生变化并且小于系统当前scn
SQL> alter system checkpoint;
System altered.
  执行检查点之后再查询可知,系统检查点scn同步至最新的scn
3.datafile checkpoint scn(数据文件检查点scn)
  当checkpoint完成后,oracle将datafile checkpoint scn号存放在控制文件中,每个文件都对应有一个datafile checkpoint scn
SQL> select name,checkpoint_change# from v$datafile;
4.start SCN
  start SCN存放在数据文件头中,用于检查数据库启动过程是否需要做media recovery(介质恢复)
SQL> select name,checkpoint_change# from v$datafile_header;
查询可知每个数据文件都有一个对应的开始SCN,并和数据文件scn一致
  将表空间test脱机
SQL> alter system checkpoint;
再次查看数据文件scn和start scn发现该表空间对应的start scn无法读取到而datafile scn保留在脱机的那一时间
5.stop scn
  stop scn存放在控制文件中,用于检查数据库启动过程是否需要做instance recovery
SQL> select name,last_change# from v$datafile;
在数据库正常运行的情况下,对可读写的online的数据文件,该scn号为null或者说无穷大

三.过程详解

  记录日志时,回自动记录最新的scn到日志中,所以,每一条日志都包含了一个时间。当DBWn启动时,将依照日志记录写入一段数据。
这一段日志记录的时间段有一个最早时间和一个最新时间。最早时间成为LOW SCN(即上次清空日志后的第一条记录),最新时间成为next scn
(下次日志清空前的最近一条记录)
  由ckpt进程将next scn的值同步更新到start scn,system checkpoint scn和datafile checkpoint scn,确保文件的一致性。

四.scn号与数据库启动

  oracle在启动的过程中首先检查是否需要media recovery,然后再检查是否需要instance recovery
1.检查是否需要介质恢复
  在数据库启动过程中,当system checkpoint scn,datafile checkpoint scn和start scn号都相同时,数据库可以正常启动,不需要做
介质恢复,当三者有一个不同时,则需要做Media recovery
2.检查是否需要实例恢复
  如果在启动的过程中,end scn号为null,则需要做instance recovery,因为数据库正常关闭时,会触发一个checkpoint,同时将数据文件的
end scn设置为相应数据文件的start scn号,数据库异常关闭时,end scn号将为null

五.system scn和datafile scn

1.对于只读表空间,其数据文件的datafile checkpoint scn,start scn和end scn号均相同。这三个scn在表空间处于只读期间都将被冻结。
2.如果控制文件不是当前的控制文件,则system checkpoint会小于start scn或end scn
记录这些scn,可以区分控制文件是否是当前的控制文件



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值