ITPUB??ì3
新一届的微软MVP评选已经开始,欢迎各位推荐!
ITPUB论坛 » Oracle专题深入讨论 » 初级问题:隔离级别.希望大家解惑!谢谢

标题: 初级问题:隔离级别.希望大家解惑!谢谢
离线 gongchangseven
初级会员



精华贴数 0
个人空间 0
技术积分 48 (28526)
社区积分 0 (217612)
注册日期 2004-12-1
论坛徽章:0
      
      

发表于 2008-4-24 15:49 
初级问题:隔离级别.希望大家解惑!谢谢

oracle提供两种隔离级别:read commited和serializable。
当设置为serializable时,可能会出现错误:ORA-08177: Cannot serialize access for this transaction。

怎么避免这样的错误?

我感觉应该从业务层面来考虑:
(1)是否存在多个事务中对同一行数据进行修改的需求。
感觉有这样需求是正常的。
(2)如果存在这样的需求,只能选择read commited的隔离级别。(是只能吗?)
使用read commited级别,不会出现ORA-08177错误,但可能会出现非重复读或幻象的情况。
那是不是应该好好组织事务内sql语句顺序,对同一个表在事务内只查询一次,并把查询结果作为中间变量保存,以此来解决非重复读或幻象问题。

上面是我粗浅的想法,不知道对不对,或者还有别的解决方法,请大家不吝赐教! 谢谢~~


只看该作者    顶部
离线 sqysl
孤独剑客



来自 山东
精华贴数 0
个人空间 0
技术积分 1260 (1375)
社区积分 31 (6199)
注册日期 2006-12-20
论坛徽章:0
      
      

发表于 2008-4-27 21:30 
我觉得你说的第一点是对的,至于第二点,我觉得不是只能,那要看你的数据库系统是否支持serializable,当被设置为serializable时,提供最低的并行度和性能,事务的执行似乎其他事务不存在,但经常也会遇到象你遇到的问题,即:ORA-8177,当你试图修改事务开始以来已经被修改了的数据时,就会产生该问题。因此,不是ORACLE不支持,而是这种隔离级别必然的一个可能啊。

[ 本帖最后由 sqysl 于 2008-4-27 22:02 编辑 ]


__________________
曾经沧海难为水,除却巫山不是云。
天若有情天亦老,人间正道是沧桑。
只看该作者    顶部
离线 sqysl
孤独剑客



来自 山东
精华贴数 0
个人空间 0
技术积分 1260 (1375)
社区积分 31 (6199)
注册日期 2006-12-20
论坛徽章:0
      
      

发表于 2008-4-27 22:20 
抱歉,有点答非所问,为什么一定要使用SERIABLIZABLE隔离级别呢?你觉得又必要吗?
如果真的有必要,你说的那种方法我觉得还是不严密的,并不能完全保证不出现幻影现象,因此,我觉得如果真的有必要设置隔离级别
为seriablizable,不如尽量避免在一个事务里去修改事务开始后已经被修改的数据,这样虽然麻烦些,但能保证隔离级别的实现。


__________________
曾经沧海难为水,除却巫山不是云。
天若有情天亦老,人间正道是沧桑。
只看该作者    顶部
离线 晶晶小妹
月是上弦


精华贴数 3
个人空间 6470
技术积分 1845 (884)
社区积分 9 (11709)
注册日期 2008-2-15
论坛徽章:2
现任管理团队成员数据库板块每日发贴之星    
      

发表于 2008-5-21 23:41 
楼上说的是,其实seriablizable是能不用就不用的。

楼主可以看看TOM的9i&10G编号艺术,关于隔离级别说的很详细的


__________________
没有必胜的秘籍,没有方程式遵循
要赢~只有全身心的投入!



为了方便大家查阅,所有的文章都已转入空间

http://space.itpub.net/?13095417

请大家多多支持!
只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问