SCN小结

SCN,系统改变号system change number,是在某个时间点定义数据库已提交版本的时间戳标记。

SCN是一个6字节(48bit)的数字,其值为281,474,976,710,656(2^48),分为2个部分:

SCN_BASE是一个4字节(32bit)的数字

SCN_WRAP是一个2字节(16bit)的数字

每当SCN_BASE达到其最大值(2^32 = 4294967296)时,SCN_WRAP增加1,SCN_BASE将被重置为0,一直持续到SCN_WRAP达到其最大值,即2^16 = 65536。

SCN=(SCN_WRAP * 4294967296)+ SCN_BASE

SCN随着每个事务的完成而增加。提交不会写入数据文件,也不更新控制文件。当发生checkpoint时,控制文件更新,SCN被写入到控制文件。

总共有4种SCN:

系统检查点(System Checkpoint)SCN :

当checkpoint完成后,ORACLE将SystemCheckpoint SCN号存放在控制文件中。我们可以通过下面SQL语句查询:

select checkpoint_change# from v$database;

数据文件检查点(Datafile Checkpoint)SCN:

当checkpoint完成后,Oracle将DatafileCheckpoint SCN存放在控制文件中。我们可以通过下面SQL语句查询所有数据文件的Datafile Checkpoinnt SCN。

select name,checkpoint_change# from v$datafile;

结束SCN(Stop SCN):

ORACLE将StopSCN存放在控制文件中。这个SCN号用于检查数据库启动过程是否需要做instance recovery。我们可以通过以下SQL语句查询:

select name,last_change# from v$datafile;

在数据库正常运行的情况下,对可读写的online数据文件,该SCN号为NULL。

开始SCN(Start SCN):

Oracle将StartSCN存放在数据文件头中。这个SCN用于检查数据库启动过程是否需要做media recovery。我们可以通过以下SQL语句查询:

select name,checkpoint_change# from v$datafile_header;

SCN与数据库启动:

Oracle在启动过程中首先检查是否需要media recovery,然后再检查是否需要instance recovery。

media recovery判断:
System Checkpoint SCN、Datafile Checkpoint SCN和Start SCN

instance recovery判断:
Start SCN和Stop SCN

SCN与数据库关闭:

如果数据库的正常关闭的话,将会触发一个checkpoint,同时将数据文件的END SCN设置为相应数据文件的Start SCN。当数据库启动时,发现它们是一致的,则不需要做instance recovery。在数据库正常启动后,ORACLE会将END SCN设置为NULL.如果数据库异常关闭的话,则END SCN将为NULL。

上一篇:Spark 持久化介绍(cache/persist/checkpoint)


下一篇:Flink 1.11.2 SQL 读写 MySQL