这里主要是纪录关于丢失插入的实验:
过程:
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博客 ” ,链接:http://blog.itpub.net/118400/viewspace-1024209/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/118400/viewspace-1024209/