楼主: 晶晶小妹

[原创] 晶晶实验九之详细论述增量检查点篇

[复制链接]
论坛徽章:
38
2010新春纪念徽章
日期:2010-01-04 08:33:082012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25版主2段
日期:2012-05-15 15:24:11优秀写手
日期:2013-12-18 09:29:08马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
51#
 楼主| 发表于 2008-3-4 13:28 | 只看该作者
原帖由 fly_bug 于 2008-3-4 12:02 发表


这里存在问题,比如A块执行了两次insert操作,第二次insert操作的rba在D块的lrba之后,那么实际上A块的两次操作的结果都已经写入了磁盘。在实例恢复时,取出控制文件中的所记录的D块的lrba,开始apply日志,那么就会读到A块第二次insert操作的rba,如果这时候又执行了一次insert操作岂不是出问题了?

不知道我说清楚没有?

所以我觉得数据库应该要保留该块最后一次更新的rba或者scn,这样在前滚的时候才可以判断日志中的哪些rba需要apply。



重复的应用重做日志,并不会有影响。Oracle在日志中记录的,不是DML命令,而是命令的结果。如果将1改为了2,Oracle并不会记录列=列+1,而是在日志中记录个2。重复应用日志,不会影响数据的准确性。

使用道具 举报

回复
论坛徽章:
2
2008新春纪念徽章
日期:2008-02-13 12:43:032010新春纪念徽章
日期:2010-03-01 11:08:24
52#
发表于 2008-3-4 13:53 | 只看该作者
原帖由 晶晶小妹 于 2008-3-4 13:28 发表



重复的应用重做日志,并不会有影响。Oracle在日志中记录的,不是DML命令,而是命令的结果。如果将1改为了2,Oracle并不会记录列=列+1,而是在日志中记录个2。重复应用日志,不会影响数据的准确性。


update是不会影响,但是insert操作就会影响了!

使用道具 举报

回复
论坛徽章:
38
2010新春纪念徽章
日期:2010-01-04 08:33:082012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25版主2段
日期:2012-05-15 15:24:11优秀写手
日期:2013-12-18 09:29:08马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
53#
 楼主| 发表于 2008-3-4 14:38 | 只看该作者
原帖由 fly_bug 于 2008-3-4 13:53 发表

做个插入操作,然后再转储日志文件,如下:
update是不会影响,但是insert操作就会影响了!


CHANGE #2 TYP:0 CLS: 1 AFN:12 DBA:0x03000b28 OBJ:52547 SCN:0x0000.0024ed21 SEQ:  1 OP:11.2
KTB Redo
op: 0x01  ver: 0x01  
op: F  xid:  0x0017.000.000000da    uba: 0x01402ce8.00e9.02
KDO Op code: IRP row dependencies Disabled
  xtype: XA flags: 0x00000000  bdba: 0x03000b28[新插入记录的块号]  hdba: 0x0300000b[段头的块号]
itli: 2  ispac: 0  maxfr: 4858
tabn: 0 slot: 2(0x2) [新插入记录的行号]size/delt: 2009
fb: --H-FL-- lb: 0x2  cc: 2
null: --
col  0: [ 2]  c2 02
col  1: [2000]
61 61 61 61 61 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
......

插入操作在日志中记录的信息不单有值的后映象,还有插入时的块号,行号.每次应用这条重做,都是在 (0x03000b28)第12号文件2856号块.(行号为0x2)即第3行.增加一条记录.
无论应用这条重做多少次,都是只在指定块的第3行增加新记录.也就是说无论应用多少次,都不会每应用一次都多插入一条新记录.

使用道具 举报

回复
论坛徽章:
2
2008新春纪念徽章
日期:2008-02-13 12:43:032010新春纪念徽章
日期:2010-03-01 11:08:24
54#
发表于 2008-3-4 15:03 | 只看该作者
原帖由 晶晶小妹 于 2008-3-4 14:38 发表


CHANGE #2 TYP:0 CLS: 1 AFN:12 DBA:0x03000b28 OBJ:52547 SCN:0x0000.0024ed21 SEQ:  1 OP:11.2
KTB Redo
op: 0x01  ver: 0x01  
op: F  xid:  0x0017.000.000000da    uba: 0x01402ce8.00e9.02
KDO Op code: IRP row dependencies Disabled
  xtype: XA flags: 0x00000000  bdba: 0x03000b28[新插入记录的块号]  hdba: 0x0300000b[段头的块号]
itli: 2  ispac: 0  maxfr: 4858
tabn: 0 slot: 2(0x2) [新插入记录的行号]size/delt: 2009
fb: --H-FL-- lb: 0x2  cc: 2
null: --
col  0: [ 2]  c2 02
col  1: [2000]
61 61 61 61 61 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
......

插入操作在日志中记录的信息不单有值的后映象,还有插入时的块号,行号.每次应用这条重做,都是在 (0x03000b28)第12号文件2856号块.(行号为0x2)即第3行.增加一条记录.
无论应用这条重做多少次,都是只在指定块的第3行增加新记录.也就是说无论应用多少次,都不会每应用一次都多插入一条新记录.


也就是说当发现插入的位置已经有记录时,oracle就会去覆盖原来的数据。

使用道具 举报

回复
论坛徽章:
38
2010新春纪念徽章
日期:2010-01-04 08:33:082012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25版主2段
日期:2012-05-15 15:24:11优秀写手
日期:2013-12-18 09:29:08马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
55#
 楼主| 发表于 2008-3-4 15:07 | 只看该作者
原帖由 fly_bug 于 2008-3-4 15:03 发表


也就是说当发现插入的位置已经有记录时,oracle就会去覆盖原来的数据。





就系这样滴

使用道具 举报

回复
论坛徽章:
23
奥运会纪念徽章:垒球
日期:2008-05-11 02:19:47参与2009年中国云计算大会纪念
日期:2009-06-05 10:02:282009新春纪念徽章
日期:2009-01-04 14:52:28奥运会纪念徽章:排球
日期:2008-06-12 15:53:51奥运会纪念徽章:曲棍球
日期:2008-06-06 08:20:36奥运会纪念徽章:摔跤
日期:2008-06-03 14:09:36奥运会纪念徽章:举重
日期:2008-06-03 09:25:06奥运会纪念徽章:帆船
日期:2008-06-01 11:28:05奥运会纪念徽章:铁人三项
日期:2008-05-30 08:42:05参与物流供应链俱乐部活动纪念
日期:2009-11-23 14:40:35
56#
发表于 2008-3-4 15:11 | 只看该作者
熬夜這么晚

使用道具 举报

回复
论坛徽章:
0
57#
发表于 2008-3-4 16:15 | 只看该作者
原帖由 晶晶小妹 于 2008-3-4 15:07 发表





就系这样滴


MM,这个问题是否混淆概念呢?
比如A块执行了两次insert操作,第二次insert操作的rba在D块的lrba之后,那么实际上A块的两次操作的结果都已经写入了磁盘。在实例恢复时,取出控制文件中的所记录的D块的lrba,开始apply日志,那么就会读到A块第二次insert操作的rba;

两次操作的结果都已经写入了磁盘,说明该块已经写入磁盘,为何还需要在Cache recovery时重新构造该块到CACHE 队列?

[ 本帖最后由 eagle3250 于 2008-3-4 16:18 编辑 ]

使用道具 举报

回复
论坛徽章:
38
2010新春纪念徽章
日期:2010-01-04 08:33:082012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25版主2段
日期:2012-05-15 15:24:11优秀写手
日期:2013-12-18 09:29:08马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
58#
 楼主| 发表于 2008-3-4 21:41 | 只看该作者
原帖由 eagle3250 于 2008-3-4 16:15 发表

MM,这个问题是否混淆概念呢?
比如A块执行了两次insert操作,第二次insert操作的rba在D块的lrba之后,那么实际上A块的两次操作的结果都已经写入了磁盘。在实例恢复时,取出控制文件中的所记录的D块的lrba,开始apply日志,那么就会读到A块第二次insert操作的rba;

两次操作的结果都已经写入了磁盘,说明该块已经写入磁盘,为何还需要在Cache recovery时重新构造该块到CACHE 队列?


实例恢复时,是无法根据一个块是脏块或者不是脏块来判断是否对这个块进行恢复的.实例恢复的起始点就是控制文件中的low cache rba,即使在此RBA之后的重做信息.所对应的块的修改已经被写进磁盘,也要在重新对这些块应用重做.一个块被重复修改多次,是正常的.每次对块的修改,都会有重做记录生成.那些RBA高于low cache rba的重做记录,就会被应用.

使用道具 举报

回复
论坛徽章:
0
59#
发表于 2008-3-5 09:44 | 只看该作者
原帖由 晶晶小妹 于 2008-3-4 21:41 发表


实例恢复时,是无法根据一个块是脏块或者不是脏块来判断是否对这个块进行恢复的.实例恢复的起始点就是控制文件中的low cache rba,即使在此RBA之后的重做信息.所对应的块的修改已经被写进磁盘,也要在重新对这些块应用重做.一个块被重复修改多次,是正常的.每次对块的修改,都会有重做记录生成.那些RBA高于low cache rba的重做记录,就会被应用.


此RBA之后的重做信息,所对应的块的修改已经被写进磁盘!如果是这样描述就没有问题了,
Oracle从9I引进INCRM chpt新算法无非就是想尽快提高Instance crash恢复时间,所以cache recovery恢复只需要利用从最新检查点到Redo tail的末尾的重做日志来重新构造dirty队列就好了

使用道具 举报

回复
论坛徽章:
8
CTO参与奖
日期:2009-01-15 11:42:46SQL大赛参与纪念
日期:2011-04-13 12:08:17蛋疼蛋
日期:2012-05-31 13:19:132013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2014-03-13 06:00:16目光如炬
日期:2016-07-31 22:30:25火眼金睛
日期:2016-08-31 22:00:00授权会员
日期:2017-09-30 15:12:14
60#
发表于 2008-3-18 10:47 | 只看该作者
学习,真是辛苦啊

使用道具 举报

回复

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

本版积分规则 发表回复

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