ITPub博客

首页 > 数据库 > Oracle > 关于会话和事务并发串读某些实验

关于会话和事务并发串读某些实验

原创 Oracle 作者:zhangsolomon 时间:2009-07-17 00:12:04 0 删除 编辑

这里主要是纪录关于丢失插入的实验:

过程:

A会话,启动串读事务

会话B,启动串读事务,插入,并COMMIT;

A会话 ,update,报错与否。

如下:

sessionA> set transaction isolation level serializable;

事务处理集。

----

加上select

select * from t;

COL1
------
-1
1
2
3

---

sessionB> set transaction isolation level serializable;

事务处理集。

sessionB> insert into t values (-100);

已创建 1 行。

sessionB> commit;

提交完成。

sessionA> update t set col1=col1+1;
update t set col1=col1+1
*
第 1 行出现错误:
ORA-08177: 无法连续访问此事务处理
sessionA> update t set col1=col1+1 where col1<>-100;
update t set col1=col1+1 where col1<>-100
*
第 1 行出现错误:
ORA-08177: 无法连续访问此事务处理

第一处出现08177正确,只是第二处出现就不合理了。。。原因可能是回滚段判断SCN后就没有再比较col1<>-100这个条件。

另一缺点:

所有实验都在CMD下做,当第一次登陆进去的时候,

A 启动后,在A update之前必须有一次select ...才能保证update t=t+1;报错(第一次没这个操作update将成功),报错之后的实验可以不用select 都可以报错,另

where t<>-1,终不能成功。

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/118400/viewspace-1024209/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-04-16

  • 博文量
    16
  • 访问量
    306697