使用道具 举报
最初由 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]
最初由 biti_rainy 发布 [B] [/B]
最初由 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]
最初由 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]
本版积分规则 发表回复 回帖后跳转到最后一页