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