li
  当前位置:主页 > 性能优化 > 文章内容
li
关于检查点的一点具体应用讨论
来源: www.ixdba.net  作者: IXDBA.NET官方    时间:2006-09-30   阅读:29  
本文章共5242字,分4页,当前第1页,快速翻页:
 

Commit成功后,数据还会丢失吗?

解答:
对于Oracle来说,用户所做的DML操作一旦被提交,则先是在database buffer cache 中进行修改,同时在修改之前会将数据的前镜像保存在回滚段中,然后将修改之前和修改之后的数据都写入到redo log buffer中,当接收到commit命令之后,则redo log buffer开始写redo log file ,并且记录此时的scn,当redo log file 写完了之后,表示这次事务提交操作已经确认被数据库记录了,只有当redo log file 写成功了,才会给用户 Commit completed 的成功字样。而对于Database buffer cache中的dirty buffer则会等待触发DBWn才写入,但是如果此时断电,则数据已经被记录到了redo log file中,系统在重新启动的时候,会自动进行嵌滚和回滚来保证数据的一致。所以,只要是commit成功的了,数据不会丢失!
IXDBA.NET社区论坛

数据库发生一次DBWn,是否将所有buffer cache 中的dirty buffer 都写入,还是先将脏队列中的数据写入? 

解答:
这话看起来有道理,但实际上,dbwr在写的时候又不断地在产生dirty buffer ,所以说检查点发生的时候是期望把该时间点之前的所有脏缓冲区写入数据文件。
所有的buffer,不在LRU list上就在dirty list, dbwr写入的时候,一次写的块数是有一个批量写的隐藏参数控制的。
所以说要是 dbwr dirty list也好, lru list上的也好,要实现全部写入,都是一个现实系统中很难存在的现象。dirty 总是在不断的产生,dbwr总是在不断地写,增量检查点发生的时候也并不意味着一定要更新数据文件头,检查点开始的时候只表示该次检查点结束的时候要更新数据文件头的话数据文件头具有该时间点的一致性。

data block
里面不是也有SCN吗?和文件头里面的SCN有什么关系?什么时候被更新?代表的是是什么含义?

解答:
data block 
里面的SCN是当 block 被更改的时候的 SCN 
而数据文件有那么多 block,自然不同的 block有不同的 SCN
block
中存在 block SCN  ITL 中的commit SCN
block SCN 
又在块头和块位都有,若不一致意味着block损坏(热碑可能出现这个情况,需要从redo log中拷贝回来,若是正在修改的过程中由于进程死掉则 pmon负责清理。若 由于一些以外发生这样的不一致的情况,则查询的时候出现 1578 错误,当然该错误号也可能是 物理磁盘损坏,这里表示逻辑的损坏!)
这个头和尾的 SCN 的检查时机跟这两个参数有关:
db_block_checking boolean FALSE
db_block_checksum boolean FALSE
2参数信息请查阅  http://tahiti.oracle.com
ITL 中的 commit SCN 则跟 consistent gets and delay block cleanout 有关
数据文件头的 SCN 是检查点发生时更新的,代表着  恢复的时候从这个 SCN  开始在 log file 中寻找 redo 开始做恢复。


看下面的操作!
___________________________________________________________
sys@DBAP01> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;

MAX(KTUXESCNW*POWER(2,32)+KTUX

------------------------------

                      52211024



阅读更多内容1 · 2 · 3 · 4 · 下一页>>


  上一篇: 关于数据库open的深入探究   下一篇: 监听器连接常见的问题及其解决方...
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·关于数据库open的深入探究
·监听器连接常见的问题及其解决方...
·Linux系统中无法启动rman问题
·redo文件为active状态的理解
·oracle多归档路径的设置
·一次坏块的处理过程
·如何处理 Ora-600 4193 错误
·回滚段机制深入研究
·损坏数据文件的恢复方法
·损坏控制文件的恢复方法
·丢失redo文件,如何恢复?
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接