DB2的日志理解难点
在DB2中最早的recovery时间点,是由minBuffLsn 和 lowTranLsn 的最小值决定的。
minBuffLsn: represents the oldest change to a page in the buffer pool that has not been written and persisted to disk yet.
lowTranLsn: represents the oldest active uncommitted transaction (specifically the LSN of the first log record it wrote).
在DB2和ORACLE数据库都还有一个约定,从buffer pool中写数据到磁盘之前其对应的redo log必须先从log buffer pool中写到磁盘中。
注意:这里的log buffer pool中的redo log没有要求是已经committed的。
所以,在数据库中,还没有被提交的数据被写到磁盘中是很正常的事情,只要这块数据所对应的redo log已经被写入到磁盘中,对于这个交易是否已经提交,不关紧要。
那么在recovery的时候就会出现这样的情况:
minBuffLsn < lowTranLsn : 有已经提交的交易(commit动作会触发数据库将对应的redo log写入到磁盘)数据还有没有被从buffer pool中写入到磁盘,所以recovery时从minBuffLsn对应的log开始,redo后面那些已经提交的或者未提交的交易,重建transaction table。
lowTranLsn > minBuffLsn : 有还没有提交的交易(但是redo log是已经写入到磁盘中的)的数据已经被写入到磁盘中,所以recovery时将从lowTranLsn对应的log开始,这部分数据已经被写入到磁盘中的redo log只是读取一下,创建transaction table。

这张图片做出了比较清晰的解释。
DB2的日志理解难点的更多相关文章
- db2 活动日志激增的原因分析处理
本文简单地介绍了DB2中日志的使用.活动日志以及首个活动日志的概念.日志满的原因.日志满的诊断.临时处理以及避免办法 日志使用 下图显示了并发事务条件下,日志使用的示意 有3个并发的程序Process ...
- SQL0946N错误及DB2事务日志
在对DB2数据库进行批量增删的时候, 如果数据量比较大会导致SQL0964N错误, DB2 Knowledge center(http://pic.dhe.ibm.com/infocenter/db2 ...
- db2 事务日志
曾经因为对DB2 的 NOT LOGGED INITIALLY 属性认识不足而吃了亏.当时需要往表中插入大量的数据,最初也没有考虑太多就使用了传统的insert 命令,由于数据量实在过于巨大,而且系统 ...
- DB2事务日志
1.DB2数据库的日志原理 事务日志记录数据库中所有对象和数据的改变,在早前版本中最大可达256G,其大小为( logprimary + logsecond ) * logfilsiz,其中logpr ...
- db2事务日志已满解决办法
查看事务日志配置(MICRO_11为数据库名称): db2 get db cfg for MICRO_11 运行结果: 日志文件大小(4KB) (LOG ...
- DB2事务日志已满的解决方法
DB2命令终端输入: db2 update db cfg for <dbname> using LOGPRIMARY 50 db2 update db cfg for <dbname ...
- DB2 的事务日志
1. DB2事务日志:DB2的日志分主日志和次日志,主日志是在数据库第一次被连接和激活时创建的,而次日志是当写满所有的主日志后,才动态分配次日志,主日志和次日志受设置个数的制约,当配置的所有主 ...
- DB2 日志
跟Oracle类似DB2也分为两个模式,日志循环vs归档日志,也就是非归档和归档模式,下面对这两种模式做简单的介绍. 日志循环 日志循环是默认方式,也就是非归档模式,这种模式只支持backup off ...
- DB2数据库的日志文件管理
DB2数据库的日志文件管理 DB2的日志模式 1.1循环日志 当循环日志生效时,事务数据将通过循环的方式写入主要日志文件.当存储于某个日志文件中的所有记录都不再需要用于恢复时,该日志文件将被重用,并且 ...
随机推荐
- 一款好用的绘图软件gnuplot
漂亮的图片在一篇报告中是必不可少的.这里推荐一款绘图软件Gnuplot. Gnuplot是一种免费分发的绘图工具,可以移植到各种主流平台,无论是在Linux还是在Windows都易于安装使用.最新的版 ...
- 一个非常简单的例子告诉你attachEvent和addEventListener的区别
<input id="test" type="button" value="测试"> <script> var te ...
- django-将数据库数据转换成JSON格式(ORM和SQL两种情况)
最近打算搞一个自动化运维平台,所以在看Django的知识. 在实际项目开发中,遇到一个小问题:前后端发生数据交互主流采用的是JSON.前端传数据到服务器端比较简单,稍微麻烦的是服务器端传JSON到前端 ...
- c++数组易错点总结
c++数组 1.只有在定义数组是才能使用初始化,此后就不能使用了,也不能将一个数组赋给另一个数组 int cards[4] = { 3 , 6 , 8 , 10}; //ok int hands[4] ...
- SQL语言-----数据操作
数据操作 增加数据,insert into 标准格式 insert into 表名 (字段的列表)value(数据列表): 使用set insert into 表名 set 字段1=值,2.....: ...
- updateByPrimaryKey和updateByPrimaryKeySelective insert和insertSelective
这两个update都是使用generator生成的mapper.xml文件中,对dao层的更新操作 updateByPrimaryKey对你注入的字段全部更新(不判断是否为Null) updateBy ...
- Execution failed for task':app;clean'
Execution failed for task':app;clean' >Unable to delete directory:f:xxxxxbuild\output\apk当程序出先这个错 ...
- 面向对象15.3String类-常见功能-判断
/*3.判断 * 3.1两个字符串内容是否相同? * boolean equals(Object obj)(参数是Object,不是String,因为equals是覆盖Object里面的equals方 ...
- Spark Streaming笔记——技术点汇总
目录 目录 概况 原理 API DStream WordCount示例 Input DStream Transformation Operation Output Operation 缓存与持久化 C ...
- runtime实现对象存储型数据库——LHDB
前言 最近在GitHub上看了一份关于基于runtime封装的对象存储型数据库的开源代码,觉得非常值得分享记录一下,在IOS中对数据库的操作一般通过CoreData和SQLite,CoreData 虽 ...