设为首页 加入收藏

TOP

数据库事务和并发简析
2014-11-23 21:54:41 来源: 作者: 【 】 浏览:11
Tags:数据库 事务 并发 简析
数据库事务和并发简析
事务4个属性:
原子性:一个事务是一个不可分割的单位,事务包含的操作要么全部执行,要么全部不执行。
一致性:事务必须使数据库从一个一致状态转变到另一个一致状态。
隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及涉及的数据对其他事务是隔离,并发执行的事务之间不能相互干扰。
持续性:也称为永久性,指一个事务一旦成功提交之后,它对数据库中数据的修改应该是持久的。
并发操作带来的不一致性:
丢失修改(lost update):指事务1和事务2同时读入相同的数据并进行修改,事务2提交的结果破坏了事务1提交的结果,导致事务1进行的修改丢失。 www.2cto.com
不可重复读(nonrepeatable read):指事务1读取数据后,事务2对数据进行了修改,导致事务1无法再次重现前一次的读取结果。分三种情况,后两种情况称为幻读:
事务1读取某数据后,事务2对其进行了修改,当事务1再次读取该数据时,得到的值和前一次不同。
事务1按一定条件读取某数据后,事务2删除了部分记录,当事务1按照相同条件再次读取数据时,发现某些数据消失了。
事务1按一定条件读取某数据后,事务2增加了部分记录,当事务1按照相同条件再次读取数据时,发现数据增加了。
读脏数据(dirty read):事务1修改了某一个数据,并将其写回磁盘,事务2读取同一数据后,事务1被撤销,此时事务2读取的数据就是脏数据。
基本锁类型:
排他锁(exclusive lock):简称X锁,即写锁,事务1对数据对象添加X锁后,此数据只允许事务1读取和修改,其他事务不能对数据对象添加任何锁,直到事务1释放锁。
共享锁(share lock):简称S锁,即读锁,事务1对数据对象添加S锁后,只允许其他事务对数据对象添加S锁,直到事务1释放锁。
加锁粒度:
加锁的对象可以使逻辑单元也可以是物理单元。在关系数据库中,可以对属性、属性集合、行、关系、索引、整个索引、整个数据库加锁;也可以对数据页、索引页、块加锁。
www.2cto.com
加锁协议:规定何时加锁,加X锁还是S锁,加锁时间,何时释放锁等规则。
三级加锁协议:
1级加锁协议:事务1在修改数据R之前,必须对其添加X锁,知道事务完成才释放。事务完成包括commit和rollback。1级加锁协议可以防止丢失修改,并保证事务1是可以恢复的。在1级加锁协议中,读数据是不加锁的,不能保证可重复读和避免脏读。
2级加锁协议:在1级加锁协议的基础上,事务1在读取数据R之前,必须先对其添加S锁,读取完成后释放S锁。2级加锁协议在防止丢失修改的基础上,还可以防止脏读。由于2级加锁协议中,事务读取完数据后,就释放S锁,所以不能保证可重复读。
3级加锁协议:在1级加锁协议的基础上,事务1在读取数据R之前,必须对R添加S锁,直到事务1完成。3级加锁协议防止了丢失修改,防止了脏读,保证了可重复读。
两段锁协议:
两段锁(two-phase locking,检查2PL)协议是为保证并发调度可串行的协议,该协议规定在对任何数据进行读、写操作之前,事务必须首先对数据进行加锁,并且在释放一个锁之后,事务不再获取任何其他锁。
两段:即事务分为两个阶段,阶段1事务首先对数据添加所有需要的锁,此阶段不能释放任何锁;阶段2事务释放所有的锁,这个阶段不能添加任何锁。
活锁:事务1对R加锁后,事务2请求对R加锁,事务2等待。事务3请求对R加锁。事务1释放R后,系统首先批准了事务3的请求,事务2等待。事务4请求对R加锁,事务3释放R后,系统首先批准了事务4的请求,事务2等待。……事务2一直无法获取R。
防止活锁:将请求添加到队列中,FIFO。
www.2cto.com
死锁:事务1对A加锁后,事务2对B加锁。接着事务1请求B,事务2请求A,死锁。
Oracle
Oracle锁分为两大类:数据锁(DML锁)和字典锁。字典锁包括语法分析锁和DDL锁,有DBMS控制,用户无权控制。
Oracle 5种数据锁:共享锁、排他锁、行级共享锁(RS锁)、行级排他锁(RX锁)、共享行级排他锁(SRX锁)。加锁粒度包括行级和表级。
数据锁相容矩阵:
S X RS RX SRX
S Y N Y N N
X N N N N N
RS Y N Y Y Y
RX N N Y Y N
SRX N N Y N N
一般情况下,Oracle自行加锁,用户也可以通过lock table等语句进行加锁。
Oracle默认情况下,读数据不加锁,而是通过回滚段防止脏读和保证可重复读。
Oracle具有死锁检查功能,周期性检查 系统是否有死锁,如果存在死锁,则撤销执行更新操作次数最少的事务。
作者 LiJIaming
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle TnsPing正确,pl/sql ora-.. 下一篇oracle增加日志组、日志成员的一..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: