免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3041 | 回复: 9
打印 上一主题 下一主题

关于 RPGLE 程序中,对文件事务处理的困惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-18 22:52 |只看该作者 |倒序浏览
本帖最后由 happenZheng 于 2012-04-18 22:53 编辑

两种情况:
1)在 F 表 文件声明中, COMMIT 关键字,那么在 C 表中,每一个对文件的操作(增,删,改)后,都有个COMMIT 操作码跟没有 COMMIT 操作码,有什么区别?
2)在 F 表 文件声明中,没有 COMMIT 关键字,那么在 C 表中,每一个对文件的操作(增,删,改)后,都有个COMMIT 操作码跟没有 COMMIT 操作码,又有什么区别?

假设在调用该RPGLE 程序前,都对当前作业声明了 STRCMTCTL 事务控制。
那么,如果调用程序后,ENDCMTCTL 后,对 1) 2)的操作记录,会不会有什么影响??




专注于AS400开发

论坛徽章:
0
2 [报告]
发表于 2012-04-18 23:04 |只看该作者
帮顶, 见过这样的程序,不过没有debug过,都很想了解~~~大侠们赐教一下吧~~~

论坛徽章:
0
3 [报告]
发表于 2012-04-20 19:53 |只看该作者
1) F表有commit关键字:RPG程序中执行commit,那么之前的改变就生效了。如果RPG程序中没有执行commit,那么就要看这个程序的上层程序最后是执行commit还是rollback了
。如果上层执行了commit,那么之前所有的改变也生效;如果上层程序执行的事rollback,那么之前的改变就回滚了,相当于没有做变更。

2)F表没有commit关键字:那么在这个程序中,这个文件就没有加事物处理,没有加事物处理的话,当然也就不存在落实与回滚的问题。RPG程序中加不加commit都一样,之前改变的记录不会落实也不会回滚。上层程序的commit与rollback也不会影响到没有加commit关键字的file。

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-11-05 06:20:00
4 [报告]
发表于 2012-04-21 08:59 |只看该作者
楼上说的很多,自己写测试程序就知道了

论坛徽章:
0
5 [报告]
发表于 2012-04-23 18:41 |只看该作者
niuhua77 发表于 2012-04-20 19:53
1) F表有commit关键字:RPG程序中执行commit,那么之前的改变就生效了。如果RPG程序中没有执行commit,那么 ...


Andy,你的概念不清楚,认真研究一下事务处理,最好亲自把上述lz的提问做个练习。

论坛徽章:
0
6 [报告]
发表于 2012-04-23 22:40 |只看该作者
简单说下本人自己的观点:某个文件定义了commit关键字之后,会提供一个数据回滚的机会。即执行commit时数据改变生效,rollback时数据回滚(如果程序在退出前没有任何commit和rollback时,它会自动回滚的)。如果没有commit关键字的时候,是没有回滚的机会的,也就是不论你执行commit还是执行了rollback,针对这个文件的数据改变都生效了。

论坛徽章:
0
7 [报告]
发表于 2012-04-30 22:05 |只看该作者
本帖最后由 happenZheng 于 2012-04-30 22:07 编辑

楼上正解。顺便说下,当你ENDCMTCTL 或是SIGNOFF 系统默认执行的是一个ROLLBACK操作。

请参见:
http://bbs.chinaunix.net/thread-310661-1-1.html



专注于AS400




论坛徽章:
0
8 [报告]
发表于 2012-05-01 09:13 |只看该作者
本帖最后由 passthru 于 2012-05-01 09:29 编辑

我来说两句吧。

400平台下事务处理是针对一个交流流采取一系列的数据控制。比如某个交易流有多个处理节点,分别有序的涉及到数据文件数据变化,而这些文件都在事务处理控制范围,且文件标识都加到日志接收文件中。交流流可以根据事务控制的完整性,即交易流从STRJRNCTL处理节点开始,到ENDJRNCTL处理节点,处理节点进行有序的处理。如果处理流中的处理节点都没有出错,都满足处理条件,且都有成功数据,在处理节点ENDJRNCTL之前,就COMMIT,否则则失败,交易数据就ROLBAK。如果这个交易流因为业务的需要,把这个处理流分段处理,每一段处理流处理节点都成功处理,如果这段处理流的处理结果,不会影响后续处理流的处理,即不受后续处理结果的影响,就COMMIT;否则就根据后续处理节点序列处理结果,成功就COMMIT,否则就ROLBAK。交易流处理直至处理节点ENDJRNCTL。

在处理节点RPGLE中,如果在F表定义了COMMIT键字,表明这个RPGLE处理节点可以做COMMIT,或ROLBCK处理操作。如果这个处理节点没有这两个操作动作之一,且F表定义定义了COMMIT键字,也不影响处理节点的处理和后续处理节点的处理。

论坛徽章:
0
9 [报告]
发表于 2013-01-08 09:02 |只看该作者
as400和普通的数据库事务处理有些区别,我这里有示例你可以参考:
http://blog.chinaunix.net/uid-2271579-id-3463609.html

论坛徽章:
0
10 [报告]
发表于 2013-09-12 22:44 |只看该作者
回复 9# li6612773

已转走,不过,还是得注意下,事务锁跟游标锁的区别。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP