您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Oracle SCN 实现机制总结

2026/1/15 4:44:25发布19次查看
scn(system chang number)作为oracle中的一个重要机制,在数据恢复、data guard、streams复制、rac节点间的同步等各个功能中起
scn(system chang number)作为oracle中的一个重要机制,在数据恢复、data guard、streams复制、rac节点间的同步等各个功能中起着重要作用。理解scn的运作机制,可以帮助你更加深入地了解上述功能。
在理解scn之前,我们先看下oracle事务中的数据变化是如何写入数据文件的:
1、事务开始;
2、在buffer cache中找到需要的数据块,如果没有找到,则从数据文件中载入buffer cache中;
3、事务修改buffer cache的数据块,该数据被标识为“脏数据”,并被写入log buffer中;
4、事务提交,lgwr进程将log buffer中的“脏数据”写入redo log file中;
5、当发生checkpoint,ckpt进程更新所有数据文件的文件头中的信息,dbwn进程则负责将buffer cache中的脏数据写入到数据文件中。
经过上述5个步骤,事务中的数据变化最终被写入到数据文件中。但是,一旦在上述中间环节时,数据库意外宕机了,在重新启动时如何知道哪些数据已经写入数据文件、哪些没有写呢(同样,在dg、streams中也存在类似疑问:redo log中哪些是上一次同步已经复制过的数据、哪些没有)?scn机制就能比较完善的解决上述问题。
scn是一个数字,确切的说是一个只会增加、不会减少的数字。 正是它这种只会增加的特性确保了oracle知道哪些应该被恢复、哪些应该被复制。
这四个分别是:
1.system checkpoint scn
当checkpoint完成后,oracle将system checkpoint scn号存放在控制文件中。我们可以通过下面sql语句查询:
select checkpoint_change# from v$database;
2.datafile checkpoint scn
当checkpoint完成后,oracle将datafile checkpoint scn号存放在控制文件中。我们可以通过下面sql语句查询所有数据文件的datafile checkpoinnt scn号。
select name,checkpoint_change# from v$datafile;
3.start scn号
oracle将start scn号存放在数据文件头中。
这个scn用于检查数据库启动过程是否需要做media recovery.
我们可以通过以下sql语句查询:
select name,checkpoint_change# from v$datafile_header;
4.end scn (stop scn)号
oracle将end scn号存放在控制文件中。
这个scn号用于检查数据库启动过程是否需要做instance recovery.
我们可以通过以下sql语句查询:
select name,last_change# from v$datafile;
在数据库正常运行的情况下,对可读写的,,online的数据文件,该scn号为null.
scn号与数据库启动
在数据库启动过程中,当system checkpoint scn、datafile checkpoint scn和start scn号都相同时,数据库可以正常启动,不需要做media recovery.三者当中有一个不同时,则需要做media recovery。如果在启动的过程中,end scn号为null,则需要做instance recovery。oracle在启动过程中首先检查是否需要media recovery,然后再检查是否需要instance recovery。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product