两段锁协议与数据库恢复

1,内容
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2,21年真题
第一问考的是存储过程,procedure
并且后面括号中的in表示输入变量.不是变量名的一部分.
这里还需要注意,变量是否需要用引号引起来,这需要看题目中其他地方,是否用了引号.
并且,最后不需要return.

第二问,注意在触发器中update后面跟的是of.
然后是referencing 重命名,on each row/statement.
然后我们在books表上建立了触发器,在后面的语句中,如果需要用到books表,就是用now row 或者old row代替,不会再出现books表.

3,20年题
第一问,这里是游标的另一种定义方法.所以填cursor,以前的都是名称后跟for select语句.
后面就是游标的相关知识

第二问,注意一个事务读出数据,之后的操作都是按照这个事务读出的数据,中间别的进程如何修改都没有用.
并且之后在write之后,别的进程才会读出新的数据.

第三问,死锁的解决办法在第四章.

4,19年
这是一道典型的事务管理题
其中,第一问,这里出现了设置隔离级别.
并且限定不考虑并发性能.所以我们就用最高级别的
serializable 可解决所有问题
repeatable read 可解决读脏数据和不可重复读问题
read committed 可解决读脏数据问题
read uncommitted

之后将sum()值放在了amts中,所以之后只要将amts返回就好了

最后出了commit 还需要 结束事务,并且需要return
end transaction

第二问,注意是两个事务同时进行.

5,18年题
在这里插入图片描述
第二问,注意答案如上,首先,申请锁也需要一个时间.其次申请了锁之后,即使是等待也不需要再申请锁了.

第三问,注意这里题目中都加了冒号,所以我们也需要加冒号.并且在最后需要return0.

6,写执行序列专题
10年题,注意是对A加锁,而不是对x,因为A才是与数据库相关的数据,x只是一个临时传递作用.
并且只要在执行序列中有写入的动作,那么就应该加排它锁,如果加共享锁无法完成.整个两段锁过程.

11年
在这里插入图片描述
如果改写成上图形式,那么就不符合,持有锁的时间最短.因为T2虽然在等待,但是执行T2的加锁动作浪费了一个时间单位.

所以,想使得持有锁时间最短,就需要在加锁之后,赶紧完成所有操作.

另外,注意从题目如何写成列表的形式.在一个时间单位内,cpu只能做一个操作,不能同时进行.

这里注意和之前的题进行区分,之前的明确说明了T1,T2的首条指令时间相同.
在这里插入图片描述
答案应该如上形式.

另外,在写成横排的形式时,如果有等待是不需要写出来的.但是在表格中要注意写出等待.

另外,只有在整个执行过程只涉及读才可以用共享锁.

12年题
在这里插入图片描述
如上图,不可以在unlock(B)的同时进行read(A)操作.同时做的要么是空,要么是等待.并且等待要一直写.

注意这种题,一般结果不唯一.

13年题
在这里插入图片描述
这道题最大的不同点在于:题目要求持有锁的时间最短,并且这里还涉及两个锁,就要注意,如何使持有A锁的时间最短呢?
就需要加了B的排它锁后,马上对A进行解锁.

14年题
这种题答案不唯一,在哪里T2申请加锁都可以,可以移动,并不唯一的答案.但是T2事务的读操作一定要在T1事务解锁之后.

16年题
这道题注意需要写角标.

注意如果题目要求写出时间序列,就需要写成横排形式.如下形式:
在这里插入图片描述
6,16,17年
对于16年题,注意子查询中应该将子查询的属性放在前面,所以应该是:
图书.ISBN=书目.ISBN

对于17年题,(2)加了共享锁,任何事务都不能再对数据加独占锁了.
(3)需要注意,只有在读出的数据,抢到的人属性为空时才执行,写入操作.所以r2和r3是不执行写入操作的.

第二问,首先第一空,需要再判断一下,接收人是否为空,因为有多个人在同时抢,可能在执行事务的期间,就进行了修改.

第二空,如果顺利抢到红包,就需要关闭游标.
第三空,应该为结束事务,但是其中少了一个推进游标的过程,这一个最好是加在rollback之后.
这里最好的就是结束事务,因为关闭游标之后,怎么能推进游标.最好是回滚之后,推进游标.

二,数据库恢复
在这里插入图片描述
提交可以是commit也可以是rollback,在检查点之后提交了,那么就说明在故障前已经完成了.而没有提交说明,没有完成整个事务.
在这里插入图片描述
可以看到,这个检查点就像一个存档,在他之前已经提交的就写入了数据库,即使发生故障也写入了.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值