SCN号
时间的作用:比较先后、比较顺序
系统使用数字来比较先后顺序
Oracle数据库里面很多地方需要用到时间,主要用来确认时间先后顺序,这些地方都是SCN号来标识
1、redo日志中会记录scn号
2、redo log文件头部会有开两个scn号码
first change#、next change#
日志文件的第一条redo log对应的scn号
下一个日志文件第一条redo log对应的scn号
对于corrent redo log(当前正在使用的redo log文件),next change#为null(无穷大)
3、数据文件头部会记录SCN号
4、控制文件中记录所有数据文件的SCN号
关于控制文件中每一个数据文件的SCN号有两个
文件 SCN号、终止SCN号
终止SCN号就是文件关闭时的SCN号
终止SCN号用来确定数据文件是否正常关闭,如果为null,就需要进行恢复
5、系统SCN号
代表系统当前最新时间的SCN
6、数据块头部有SCN号,代表数据库的新旧程度
7、提交的时候,会有SCN号,存储事务提交的顺序
SCN
1、每一个数据库SCN号没有可比性,只能在自己内部比较
2、SCN号只能递增
3、SCN设计使用500年
4、数据库互相之间访问的时候,特别是形成网状结构的时候,英文bug很容易导致SCN疯长,达到房顶
5、只能重建数据库
6、SCN号主要用来比较新旧,没有必要实时更新
系统SCN改变的两种情况
1、redo log切换
2、大量的脏页回写的时候
查看系统SCN号
select *from v$database;
查看数据文件头部SCN号
select CHECKPOINT_CHANGE# from v$datafile_header;
查看redo日志文件SCN号
select FIRST_CHANGE#,NEXT_CHANGE# from v$log;
查看控制文件中记录的SCN号
select last_change#,checkpoint_change# from datafiles;