我们重点讨论几个SCN

控制文件中的SCN

1、系统检查点SCN

当一个检查点动作完成以后,Oracle就把系统检查点的SCN存储到控制文件中

SCN浅析_blank

2、数据文件检查点SCN

当一个检查点动作完成以后,Oracle就把每一个数据文件的SCN单独存放在控制文件中

SCN浅析_blank_02

1、为了显示,首先看一下DESC,确定每一个列的大小

2、设置linesize,保证一行中能够容纳所有的列

当然也要考虑实际的大小

同时还可以设置pagesize的大小

3、终止SCN

联机读写模式下面的所有的数据文件的终止SCN为空或者无限大

SCN浅析_blank_03

数据文件中的SCN

1、启动SCN

SCN浅析_blank_04

数据文件的检查点信息写入到每一个数据文件的头部

1、数据库正常运行期间,控制文件中的系统检查点SCN、控制文件中数据文件检查点信息、每个数据文件头部的数据文件检查点SCN,都是相同的

2、控制文件中每个数据文件的终止SCN都为NULL

数据库正常关闭,系统执行一个CHECKPOINT,将所有的数据文件的终止SCN(位于控制文件中)设置成数据文件头部的启动SCN

数据库安全关闭以后,四个SCN应该是相同的

数据库启动

1、数据文件头部的启动SCN与控制文件中数据文件检查点SCN比较

如果相同,继续

2、数据文件头部的启动SCN与控制文件中数据文件终止SCN比较

如果相同,那么表示正常关机,不需要恢复

3、数据库打开,控制文件中数据文件终止SCN被设置为NULL

数据库被打开,并且正常使用

 

熊熊物语:说白了吧,UNDO表空间就是一个历史滚滚长流,每一个SCN版本号可以理解成一个已经过去的朝代,如果你想玩穿越,就得有个具体的SCN版本号,才能穿越过去

那为什么SCN号不对应不行呢,很简单,比如一个康熙当政的时候,他媳妇儿是皇后,等他挂了,雍正继位,皇太后就是德妃娘娘了,那个皇后怎么办,不能再用前朝的SCN号了,就得改新的SCN号,叫皇太妃,对吧(哈哈,架空历史,假设假设)