免费注册 查看新帖 |

Chinaunix

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

转 Commit/Rollback概念 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-22 20:19 |只看该作者 |倒序浏览

  1. 数据库文件是AS/400中类型为*FILE的Object;它们既可以是PF又可以是LF,既可以是外部描述,又可以是程序描述。
  2. 访问数据库文件时使用落实控制(COMMIT/ROLBK),可以确保对数据库文件操作的以下两个结果之一:
  3. 1、全部数据库文件操作都是成功的(落实操作);
  4. 2、全部数据库文件操作都是无效的(取消操作).
  5. 用这种方法,从而保证了数据库文件的完整性;另外,可以把一组操作当作一个单元来处理。

  6. 使用落实控制,要做:

  7. 在AS/400上:
  8. 1、使用落实控制的准备:用CL命令CRTJRN(生成日志)、CRTJRNRCV(生成日志接收器)和STRJRNPF(日志物理文件).
  9. 2、通知AS/400启动和结束落实控制的时间:用CL命令STRCMTCTL(启动落实控制)和ENDCMTCTL(结束落实控制).
  10.    ●落实控制琐:
  11.    在STRCMTCTL命令中,要注意指定一个上锁级别,LCKLVL(*ALL),LCKLVL(*CHG)或LCKLVL(*CS),当你的程序在落实控制下操作,并且对一个文件的记录已在落实控制下进行了I/O(输入/输出)处理,记录由落实控制加锁。
  12.    ●落实控制范围:
  13.    当用STRCMTCTL命令启动落实控制时,系统建立一个落实定义。落实定义包括作业中落实控制下修改的资料信息;
  14. 落实定义只适用于发出STRCMTCTL命令之后的作业并且在发出ENDCMTCTL命令结束。
  15.    落实定义范围指出了作业中哪些程序要使用落实控制,落实定义范围在活动组级或作业级。
  16.    缺省的落实定义范围是发出STRCMTCTL命令的程序所在的活动组,也就是活动组级。只在这个活动组中运行的程序
  17. 才能使用落实定义。
  18.    OPM程序将使用*DFTACTGRP落实定义;ILE程序用与之有关的活动组。
  19.    你可以在STRCMTCTL命令的落实范围参数CMTSCOPE上指定落实定义的范围。
  20. 在RPG程序中:
  21. 1、在要做落实控制文件的文件描述规范表上指出落实控制(COMMIT).
  22. 2、用COMMIT落实操作码实施对在落实控制下数据库文件的一组修改,或者用ROLBK取消操作码对在落实控制下
  23.    数据库文件的一组修改。

  24. ★注:落实控制只适用于数据库文件。

  25. [举例]

  26. ▲<例1>;这个例子解释了在落实控制下程序所用的规范表和CL命令:

  27. ※要准备使用落实控制,发出下列CL命令:
  28. 1、CRTJRNRCV JRNRCV(RECEIVER)
  29. 这个命令生成一个名为REVEIVER的日志接收器.
  30. 2、CRTJRN JRN(JOURNAL) JRNRCV(RECEIVER)
  31. 这个命令生成一个名为JOURNAL的日志,并连接名为RECEIVER的日志接收器.
  32. 3、STRJRNPF FILE(MASTER TRANS) JRN(JOURNAL)
  33. 这个命令把文件MASTER和TRANS的日志项记到日志JOURNAL中.

  34. ※在程序中,为文件MASTER和TRANS指出COMMIT.
  35. ------------------------------------------------------------------------------
  36. FMASTER    UF   E       K       DISK         COMMIT
  37. FTRANS     UF   E       K       DISK         COMMIT
  38. F*

  39. C             :
  40. C             :
  41. C*
  42. C*  使用COMMIT操作,如果成功,做完整的一组操作;如果不成功,撤消所有修改.
  43. C*
  44. C                  UPDATE       MAST_REC                 90
  45. C                  UPDATE       TRAN_REC                 91
  46. C                  IF           *IN90 OR *IN91
  47. C                  ROLBK
  48. C                  ELSE
  49. C                  COMMIT
  50. C                  ENDIF
  51. -----------------------------------------------------------------------------

  52. ※要在落实控制下操作程序,发出命令:
  53. 1、STRCMTCTL LCKLVL(*ALL)
  54. 这个命令启动带有最高级锁定的落实控制.
  55. 2、CALL REVIST
  56. 这个命令调用REVIST命令.
  57. 3、ENDCMTCTL
  58. 这个命令结束落实控制,并产生一个隐含的ROLL BACK操作.

  59. ▲<例2>;:有条件的落实控制例子:
  60.    可以编写一个程序来控制打开一个运行时做落实控制的文件。通过完成有条件落实控制,可不用写出
  61. 两套相同的程序:一套在落实控制下执行,另一套不在落实控制下执行。
  62.    COMMIT键字有一个可选参数,它允许你指定有条件的落实控制。在这个文件的文件描述规范表的键字
  63. 区输入COMMIT键字。ILE RPG/400编译程序定义一个1个字节的与参数中规定的同名字符型字段;如果参数
  64. 为1,文件就在落实控制下运行。
  65.    COMMIT键字参数必须在文件打开之前设置。可以在调用程序时传递一个值来设置,也可以在程序中直接设为"1"。
  66.    对于共享式打开,如果文件已经打开了,即使COMMIT键字参数设为1也没有作用。

  67. --------------------------------------------------------------------------------
  68. FMASTER    UF   E       K       DISK         COMMIT(COMMITFLAG)
  69. FTRANS     UF   E       K       DISK         COMMIT(COMMITFLAG)


  70. C*  如果COMMITFLAG='1',文件在落实控制下打开,否则不是.
  71. C   *ENTRY        PLIST
  72. C                 PARM                          COMMITFLAG
  73. C                 :
  74. C                 :
  75. c*
  76. C*  使用COMMIT操作,如果成功,做完整的一组操作;如果不成功,撤消所有修改;
  77. C*  仅可在文件是在落实控制打开时,才能用COMMIT和ROLBK操作(即COMMITFLAG='1').
  78. C*
  79. C                  UPDATE       MAST_REC                 90
  80. C                  UPDATE       TRAN_REC                 91
  81. C                  IF           COMMITFLAG='1'
  82. C
  83. C                  IF           *IN90 OR *IN91
  84. C                  ROLBK
  85. C                  ELSE
  86. C                  COMMIT
  87. C                  ENDIF
  88. C
  89. C                  ENDIF
  90. ---------------------------------------------------------------------------------

  91. 最后,提提程序周期中的落实控制:
  92.    落实控制是给全过程文件用的,对主文件和次文件不使用落实控制。它的输入输出是在程序员的控制下,是由RPG
  93. 程序周期控制,原因如下:
  94. ●在程序中不能为最后总计输出发出一个COMMIT操作;
  95. ●周期内的程序从一个上锁记录条件中恢复是困难的;
  96. ●级别指示器不能由ROLBK操作更新设置;
  97. ●一个ROLBK操作以后,处理匹配记录可能产生一个顺序错误。
