您的位置:首页 > 其它

无法串行访问事务错误:ORA-08177: can't serialize access for this transaction

2011-02-18 21:32 746 查看
当事务隔离级别为serializable,两个事务并发修改同一个对象,当前一个事务提交或回滚时,第二个事务会收到该错误。

测试使用表,此表用于生成唯一主键:

test@ORCL> create table id_table
2 (id_name varchar2(30) primary key,
3 id_value number);


Table created.

test@ORCL>insert into id_table values('MY_KEY',0);

1 row created.

test@ORCL>commit;

Commit complete.

会话一事务隔离级别serializable,修改id_table表中MY_KEY值加1,但不提交

test@ORCL>set transaction isolation level serializable;

Transaction set.

会话二事务隔离级别serializable,修改id_table表中MY_KEY值加1,但不提交

test@ORCL>set transaction isolation level serializable;

Transaction set.

test@ORCL>update id_table set id_value = id_value + 1 where id_name ='MY_KEY';

此时修改会被阻塞

会话一提交修改的数据,会话二会收到如下信息

test@ORCL>update id_table set id_value = id_value + 1 where id_name = 'MY_KEY';
update id_table set id_value = id_value + 1 where id_name = 'MY_KEY'
*
ERROR at line 1:
ORA-08177: can't serialize access for this transaction
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