- 論壇徽章:
- 0
|
本人為初級入門者,最近用rpgle寫了有事務處理的程序。發(fā)現(xiàn)了一個重要問題
[本地環(huán)境]:OS/400 V5R2M0
[問題描述] :
交待一下,我處理事務的做法大致如下
1. CRTJRNRCV,CRTJRN......
2. STRJRNPF
3. STRCMTCTL
4. CALL XXXXX (RPGLE)
5.ENDCMTCTL
其中1和2不用寫進程序 ,3,4,5寫在一個CLP里,4是調(diào)用一個rpgle程序,里面有相應的commit,rollback處理 。
現(xiàn)在我發(fā)現(xiàn)的問題是:
在我更新或新增完一筆記錄,但沒有任何COMMIT和ROLLBACK的操作時,該筆記錄在數(shù)據(jù)庫里是可見的。即使不同的用戶新建SESSION也能讀取到這筆記錄?梢酝ㄟ^strsql中看到,也可以通過RPG讀取到,這樣的話,極其可能導致數(shù)據(jù)錯誤。
一個例子,如果程序a在處理數(shù)據(jù),程序b正在統(tǒng)計數(shù)據(jù)。
可能程序b取得的數(shù)據(jù),在一段時間后被程序a的異常處理給rollback掉了。
(在ORACLE里面,系統(tǒng)默認是寫進BUFFER里,在提交事務前,別的用戶無法看到數(shù)據(jù)變化。直到執(zhí)行了COMMIT別的用戶才能看到數(shù)據(jù)的變化)
我想400應該有解決這種問題的方法吧,請老師指點迷津! |
|