查看: 50783|回复: 84

[精华] 关于SCN的理解,请指正

[复制链接]
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
发表于 2003-7-24 20:19 | 显示全部楼层 |阅读模式
1、SCN存在redo log文件,control文件、数据文件;
2、oracle正常运行时,control文件的SCN是个很大的数,与redo log文件、数据文件的SCN不同,正常关闭时,做完checkpoint后,三者的SCN值相同;
3、当一个事务commit成功时,redo log文件中的SCN+1,当该事务所做的修改写入数据文件后,数据文件的SCN+1;
4、所以,当数据库发现SCN不一致,应该是
redo log文件中的SCN>=数据文件中的SCN
5、疑问:
是不是如果一个事务比较大,在事务提交前就发生redo log entries、data buffer的写入,此时断电,则数据文件、redo log文件的SCN没有+1,且相同,但控制文件SCN不同,数据库startup时发生回滚。

请大家帮助纠正一下,谢谢!
论坛徽章:
0
发表于 2003-7-24 20:25 | 显示全部楼层
请问SCN是什么呀?是干么的?

谢谢!!!

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
发表于 2003-7-24 22:20 | 显示全部楼层

Re: 关于SCN的理解,请指正

最初由 bellsz 发布
[B]
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


5、疑问:
是不是如果一个事务比较大,在事务提交前就发生redo log entries、data buffer的写入,此时断电,则数据文件、redo log文件的SCN没有+1,且相同,但控制文件SCN不同,数据库startup时发生回滚。

数据文件是由ckpt进程更新文件头的,scn不是加1,而是更新为检查点发生那时的scn,回滚是根据回滚段头的事务表状态来进行的


[/B]

使用道具 举报

回复
论坛徽章:
33
ITPUB元老
日期:2005-09-16 10:42:482012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主3段
日期:2012-05-15 15:24:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
发表于 2003-7-24 22:24 | 显示全部楼层
精致入微,叹为观止!!

真的不是盖的,佩服佩服。

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
 楼主| 发表于 2003-7-25 08:10 | 显示全部楼层
biti ,高!!!

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
 楼主| 发表于 2003-7-25 09:03 | 显示全部楼层

Re: Re: 关于SCN的理解,请指正

最初由 biti_rainy 发布
[B] [/B]


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

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

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

另,我相信很多人对SCN、CHECKPOINT不太清楚,能否给我们讲讲,就像回滚段一样。呵呵,不好意思了。

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
发表于 2003-7-25 11:24 | 显示全部楼层

Re: Re: Re: 关于SCN的理解,请指正

最初由 bellsz 发布
[B]

数据写入数据文件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 .也就是 系统发生变化 所产生的一个时间点标志。不是提交的标志,只是因为提交也是系统的变化之一而已
[/B]

使用道具 举报

回复
认证徽章
论坛徽章:
0
发表于 2003-7-25 16:36 | 显示全部楼层
biti,我理解是这样的:
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文件头。
请批评指正,谢谢

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
发表于 2003-7-25 16:50 | 显示全部楼层

o

最初由 liec 发布
[B]biti,我理解是这样的:
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文件头。
请批评指正,谢谢 [/B]


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

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

使用道具 举报

回复
论坛徽章:
0
发表于 2003-7-25 16:59 | 显示全部楼层
data block里面不是也有SCN吗?和文件头里面的SCN有什么关系?什么时候被更新?代表的是是什么含义?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表