事务transaction
1.概念
事务就是数据项的程序执行单元
四个特性:acid
a(atomicity):原子性(事务不能中断)
d(durability):持久性(对数据库修改是永久的)
c(consistency):一致性(总和不变,事务的开始和结束是一致性的状态,但在过程中间是不一致的,是暂时的,不能中断的)
i(isolation):隔离性(一个事务内部操作和使用的数据对其他的事务是隔离的)
2.并发concurrent
用与顺序执行任务的结果时一样的来检验并发的正确
部分提交后(表面完成,实际失败)会进行redo重传
并发控制机制:多个事务正确执行(封锁机制)
导致的问题:丢失修改(1读,2读,1写,2写就会导致写入错误)、不可重复读(1读后(没结束),
2改,1读的数据不一致。1读,2删除部分记录,1再读发现少了)、读脏数据(1改,2读,1撤销2读的数据错误)
3.串行调度
调度schedule:指令执行次序,保证一致性状态,保证单个事务内指令的次序不变
事务最后会有提交指令commit,提交后就永久失效了
事务失败就有abort撤销指令
串行serial调度:T2在T1后执行
不是串行调度但是等价于一个串行调度,就是一个有效equivalent的调度
串行性Serializability:如果串行执行就认为是正确的
调度如果和一个串行调度等价,就叫可串行化的调度
交换后不变就不发生冲突(read(Q)和read(Q))
4.冲突等价
通过一系列非冲突指令的交换,就说S和S’是冲突等价的
冲突可串行化:冲突等价一个串行调度
可串行化判断:谁和谁有冲突指令,就将两个T按照顺序画出箭头(前趋图)
可串行化当且仅当无环
可以对图进行拓扑排序,得到以一个顺序(从入度为0的点开始找)
就是T8如果撤销,那么T9读取的数据(脏数据)就会出问题(因为T8没运行完可以撤销)
可恢复:T8的提交必须在T9之前提交
5.级联回滚
级联回滚:一个事务的撤销导致大量数据回滚。恢复代价大
无级联调度:在另一个事务read之前有write操作需要提前结束
隔离级别isolation level:设置安全标准,标准越高效率越低
6.数据库恢复策略
数据库破坏后保留数据库副本和日志文件可能恢复数据库
扫描日志文件,找出在故障发生前已经提交的事务,将其事务标识记入REDO队列,同时找出故障发生时尚未完成的事务,将其事务标识记入UNDO队列;对UNDO队列中的各个事务进行撤销处理;对REDO队列中的各个事务进行重做处理。