转 Commit/Rollback概念
[code:1:5cd4411d09]
数据库文件是AS/400中类型为*FILE的Object;它们既可以是PF又可以是LF,既可以是外部描述,又可以是程序描述。
访问数据库文件时使用落实控制(COMMIT/ROLBK),可以确保对数据库文件操作的以下两个结果之一:
1、全部数据库文件操作都是成功的(落实操作);
2、全部数据库文件操作都是无效的(取消操作).
用这种方法,从而保证了数据库文件的完整性;另外,可以把一组操作当作一个单元来处理。
使用落实控制,要做:
在AS/400上:
1、使用落实控制的准备:用CL命令CRTJRN(生成日志)、CRTJRNRCV(生成日志接收器)和STRJRNPF(日志物理文件).
2、通知AS/400启动和结束落实控制的时间:用CL命令STRCMTCTL(启动落实控制)和ENDCMTCTL(结束落实控制).
●落实控制琐:
在STRCMTCTL命令中,要注意指定一个上锁级别,LCKLVL(*ALL),LCKLVL(*CHG)或LCKLVL(*CS),当你的程序在落实控制下操作,并且对一个文件的记录已在落实控制下进行了I/O(输入/输出)处理,记录由落实控制加锁。
●落实控制范围:
当用STRCMTCTL命令启动落实控制时,系统建立一个落实定义。落实定义包括作业中落实控制下修改的资料信息;
落实定义只适用于发出STRCMTCTL命令之后的作业并且在发出ENDCMTCTL命令结束。
落实定义范围指出了作业中哪些程序要使用落实控制,落实定义范围在活动组级或作业级。
缺省的落实定义范围是发出STRCMTCTL命令的程序所在的活动组,也就是活动组级。只在这个活动组中运行的程序
才能使用落实定义。
OPM程序将使用*DFTACTGRP落实定义;ILE程序用与之有关的活动组。
你可以在STRCMTCTL命令的落实范围参数CMTSCOPE上指定落实定义的范围。
在RPG程序中:
1、在要做落实控制文件的文件描述规范表上指出落实控制(COMMIT).
2、用COMMIT落实操作码实施对在落实控制下数据库文件的一组修改,或者用ROLBK取消操作码对在落实控制下
数据库文件的一组修改。
★注:落实控制只适用于数据库文件。
[举例]
▲<例1>这个例子解释了在落实控制下程序所用的规范表和CL命令:
※要准备使用落实控制,发出下列CL命令:
1、CRTJRNRCV JRNRCV(RECEIVER)
这个命令生成一个名为REVEIVER的日志接收器.
2、CRTJRN JRN(JOURNAL) JRNRCV(RECEIVER)
这个命令生成一个名为JOURNAL的日志,并连接名为RECEIVER的日志接收器.
3、STRJRNPF FILE(MASTER TRANS) JRN(JOURNAL)
这个命令把文件MASTER和TRANS的日志项记到日志JOURNAL中.
※在程序中,为文件MASTER和TRANS指出COMMIT.
------------------------------------------------------------------------------
FMASTER UF E K DISK COMMIT
FTRANS UF E K DISK COMMIT
F*
C :
C :
C*
C* 使用COMMIT操作,如果成功,做完整的一组操作;如果不成功,撤消所有修改.
C*
C UPDATE MAST_REC 90
C UPDATE TRAN_REC 91
C IF *IN90 OR *IN91
C ROLBK
C ELSE
C COMMIT
C ENDIF
-----------------------------------------------------------------------------
※要在落实控制下操作程序,发出命令:
1、STRCMTCTL LCKLVL(*ALL)
这个命令启动带有最高级锁定的落实控制.
2、CALL REVIST
这个命令调用REVIST命令.
3、ENDCMTCTL
这个命令结束落实控制,并产生一个隐含的ROLL BACK操作.
▲<例2>:有条件的落实控制例子:
可以编写一个程序来控制打开一个运行时做落实控制的文件。通过完成有条件落实控制,可不用写出
两套相同的程序:一套在落实控制下执行,另一套不在落实控制下执行。
COMMIT键字有一个可选参数,它允许你指定有条件的落实控制。在这个文件的文件描述规范表的键字
区输入COMMIT键字。ILE RPG/400编译程序定义一个1个字节的与参数中规定的同名字符型字段;如果参数
为1,文件就在落实控制下运行。
COMMIT键字参数必须在文件打开之前设置。可以在调用程序时传递一个值来设置,也可以在程序中直接设为"1"。
对于共享式打开,如果文件已经打开了,即使COMMIT键字参数设为1也没有作用。
--------------------------------------------------------------------------------
FMASTER UF E K DISK COMMIT(COMMITFLAG)
FTRANS UF E K DISK COMMIT(COMMITFLAG)
C* 如果COMMITFLAG=1,文件在落实控制下打开,否则不是.
C *ENTRY PLIST
C PARM COMMITFLAG
C :
C :
c*
C* 使用COMMIT操作,如果成功,做完整的一组操作;如果不成功,撤消所有修改;
C* 仅可在文件是在落实控制打开时,才能用COMMIT和ROLBK操作(即COMMITFLAG=1).
C*
C UPDATE MAST_REC 90
C UPDATE TRAN_REC 91
C IF COMMITFLAG=1
C
C IF *IN90 OR *IN91
C ROLBK
C ELSE
C COMMIT
C ENDIF
C
C ENDIF
---------------------------------------------------------------------------------
最后,提提程序周期中的落实控制:
落实控制是给全过程文件用的,对主文件和次文件不使用落实控制。它的输入输出是在程序员的控制下,是由RPG
程序周期控制,原因如下:
●在程序中不能为最后总计输出发出一个COMMIT操作;
●周期内的程序从一个上锁记录条件中恢复是困难的;
●级别指示器不能由ROLBK操作更新设置;
●一个ROLBK操作以后,处理匹配记录可能产生一个顺序错误。
[/code:1:5cd4411d09]
| michael9406 回复于:2004-04-22 23:52:15 |
| VERY GOOD. |
| qm 回复于:2004-04-23 08:29:37 |
| 收藏先!3KS! |
| tianyi 回复于:2004-04-23 16:03:42 |
| 讲解得太好了。
前一段时间看了日文的资料,理解的没这么透彻。 谢谢! |
| mamei 回复于:2004-04-24 15:00:04 |
| 老大,就是老大,! |
| 刘天王 回复于:2004-04-24 23:07:50 |
| 好啊! |
最热门文章推荐:
>· 富士通笔记本
>· 清华同方笔记本
>· 笔记本选购
>· 长城笔记本
>· borland jbuilder
>· borland 数据库
>· borland developer
>· 世界之窗浏览器
↓相关文章:
- · 有倒序排列的KEY值时的SETLL和SETGT
- · 大家帮忙来找茬(到底RPG程序错在哪?)
- · 讨论:关于创建obj时的参数--share
- · 帮忙看看这段程序的问题出在哪里?
- · 《最后100天的AS400学习心情笔记》
- · 在一个PF中加一字段,用来表示记录的序号!
- · SLR60磁带机可以做200GB系统的全系统备份,何故?
- · 讨论系统设备的异动监控
- · 求助:存储过程的查找和COPY
- · 【步骤】使用SQL DTS功能实现从DB/2向SQL Server传输数据.
- · 请教:如何修改PF文件的CCSID值?
- · 关于触发器的初级问题,请用过的大虾指教
- · 如何使用FTP在PC和AS/400之间传输包含中文的文件
- · 各位前辈,小女子是400初学之初学
- · (原)在as400上更换硬盘
- · pcom各种版本的问题总结
- · (如何在iSeries(AS/400)將资料加密(ZT)
- · 急等 如何更改as/400 V4R5 如何更改IP地址
- · 通过Navigator配置实现PC端拨号登陆远程AS/400.
- · 高版本安全数据向低版本系统迁移问题
- · as400与windows如何互相传送文件
- · 【分享】如何实现直接从AS/400发送信息到指定的邮箱.
- · rpg的小问题谁能解决一下,先谢了!(新手)
- · CA连接不上,PCOMM正常使用,授权及网络正常。什么问题?
- · exfmt与write的区别
- · 在TCPIP基础上建立APPC连接
- · 硬盘利用率的问题
- · 如何利用RPG,CL和ACCESS制作一个条形码标签的打印程序?
- · domino的邮件问题 急! (居士快进)
- · 请教400上的文件问题
- · 如何用PC超级终端对RS6000完成控制及安装(希望是我的精品)
- · (原创) 7133-T40阵列故障解决实例
- · 又来临时抱佛脚了,请教s7a电源问题
- · 经验交流<如何在AIX下面更改before login banner>
- · 刚完成的一个hacmp 5.1 +db2 udb 8.1 ese环境下的HA配置!
- · [原创]SNORT&ACID install on AIX 5.2
- · 一光纤卡的问题的解决,有类似问题的可以参考
- · 使用SFU实现Windows和AIX文件共享-请求加精
- · ORACLE/RAC安装完全攻略
- · Step bye Step for Install the Domino server 7 on aix 5L 5.2
- · 199学习笔记(chap11)
- · 在cp时的怪问题
- · 一个系统频繁宕机(888 102 300 0C0)的案例分析与解决!!!
- · 个人总结-理解和使用aix的日志系统
- · VIO配置1
- · IY19375补丁打不上。-_-!!!
- · 老的文章不一定就没有用处了:)
- · 任何在aix下面看你的系统是32位还是64位的
- · 吃了一个“螃蟹”
- · 监视别人在登录后都输入了什么命令
- · Securing AIX 5L from Scratch
- · 如何确定pSeries和RS/6000 CPU的主频?
- · .kshrc的作用
- · AIX 5.2对用户登录界面的安全性的增强
- · 更改HACMP环境里网卡的ip地址
- · 做AIX rootvg的镜像
- · 替换SSA raid磁盘阵列中坏盘步骤
- · 2005-02-02 日的学习内容
- · 今天是大年初一
- · 谚语
- · awk将文件的两行合并为一行
- · aix 版本显示问题
- · Domino 6 AIX安装环境
- · aix操作系统的备份和恢复
- · 如何通过PC机的超级终端控制RS6000
- · HACMP的注意事项
- · AIX经验汇总
- · hacmp的定义和发展
- · hacmp 1.1.2--1.1.4(续1)
- · AIX中关于LVM中有几个关于容量的计算
- · AIX 初学者之梦
- · ODM
- · 开门大吉之我言
- · 2个lpar1个光驱的问题--NFS的应用
- · 还是嫩啊。
- · 三年之痒
- · AIX系统升级微码,打补丁.
- · 微码问题。
- · AIX学习笔记
- · AIX下,得到用户上次更改密码时间的脚本(原创)

