关于oracle SCN 的讨论

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:   1、SCN存在redo log文件,control文件、数据文件;2、oracle正常运行时,control文件的SCN是个很大的数,与redo log文件、数据文件的SCN不同,正常关闭时,做完checkpoint后,三者的SCN值相同;日志文件中scn有起始和结束2个(高低),在current log中高scn同样为 无穷大 3、当一个事务commit成功时,redo log文件中的SCN+1,当该事务所做的修改写入数据文件后,数据文件的SCN+1; commit的时候加一,其他很多时候也会加1,只要数据库发生了变化都会增加。

 

1、SCN存在redo log文件,control文件、数据文件;
2、oracle正常运行时,control文件的SCN是个很大的数,与redo log文件、数据文件的SCN不同,正常关闭时,做完checkpoint后,三者的SCN值相同;
日志文件中scn有起始和结束2个(高低),在current log中高scn同样为 无穷大

3、当一个事务commit成功时,redo log文件中的SCN+1,当该事务所做的修改写入数据文件后,数据文件的SCN+1;

commit的时候加一,其他很多时候也会加1,只要数据库发生了变化都会增加。 数据写入数据文件scn不是加1而是ckpt 更新,检查点发生的时候才修改数据文件头的 检查点计数和更新scn

 

4、所以,当数据库发现SCN不一致,应该是
redo log文件中的SCN>=数据文件中的SCN

5、疑问:
是不是如果一个事务比较大,在事务提交前就发生redo log entries、data buffer的写入,此时断电,则数据文件、redo log文件的SCN没有+1,且相同,但控制文件SCN不同,数据库startup时发生回滚。
数据文件是由ckpt进程更新文件头的,scn不是加1,而是更新为检查点发生那时的scn,回滚是根据回滚段头的事务表状态来进行的

数据写入数据文件scn不是加1而是ckpt 更新,检查点发生的时候才修改数据文件头的 检查点计数和更新scn

 

是不是应该这么说?:
当ckpt 更新时发生数据写入,同时修改数据文件头的 检查点计数和更新scn 。当出现其他情况下的数据写入时(如无空闲缓冲等),不发生ckpt ,但SCN会增加。

这个时候修改的是数据块但不是数据文件头,只有检查点发生的时候才更新数据文件头,也就是说只有 ckpt 进程更新数据文件头(oracle8以前如果没有ckpt进程就是lgwr更新),dbwr只写数据块


commit的时候加一,其他很多时候也会加1,只要数据库发生了变化都会增加。
很多时候,能否举一些例子

dml一发生即使没有提交也会增加scn, job进程一样产生scn,只要对数据库中文件发生任何的改变都有可能产生scn,SCN: system change number, not system commit number .也就是 系统发生变化 所产生的一个时间点标志。不是提交的标志,只是因为提交也是系统的变化之一而已

CKPT发生时REDO LOG纪录对应SCN和CHECK POINT SEQUENCE#并立即由LGWR将REDO LOG BUFFER中的内容全部写入REDO LOGFILE;同时DBWR将BUFFER CACHE内容写入DATEFILE。
待LGWR和DBWR完成工作,CKPT将LOG SEQUENCE#、CHECK POINT SEQUENCE#和SCN写入DATAFILE和CONTROLFILE文件头。

检查点的发生,跟写日志文件是没有必然联系的
检查点通知 DBWR 写数据文件,写完后ckpt更新控制文件 和数据文件头

当DBWR 写 数据块的时候若发现 数据块的 相关 RDBA (位于日志文件的位置) 的 log block 还没有被写入日志文件,则在dbwr写块之前必须通知llgwr把log buffer 中日志写入日志文件

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
SQL Oracle 关系型数据库
【体系结构】有关Oracle SCN知识点的整理--补充内容
【体系结构】有关Oracle SCN知识点的整理--补充内容   小麦苗自己整理的内容参考:【体系结构】有关Oracle SCN知识点的整理  http://blog.itpub.net/26736162/viewspace-2126407/ DBA入门之认识Oracle SCN(System Change Number) 1. SCN的定义 SCN(System Change Number),也就是通常所说的系统改变号,是数据库中非常重要的一个数据结构。
2336 0
|
SQL Oracle 关系型数据库
Oracle SCN简述
什么是SCN?  SCN即system change number,是一个用来维护数据改变版本的数字。其实可以等同于我们所认知的时间,但是若使用我们习惯的时间格式来做比较,数据库的工作量会很大。基于这一点,Oracle将每个时间转换成一个SCN号,使用SCN比较时间先后。
3761 0
|
关系型数据库 数据库 Oracle
Oracle数据库的SCN转换成时间和时间转换成SCN
Scn转换成时间: select to_char(scn_to_timestamp(3998591352171),'YYYY-MM-DD HH24:MI:SS') from dual;   时间转换成scn: select timestamp_to_scn(t...
1103 0
|
Oracle 关系型数据库
【体系结构】有关Oracle SCN知识点的整理
                                                                                                                            ...
776 0
|
SQL 监控 算法
oracle中 SCN号总结 上篇
1、SCN(System Change Number) : SCN是什么? system change number (SCN)是一个非常重要的标记,Oracle使用它来标记数据库在过去时间内的状态和轨迹。
1482 0