数据库--事务管理笔记

来源:互联网 发布:新闻投稿知乎 编辑:程序博客网 时间:2024/04/30 17:40

什么是事务

事务是构成一个完成的逻辑单元的数据库操作的集合。

事务具备以下几个性质:

1、原子性(A)。一个事务中的所有操作都是一个完整的工作单元,这些操作要么都发生,要不都不发生。

2、一致性(C)。一个事务单独执行时的结果,应该保持数据库的正确和完整,即数据不会因为事务的执行而被破坏。

3、隔离性(I)。在多个事务并发执行时,系统应保证执行结果与这些事务按先后次序串行执行的结果一样。

4、持久性(D)。一个事务一旦完成后,它对数据库的改变就是永久的,即使发生故障也一样。

事务执行的状态

活跃状态。初始状态,事务在正常执行后都处于这个状态。

部分提交状态。在事务最后一条语句被执行之后进入这个状态。

提交状态。事务成功完成了,所做的更新是持久的。

失败状态。当出现故障无法正常执行的状态。

中止状态。当失败的事务执行回滚以保证原子性,数据的内容已经恢复到开始执行前状态的时候。

事务的并发执行

事务并发执行的好处:第一提高吞吐量,第二减少平均响应时间。

并发执行潜在的问题:更新丢失问题,读脏数据,非一致读和不可重复读。

什么是事务的调度。

是对事务的操作指令在数据库系统中执行时间顺序的一个安排,要满足两个条件:

一组事务的一个调度必须要包含这一组事务所有的操作。

调度必须要保持操作在各个事务中出现的次序。

可串行化调度

并发调度的可串行化。并发是为了提高吞吐量,提高平均响应时间,串行化是为了保持数据的一致。

冲突的定义

分别属于不同事务的两个操作Oi Oj,如果他们访问相同的数据项而且其中至少有一个是write操作,责成OiOj是冲突的,否则是不冲突的,不冲突的情况只有两个都是读操作。

冲突等价

如果调度S可以通过一系列不冲突操作的交互而转换为调度S‘,则称SS'是冲突等价的。

如果一个调度S与一个串行调度是冲突等价的,则成S是冲突可串行化的。

基本锁类型

共享锁,也称S锁,如果事务T获得了一个数据项的共享锁,则T可是读但不能写该数据项。

排他锁,也称X锁,如果事务T获得了一个数据项的排他锁,则T即可读也可以写该数据项。

共享锁与共享锁是相容的。

两段锁协议

增长阶段即事务开始执行处于增长阶段,可以对数据项提出加锁申请,但不能解锁。

缩减阶段,一旦事务释放了锁,就进入缩减阶段,该阶段事务可以解锁,但是不能在加锁。

事务的隔离级别

为提交读,已提交读,可重复读,可串行化。

死锁

死锁预防的方法:一次性封锁法,顺序封锁法,基于时间戳的单向等待法,超时方法。

死锁恢复工作的三个方面

选择牺牲者,选择牺牲者应该是回滚代价最小的一个。

回滚,最简单的办法就是对牺牲者采取全部回滚然后重启。

避免饿死,要防止一个事务总被选为牺牲者,可以通过在选择牺牲者的条件上加个已经回滚的次数。

介质的分类

挥发性介质:比如cache,比如内存。

持久性介质:比如磁盘,光盘,磁带等。

故障的分类

事务故障,逻辑错误,系统错误。

系统故障,掉电,硬件故障,软件错误等造成的在挥发性介质存储的数据都没有了。

介质故障,由于磁头损坏,病毒破坏等原因造成的物理数据丢失。

基于日志的恢复

每条记录产生后立即写入稳定存储服务器的日志的尾部,这样日志就包含了所有数据库活动的完整信息,可以利用日志进行数据的恢复。

重做事务集

是在日志中既有<T, start>又有<T,commit>的记录的所有事务T,叫做重做事务集。

撤销事务集

是在日志中有<T, start> 没有<T,commit>的记录的所有事务T,叫做撤销事务集。

undo(T) redo(T)

对撤销的事务做undo(T),对重做事务集做redo(T),操作redoundo必须是等幂的,即无论操作多少次redoundo与执行一次的效果是一样的。

数据库备份

备份的过程:

1、将所有当前的位于内存的日志记录输出到稳定存储器当中。

2、将所有区块输出到磁盘上。

3、将数据库的内容复制到稳定存储器中。

4、将备份日志记录输入到稳定存储器的日志文件中。