- 论坛徽章:
- 0
|
本人为初级入门者,最近用rpgle写了有事务处理的程序。发现了一个重要问题
[本地环境]:OS/400 V5R2M0
[问题描述] :
交待一下,我处理事务的做法大致如下
1. CRTJRNRCV,CRTJRN......
2. STRJRNPF
3. STRCMTCTL
4. CALL XXXXX (RPGLE)
5.ENDCMTCTL
其中1和2不用写进程序 ,3,4,5写在一个CLP里,4是调用一个rpgle程序,里面有相应的commit,rollback处理 。
现在我发现的问题是:
在我更新或新增完一笔记录,但没有任何COMMIT和ROLLBACK的操作时,该笔记录在数据库里是可见的。即使不同的用户新建SESSION也能读取到这笔记录。可以通过strsql中看到,也可以通过RPG读取到,这样的话,极其可能导致数据错误。
一个例子,如果程序a在处理数据,程序b正在统计数据。
可能程序b取得的数据,在一段时间后被程序a的异常处理给rollback掉了。
(在ORACLE里面,系统默认是写进BUFFER里,在提交事务前,别的用户无法看到数据变化。直到执行了COMMIT别的用户才能看到数据的变化)
我想400应该有解决这种问题的方法吧,请老师指点迷津! |
|