比如有两个用户一个userA,一个userB
当userA发出 select * from 表名 for update of 字段 时
这是纪录被锁住等待更新
当userB此时也发出select * from 表名 for update of 字段 时
并且for update of 的纪录已经被userA锁定
这是userB只能等待userA提交后才能获取到userA被占用的纪录
如果userA不提交userB就会无限期的等待
解决方法
userB执行select * from 表名 for update of 字段 no wait 10;
这时虽然纪录被userA锁定但是userB会等待10秒如果10秒内userA释放
了纪录,则userB获取该锁,如果10秒后userA未释放锁,则userB返回
错误消息
ora-30006:资源已被占用;执行此操作时出现wait超时
--------------------------------------------------------------------
userA锁住一条纪录
userB锁住一条纪录
userA请求锁住userB正在锁住的纪录
而同时userB请求锁住userA正在锁住的纪录
这时候就会产生死锁
--------------------------------------------------------------------
如果在事务中执行了一条不满足条件的update语句,则执行全表扫描,把行级锁上升为表级锁,多个这样的事务执行后,就很容易产生死锁。
版权归原作者和各发布网站所有,此文章仅供学习参考之用
天天学习,好好向上——
posted on 2008-11-07 11:34
東頭bing阿頭 阅读(1489)
评论(0) 编辑 收藏 所属分类:
DataBase