跟大家一样,我也很好奇DB2是如何做crash recovery的。最近看了一点 dabase crash recovery的资料,我把我对数据库 recovery的理解贴出来跟大家讨论讨论,这样可以帮助大家更好的理解DB2的行为。也希望实验室的专家们能够多给我们讲点这方面的知识。
首先,讲一下几个概念:
1、dirty page table,每一个修改过的DATA PAGE在这个表里有一个记录,而且每个页第一次变脏的LSN(称作RECLSN)也记录在里面。
2、Transaction table,当前活动的事务都会在这个表里有一条记录,而且还记录这个事务当前的最大的LSN和需要UNDO的最大LSN。每次事务完成(commit或rollback完成)就会把这个transaction从表里删掉。
3、PAGE LSN,每个页在被更新时,会把对应的LSN记在page里,就是page LSN,就是说这个page LSN反映了这个页的最近一次修改。数据库是根据这个判断页需要不需要实际REdo的。
4、Check Point,每次check point会在日志里记一条 begin checkpoint的log。然后会把dirty page table和transaction table 刷到硬盘上。然后在日志里记一条end checkpoint 记录。
5,CLR。每次事务被rollback时,每undo一个log record,会记一个CLR(补充日志),这个日志包含了undonextlsn,指向下一个将要被undo的log lsn。CLR是REDO ONLY的,就是只会被REDO,不会UNDO它。这也说明了事务在rollback的时候也是要记日志的。
6、每个log record有一个prevLSN指向与这个Log Record处于同一事务的前一个log LSN。数据库通过这个LSN来进行事务回滚。prevLSN是0表示这是事务开始的第一个log record。
数据库recovery分为三个阶段:
analysis 阶段:
把dirty page table 和transaction table清空。
找到最近的一次begin checkpoint的日志(这个信息记录在一个固定的地方,每次checkpoint完成会更新它),然后开始顺序向后扫描:
如果发现LSN所属事务不在transaction table里(Log里记有transactionid),往transaction table里插一条记录。
如果发现LSN对应的pageid不在dirty page table里,往dirty page table插入一条记录
如果是普通的update log record,修改transaction table里的需要UNDO的最大LSN为当前LSN。
如果是CLR,修改transaction table里的需要UNDO的最大LSN为CLR的undonextlsn。
如果是end checkpoint的记录,说明这次checkpoint是完整的,从磁盘中读出transaction table
和dirty page table 更新当前的dirty page table 和transaction table。
如果是end记录(表示事务已经提交或完全回滚)则从transaction table里把对应的transaction删除。
其他处理。。。。。。。。。。。。。。
返回最小的dirty page table里的reclsn给REDO过程处理(这个应该就是minbufflsn)。
REDO阶段,:
从minbufflsn开始,向前顺序扫描,一直到故障发生点结束。
如果是普通的update log record或者是CLR。
检查dirty page table里的recLSN是否小于等于log record的LSN
如果是,检查页的PAGE LSN是否小于log record的LSN,如果小于,则进行实际的redo动作。
UNDO阶段:
找到transaction表的所有事务中最大的需要UNDO的最大LSN,记为 CURRENT LOG。
如果是普通的udpate 记录,
进行实际UNDO操作,
记一条CLR信息,
修改对应page的page LSN为CLR的LSN。
修改transaction table里的该事务的最大LSN为CLR的LSN。
修改transaction table里的该事务的最大需要UNDO的LSN为 CURRENT LOG的prevLSN。
如果是CLR记录(这个需要跳过,因为在REDO里已经做了)
修改transaction table里的该事务的最大需要UNDO的LSN为CLR的undonextlsn。
如果CURRENT LOG的prevLSN是0,则写一条END记录,表示这个事务已经完全回滚完成,从transaction table里把对应的transaction删除。
重复以上undo过程,直到transaction table为空。
这只是大体做法,实际crash recovery要考虑的事情非常多,比如一个update 动作引起多个页变动该怎么办(比如往索引页里插入一条记录引起索引树的分裂)。该怎么记日志?怎么回滚。又比如做drop table时,你不可能把这个表的整个内容记下来以便去回滚,还有一些锁的问题需要考虑等等。
crash recovery的难点就是数据库的更改动作非常多,要以一种合理而且能回退的方式记下来,本身就比较难,加上故障随时可能发生,要又好又快的完成crash recovery确实是非常不容易的事情。
另外,以上仅仅是理论上的过程,DB2的具体实现肯定有很多不一样的地方,这个就需要实验室的专家们给我们讲讲了。
- 浏览: 157966 次
- 性别:
- 来自: 湖北
最新评论
-
flypeace:
今天在 tomcat6 的catalina.bat 中加入 s ...
(转)tomcat启动的内存溢出解决 -
flypeace:
greatghoul 写道其实相对于调试,我更倾向于采用合理的 ...
eclipse 远程调试tomcat -
greatghoul:
其实相对于调试,我更倾向于采用合理的日志来记录系统的异常,调试 ...
eclipse 远程调试tomcat -
flypeace:
呵呵,是的.我目前用的myeclipse.
eclipse讨厌的自动更新 -
txlong_onz:
亲,你说的是MyEclipse,觉得Eclipse也不会这么流 ...
eclipse讨厌的自动更新
相关推荐
IBM DB2 Recovery Expert 是一款由IBM研发的专业数据库恢复工具,尤其针对DB2数据库系统。它通过深入分析数据库日志,能够快速有效地进行数据库恢复,大大缩短灾难恢复时间,提高数据库的可用性。该工具的一大特色是...
本文档深入探讨了IBM DB2 for Linux, UNIX, and Windows (LUW) 的高可用性(High Availability, HA)和灾难恢复(Disaster Recovery, DR)选项。该文档由Whei-Jen Chen、Masafumi Otsuki、Paul Descovich、...
3. **SQL过程**:QS10_DB2v8_SQLProcedures.pdf可能涵盖DB2中的SQL语句、存储过程、触发器和函数等,这些都是进行数据库操作的基本工具。SQL过程可以帮助开发者创建复杂的应用逻辑,提高代码复用性和效率。 4. **...
DB2 数据库分区功能(DPF)是 DB2 企业版的一个重要特性,旨在处理大规模数据和高并发访问。DPF 采用 Share-nothing 体系结构,即将数据库分解为独立的分区,每个分区都有自己的计算资源(CPU、内存、磁盘),以及...
Q复制原理培训涵盖了以上所有内容,对于想要深入了解DB2数据复制技术的人来说,这是一个全面且深入的学习资源。通过这个培训,学习者将能够理解Q复制的工作机制,如何设置和管理复制环境,以及如何解决可能出现的...
这是我收藏的关于DB2数据库方面的资料,主要是讲解DB2技术原理和应用,如果你想了解这方面的内容,那就赶快下载吧!
### DB2之SQL优化浅析 #### 为什么要做SQL优化 在DB2数据库管理系统中,SQL语句是操作数据库的主要手段。任何应用程序对数据库的操作最终都会转化为SQL语句。因此,SQL语句的执行效率直接影响到数据库系统的整体...
### DB2之SQL优化浅析 #### 一、为什么要做SQL优化 在DB2数据库管理中,SQL优化是一项至关重要的工作。SQL语句是应用程序与数据库之间交互的主要方式,其性能直接影响到整体应用的响应速度及数据库服务器的负载。...
【IBM DB2 Recovery Expert工具详解——对象恢复篇】 IBM DB2 Recovery Expert是一款强大的数据库恢复工具,专门用于分析DB2数据库的日志,以实现高效的数据库恢复。该工具显著减少了数据库灾难恢复所需的时间,...
12. **应用开发接口**:介绍如何使用JDBC、ODBC或其他编程语言与DB2进行交互,实现应用程序对数据库的访问。 通过学习这个教程,学生不仅能掌握数据库的基本理论,还能具备使用DB2解决实际问题的能力,为未来从事IT...
【数据库原理与DB2应用教程教学课件】是大连交通大学提供的一个教学资源,主要涵盖了数据库的基础理论以及IBM的DB2数据库管理系统的应用。这个课程旨在帮助学生深入理解数据库系统的工作原理,并掌握DB2在实际场景中...
DB2技术原理及应用是计算机科学领域中一个重要的分支,特别是在数据库管理和信息系统设计中占据着核心地位。这个视频教程由上海交通大学提供,旨在为自考考研的学生提供全面深入的学习资源,帮助他们掌握DB2的基本...
ibm DB2 Q复制原理ppt,祥细解说.
这可以通过DB2和MQ提供的监控工具进行,如`runmqsc`和DB2的管理工具。 ### 总结 DB2 Q复制是针对企业级应用的一种强大数据同步解决方案,尤其适用于处理XML数据。通过集成Websphere MQ,它提供了增强的性能和可靠性...
这样,Java应用程序就能通过JDBC API与DB2 11.5数据库进行交互,执行SQL语句,处理结果集,以及进行事务控制等操作。理解这些组件的作用和用法,对于开发和维护与DB2数据库交互的Java应用至关重要。
在DB2数据库中,若检测到因硬件故障导致的数据页损坏(bad page),可以使用DB2 DART工具对整个数据库进行修复。如果需要恢复数据库并修复表空间TBSP_1中的损坏,正确的命令选项是: B. RECOVER DATABASE 此选项用于...
在日常使用中,DB2还提供了丰富的管理和开发工具,如DB2 Control Center、DB2 Administer Studio、DB2 Development Center等,帮助用户进行数据库管理和开发工作。此外,DB2支持SQL标准,具备强大的事务处理能力,...
若该参数不正确,可通过运行`DB2 UPDATE DBMCFG USING FEDERATED YES`命令进行更改。更改后记得重启实例使配置生效(`DB2STOP`/`DB2START`)。 3. **创建示例数据库**: - 创建DB2样本数据库`SAMPLE`,可以运行`db2...
DB2数据库是一款由IBM开发的关系型数据库管理系统,广泛应用于企业级的数据存储和管理。在分布式环境中,有时需要从本地数据库...同时,了解这些步骤也有助于理解DB2的网络连接原理,对于DB2的管理和维护工作大有裨益。
DB2数据库驱动程序是连接IBM DB2数据库的关键组件,它允许Java应用程序通过JDBC(Java Database Connectivity)接口与DB2数据库进行通信。在提供的压缩包中,有两个重要的JAR文件:db2jcc.jar和db2jcc_license_cu....