复制代码

论坛徽章:
0
2 [报告]
发表于 2004-04-22 23:52 |只看该作者

转 Commit/Rollback概念

VERY GOOD.

论坛徽章:
0
3 [报告]
发表于 2004-04-23 08:29 |只看该作者

转 Commit/Rollback概念

收藏先!3KS!

论坛徽章:
0
4 [报告]
发表于 2004-04-23 16:03 |只看该作者

转 Commit/Rollback概念

讲解得太好了。
前一段时间看了日文的资料,理解的没这么透彻。
谢谢!

论坛徽章:
0
5 [报告]
发表于 2004-04-24 15:00 |只看该作者

转 Commit/Rollback概念

老大,就是老大,!

论坛徽章:
0
6 [报告]
发表于 2004-04-24 23:07 |只看该作者

转 Commit/Rollback概念

好啊!

论坛徽章:
0
7 [报告]
发表于 2005-12-26 18:00 |只看该作者

!!!

老帖子
翻出来看看

论坛徽章:
0
8 [报告]
发表于 2005-12-26 18:03 |只看该作者
学习呢!!!!!!!!!!!!!!

论坛徽章:
0
9 [报告]
发表于 2005-12-27 16:47 |只看该作者
厉害, 佩服!
以前我用vb操作400上文件的时候,想做这么一个事务处理, 程序老提示:
the file is invaild for the operation. 后来研究了很久,才发现要给文件建立日记,
不过据说事务锁表挺严重的,不知道有谁有研究?

论坛徽章:
0
10 [报告]
发表于 2006-01-04 10:13 |只看该作者
虽然用过,但看了还是收获不少
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP