ITPUB??ì3
12月微软Hyper-V虚拟化沙龙主题征集
ITPUB论坛 » Oracle专题深入讨论 » 关于SCN的理解,请指正

标题: [精华] 关于SCN的理解,请指正
离线 bellsz
中级会员



精华贴数 2
个人空间 0
技术积分 826 (2332)
社区积分 14 (9106)
注册日期 2002-5-13
论坛徽章:1
授权会员     
      

发表于 2003-7-24 20:19 
关于SCN的理解,请指正

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时发生回滚。

请大家帮助纠正一下,谢谢!


只看该作者    顶部
离线 wugaokai
中级会员


精华贴数 0
个人空间 0
技术积分 780 (2473)
社区积分 0 (81108)
注册日期 2003-3-19
论坛徽章:0
      
      

发表于 2003-7-24 20:25 
请问SCN是什么呀?是干么的?

谢谢!!!


__________________
I  LIKE FREEDOM!
只看该作者    顶部
在线/呼叫 biti_rainy
人生就是如此



精华贴数 38
个人空间 0
技术积分 111199 (4)
社区积分 11832 (132)
注册日期 2001-12-12
论坛徽章:41
现任管理团队成员ITPUB长老会成员ITPUB元老年度论坛发贴之星年度论坛发贴之星ITPUB北京九华山庄2008年会纪念徽章
管理团队2007贡献徽章参与2007年甲骨文全球大会(中国上海)纪念ITPUB北京香山2007年会纪念徽章管理团队2006纪念徽章会员2007贡献徽章会员2006贡献徽章

发表于 2003-7-24 22:20 
Re: 关于SCN的理解,请指正



QUOTE:
最初由 bellsz 发布

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,回滚是根据回滚段头的事务表状态来进行的







__________________
眼界决定边界,态度决定高度
blog:
人生就是如此
只看该作者    顶部
离线 fals
拿到本了,新手,请多关照


精华贴数 4
个人空间 0
技术积分 6368 (213)
社区积分 2249 (569)
注册日期 2002-7-10
论坛徽章:19
现任管理团队成员ITPUB元老管理团队2006纪念徽章会员2006贡献徽章行业板块每日发贴之星行业板块每日发贴之星
行业板块每日发贴之星2008年新春纪念徽章行业板块每日发贴之星   

发表于 2003-7-24 22:24 
精致入微,叹为观止!!

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


__________________
又要签名啊?
同意!请转领导审批。
只看该作者    顶部
离线 bellsz
中级会员



精华贴数 2
个人空间 0
技术积分 826 (2332)
社区积分 14 (9106)
注册日期 2002-5-13
论坛徽章:1
授权会员     
      

发表于 2003-7-25 08:10 
biti ,高!!!


只看该作者    顶部
离线 bellsz
中级会员



精华贴数 2
个人空间 0
技术积分 826 (2332)
社区积分 14 (9106)
注册日期 2002-5-13
论坛徽章:1
授权会员     
      

发表于 2003-7-25 09:03 
Re: Re: 关于SCN的理解,请指正



QUOTE:
最初由 biti_rainy 发布


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

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

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

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


只看该作者    顶部
在线/呼叫 biti_rainy
人生就是如此



精华贴数 38
个人空间 0
技术积分 111199 (4)
社区积分 11832 (132)
注册日期 2001-12-12
论坛徽章:41
现任管理团队成员ITPUB长老会成员ITPUB元老年度论坛发贴之星年度论坛发贴之星ITPUB北京九华山庄2008年会纪念徽章
管理团队2007贡献徽章参与2007年甲骨文全球大会(中国上海)纪念ITPUB北京香山2007年会纪念徽章管理团队2006纪念徽章会员2007贡献徽章会员2006贡献徽章

发表于 2003-7-25 11:24 
Re: Re: Re: 关于SCN的理解,请指正



QUOTE:
最初由 bellsz 发布


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





__________________
眼界决定边界,态度决定高度
blog:
人生就是如此
只看该作者    顶部
离线 liec
中级会员



精华贴数 0
个人空间 0
技术积分 516 (3805)
社区积分 0 (85362)
注册日期 2003-5-8
论坛徽章: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文件头。
请批评指正,谢谢


__________________
Keep improving, enjoy mylife, help others...
只看该作者    顶部
在线/呼叫 biti_rainy
人生就是如此



精华贴数 38
个人空间 0
技术积分 111199 (4)
社区积分 11832 (132)
注册日期 2001-12-12
论坛徽章:41
现任管理团队成员ITPUB长老会成员ITPUB元老年度论坛发贴之星年度论坛发贴之星ITPUB北京九华山庄2008年会纪念徽章
管理团队2007贡献徽章参与2007年甲骨文全球大会(中国上海)纪念ITPUB北京香山2007年会纪念徽章管理团队2006纪念徽章会员2007贡献徽章会员2006贡献徽章

发表于 2003-7-25 16:50 
o



QUOTE:
最初由 liec 发布
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文件头。
请批评指正,谢谢


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

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


__________________
眼界决定边界,态度决定高度
blog:
人生就是如此
只看该作者    顶部
离线 Ian
中级会员



精华贴数 1
个人空间 0
技术积分 1003 (1863)
社区积分 2 (24396)
注册日期 2003-3-18
论坛徽章:0
      
      

发表于 2003-7-25 16:59 
data block里面不是也有SCN吗?和文件头里面的SCN有什么关系?什么时候被更新?代表的是是什么含义?


只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问