【数据库系统】考虑题4所示的日志记录,假设开始时A、B、C的值都是0 (1) 如果系统故障发生在14之后,写出系统恢复后A、B、C的值
目录
T5.考虑题4所示的日志记录,假设开始时A、B、C的值都是0
1. 实验 Transaction 性质
2. 实验结论
3. 题目
3.1 如果系统故障发生在14之后,写出系统恢复后A、B、C的值
3.2. 如果系统故障发生在12之后,写出系统恢复后A、B、C的值
3.3 如果系统故障发生在10之后,写出系统恢复后A、B、C的值
3.4 如果系统故障发生在9之后,写出系统恢复后A、B、C的值
3.5 如果系统故障发生在7之后,写出系统恢复后A、B、C的值
3.6 如果系统故障发生在5之后,写出系统恢复后A、B、C的值
T5.考虑题4所示的日志记录,假设开始时A、B、C的值都是0
1. 实验 Transaction 性质
首先做实验研究下transaction之间影不影响。这个很困扰我。
现在数据已经到了磁盘中,并重新读到内存为0,0,0。
下面测试一下事务的ROLLBACK怎么工作的。
关闭嵌套事务自动提交:
时刻1 & 2,开始事务T1,更新A 在内存中的值Set A, A=10:
此时刷新表test_rollback:
因为没有commit,所以A的值没有改变。
时刻3:事务 T2 开始
很可惜,一创建新的transaction,之前的事务就被强制提交了。
这种测试方法无法得到结论。
也许可以创建两个数据库连接来测试一下,console一个,navicat一个:
首先还原A的值:
然后在navicat中也创建一个transaction:
这样就有了两个transaction了:
然后再从头来模拟一下一个事件:
需要验证的问题是如果两个事务A,B之间已经产生了嵌套:
再来一遍:
T1:transaction navicat set A = 10;
刷新一下,可以看到此时没有更新:
T2: transaction navicat set b = 10;
Transaction console set c = 10;
刷新一下表,发现仍然没有更新,这次也没有发生强制更新的情况:
T3: transaction navicat rollback;
T4: transaction console commit;
刷新,发现:
此时C依然被更新成功,得到结论:
2. 实验结论
- rollback只会取消对应transaction的操作,不影响其他transaction的正常操作。
- 事务之间相互是独立的,不要在同一块内存上考虑,因为有数据库锁机制在保护。
3. 题目
3.1 如果系统故障发生在14之后,写出系统恢复后A、B、C的值
T1, T2, T3重做,T4撤销。
相当于T1,T2,T3有效,T4无效。
等效于下图中T13的状态:
而T2自己回滚了且成功回滚,所以等效于删了T2,所以可以进一步简化为:
从头到尾推理一遍,所有值都取最新的,可以得到:A = 8,B = 7, C = 11。
3.2. 如果系统故障发生在12之后,写出系统恢复后A、B、C的值
T1, T2重做,T3, T4撤销。
相当于T1, T2 有效,T3, T4无效。
T2回滚没影响删掉,最终等效于下图对应的状态:
也就是等效于只有T1,所以A = 10, B = 0, C = 11。
3.3 如果系统故障发生在10之后,写出系统恢复后A、B、C的值
T3,T4撤销,T1重做。
此时T2回滚成功,相当于T2没有发生,此时也可以等效为只有T1:
所以答案和第二问相同,依然是A = 10, B=0, C=11。
3.4 如果系统故障发生在9之后,写出系统恢复后A、B、C的值
此时T2 回滚失败,T2全部撤销,此时也可以等效为只有T1:
所以答案仍然为A = 10, B = 0,C = 11。
3.5 如果系统故障发生在7之后,写出系统恢复后A、B、C的值
答案为A = 10, B = 0,C = 11不变,理由同(4)。
3.6 如果系统故障发生在5之后,写出系统恢复后A、B、C的值
此时T1,T2,T3,T4全部撤销,等效于没有有效事务发生。
答案为 A=0, B=0,C=0。
【数据库系统】考虑题4所示的日志记录,假设开始时A、B、C的值都是0 (1) 如果系统故障发生在14之后,写出系统恢复后A、B、C的值相关推荐
- 考虑题4所示的日志记录_2017年北京语言大学计算机应用技术826数据库与管理信息系统考研强化模拟题...
一.简答题 1. [1]考虑下图所示的日志记录: (1)如果系统故障发生在14之后,说明哪些事务需要重做,哪些事务需要回滚. (2)如果系统故障发生在10之后,说明哪些事务需要重做,哪些事务需要回滚. ...
- 考虑题4所示的日志记录_基于Log4Net实现日志信息双向存储
1.引言 在上位机开发中,日志记录是必不可少的,我们可以通过日志记录做日志分析及错误追踪.初学者会采用txt文本写入来实现日志保存,但是文本写入不是线程安全,当存在多个线程同时写入日志时,就会出现一些 ...
- 考虑题4所示的日志记录_福建省厦门双十中学2016届高三上学期中考试地理【解析】...
24.此时甲.乙.丙三地的大气垂直状况相比较 A.甲地比乙地稳定B.乙地对流最旺盛 C.乙地比丙地稳定D.丙地最稳定 25.正午前后 A.甲地气温上升最快B.乙地可能出现强对流天气 C.丙地刮起东北风 ...
- python尝试不同的随机数进行数据划分、使用卡方检验依次计算不同随机数划分下训练接和测试集所有分类特征的卡方检验的p值,如果所有p值都大于0.05则训练集和测试集都具有统计显著性、数据划分合理
python尝试不同的随机数进行数据划分.使用卡方检验依次计算不同随机数划分下训练接和测试集所有分类特征(categorical)的卡方检验的p值,如果所有p值都大于0.05则退出循环.则训练集和测试 ...
- Wincc系统重启后保持内部变量的值不变的设置
软件版本:Wincc 7.4SP1 操作系统:Windows7 问题描述 需要在wincc中动态修改某些参数,希望设置一些内部变量作为中间变量,但运行中修改过的参数在系统重启后会丢失,该如何在输入后保 ...
- 《日志管理与分析权威指南》一2.3 良好日志记录的标准
本节书摘来华章计算机<日志管理与分析权威指南>一书中的第2章 ,第2.3节,(美) Anton A. Chuvakin Kevin J. Schmidt Christopher Phill ...
- 在多线程应用程序中使用循环缓冲区高效地进行日志记录
在多线程应用程序中使用循环缓冲区高效地进行日志记录 在关键的计算机应用程序的生存期中,日志记录是一件非常重要的活动,特别是当故障的症状并不十分明显时.日志记录提供了故障前应用程序状态的详细信息,如变量 ...
- 如何在 Java 中进行日志记录
您可以使用本指南为您的应用程序发现.理解和使用正确的 Java 日志库,例如 Log4j2.Logback 或 java.util.logging. 日志"似乎"是一个非常简单的主 ...
- Python的日志记录-logging模块的使用
一.日志 1.1什么是日志 日志是跟踪软件运行时所发生的事件的一种方法,软件开发者在代码中调用日志函数,表明发生了特定的事件,事件由描述性消息描述,同时还包含事件的重要性,重要性也称为级别或严重性. ...
- Log4j2日志记录框架的使用教程与简单实例
1.Log4j2的使用教程 1.1 简介 Log4j的1.x版本虽然已经被广泛使用于很多应用程序中,但由于出现内存泄漏等bug,代码难以维护,以及需要使用老版本的jdk等劣势,在2015年8月已经玩完 ...
最新文章
- zabbix监控系统的安装与配置
- 9适应之力加多少攻击_NBA球星生涯最低分都是多少?詹皇碰上麦迪仅得3分,哈登最低1分...
- Python基础教程:用模块化来搭项目
- PHP——smarty模板(第一天)
- 字典常用的方法(内建函数)
- ecos内核概览--bakayi译
- Leetcode: Single Number
- php 对象转换成数组,PHP把对象转换为数组的问题
- php str pa,php截取字符串方法有哪些
- Tableview最后一行无法显示或者显示不全的问题IOS
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(6): EscapeRegExChars 函数
- 计算机配色故障,计算机配色模型中存在的限制点
- 白话大数据 | 元宇宙来了,但是你了解元数据吗?
- 我对嵌入式软件的理解
- JAVA初学者必备的基础书籍
- glusterfs 文件服务器 搭建
- java wate_Java Items.water_bucket方法代码示例
- vb6.0 生成exe被简称是木马_病毒分析|银行木马样本事件分析
- 美图旗下美妆平台将停止运营 COO:All in “美和社交”
- 分析LFC乐付链系统发展潜力