六、事务模型与事务处理
11.1事务模型
11.1.1 事务的概念
定义:事务就是操作的集合,集合内的所有操作为一个整体,要么都完成,要么都不完成。
11.1.2 事务的ACID属性
ACID就是:Atomicity(原子性),Consistency(一致性),Isolation(隔离性),Durability(持久性)。
- 原子性:指事务中的操作作为一个整体不可分割。要么都完成,要么都不完成。
- 一致性:事务应该把数据库从一个一致状态转到另一个一致状态。也就是说数据库在经历过事务处理后证据库依然满足正确性要求。
- 隔离性:一个事务对数据修改的效果只有commit后才能对其他事务可见。
- 持久性:事务commit成功后,即使系统故障,其commit后的效果在数据库中是永久的。
结束事务可以输入commit或者rollback命令,DDL语句,用户正常退出数据库连接,客户端非正常关闭,savepoint。
11.2锁
定义:锁是用来控制访问共享资源的一种机制,把并发访问操作串行化的主要方法。锁也可以解决并行操作中丢失更新的问题。
11.2.1 锁的种类
- DML锁(数据锁):用于保护修改的数据不被其他事务并发修改。
- DDL锁(数据字典锁):在用户执行DDL操作时,避免DDL语句操作对象被其它用户修改。
- 内部栓锁(Internal locks and latches):它是临时锁
DML锁又分为:TX(表锁)、TX(行锁)。
TX锁:由UPDATE、INSERT、DELETE、MARGE等操作产生,这些操作修改每行记录都会附加一个TX锁,防止其他并发事务修改。
TM锁:用于锁住被修改的表,防止其他事务对此表执行DDL修改表的结构。
11.2.2 死锁
死锁:两个或多个事务同时处于等待状态,每个事务都在等待另一个事务释放对某个资源锁定后才能继续自己的操作。
oracle会自动探测到死锁的发生,并撤销其中一个事务中引起的锁的操作。
总结:Oracle解决三个并发控制问题的方法:第一,丢失更新问题通过锁解决;第二,脏读问题的解决通过多版本数据解决;第三,不可重复读问题通过多版本数据解决。
Comments NOTHING