-08177:无法连续访问此事务修改方法:.:修改后的代码:这个问题是由oracle事务隔离级别引起的在一个事务中执行updatetsetobject_type='zl'whereobject_id=17286不要提交此事务然后再其他事务中执行settransactionisolationlevelserializable;updatetsetobject_type='zl'whereobject_id=17286这个时候事务2会等待事务1执行完成,(isolationlevel)隔离级别定义了事务与事务之间的隔离程度。隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。ANSI/ISOSQL92标准定义了一些数据库操作的隔离级别:未提交读(mitted)提交读(mitted)重复读(repeatableread)序列化(serializable)通过一些现象,可以反映出隔离级别的效果。这些现象有:更新丢失(lostupdate):当系统允许两个事务同时更新同一数据是,发生更新丢失。脏读(dirtyread):当一个事务读取另一个事务尚未提交的修改时,产生脏读。非重复读(nonrepeatableread):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。幻像(phantomread):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。下面是隔离级别及其对应的可能出现或不可能出现的现象:,同时提供了非SQL92标准的read-only。mitted:这是ORACLE缺省的事务隔离级别。事务中的每一条语句都遵从语句级的读一致性。保证不会脏读;但可能出现非重复读和幻像。serializable:简单地说,serializable就是使事务看起来象是一个接着一个地顺序地执行。仅仅能看见在本事务开始前由其它事务提交的更改和在本事务中所做的更改。保证不会出现非重复读和幻像。Serializable隔离级别提供了read-only事务所提供的读一致性(事务级的读一致性),同时又允许DML操作。如果有在serializable事务开始时未提交的事务在serializable事务结束之前修改了serializable事务将要修改的行并进行了提交,则serializable事务不会读到这些变更,因此发生无法序列化访问的错误。换一种解释方法:只要在serializable事务开始到结束之间有其他事务对serializable事务要修改的东西进行了修改并提交了修改,则发生无法序列化访问的错误(英文错误信息:ORA-08177:essforthistransaction)ORACLE在数据块中记录最近对数据行执行修改操作
事务隔离级别 来自淘豆网www.taodocs.com转载请标明出处.