保姆级AS400 CL介绍与应用(硬核)

CL 命令的作用

CL (Control Language) 控制语言是用户与操作系统之间的主要接口。可以说用户管理和操作 AS/400 系统,均可以通过 CL 实现。用户在不同的工作站或客户端可以同时使用 CL,其输入方式有五种:

* 在命令行输入

* 在菜单画面选择

* 在 work with 菜单中,option 选项

* 在 CL 程序中执行

* 远程调用

前三种输入方式给用户提供一种交互式的操作方法,只执行一条命令;第四种方式给用户提供一种操作,并包含逻辑控制,可以完整地实现一项功能;第五种方式给用户提供在客户端直接执行主机操作的接口。

由于 CL 使用了统一的命名方法,提供 prompt 式的提示功能和具体到域值的在线帮助,以及自动生成命令参数的缺省值, 再加上有效性检查,从而使得 CL 的使用变得非常简单、方便和灵活。

CL 命令的参数

CL 使用了一种很科学,较为成功的命名方法。每条命令由命令名和一系列参数组成。命令名通常由动词加上接受动词的名词定义为目标Ob ject)组成,单词通常缩写为三个字母。

例如:

CL 命令                  命令名

Send Message              SNDMSG

Copy File                       CPYF

Work with Device Desripyions  WRKDEVD

重点如果你记不住,没有关系,你记住其中一个基本的就行就行,比如MSG, 你可以用 GO CMDMSG

查看到所有的MSG相关的命令

图片

还有一种就是你只记得一半:

CRTJRN*

图片

CL 的参数由关键字和参数值组成,关键字通常和命令一样缩写,它用于说明参数的作用,在命令输入屏,按 F11 键,即可看到关键字。在命令行输入命令时,如果参数是按照固定的顺序输入,则可以省略关键字。

例如: SNDMSG MSG (HOLLEO) TOUSR (LENG)

命令名 关键字 参数值

大多数 CL 都是 针对目标而言,目标是一个占据了一定存储空间的实体,它包括自身属性及其数据特征的描述,系统可以对它进行操作。目标的属性包括名字、类型、长度、建立日期及其它属性。不同目标具有不同的属性描述,大部分属性是可以修改的,而不需要重新建立。目标的数据值是储存于目标中的信息集合,例如: 程序的值是组成程序的执行码,文件的值是组成文件的记录。

目标的类型很多,常用的几种包括:

* LIB 库

* FILE 文件

* MSGF 信息文件

* PGM 程序

* CMD 命令

* JOBQ 作业队列

* DTAQ 数据队列

* MSGQ 信息队列

* OUTQ 输出队列

* DTAARA 数据域

* JRN 日志

* JRNRCV 日志接受器

* USRPRF 用户简要表

* SBSD 子系统描述

* JOBD 作业描述

* LIND 线路描述

* CTLD 控制器描述

* DEVD 设备描述

一个具体目标是由目标名和目标类型来唯一标识的,不同的目标类型可以使用同一个目标名。目标名由用户指定,目标类型由生成它的命令决定。不同类型的目标具有不同的操作。例如:

CALL 命令只针对 *PGM 目标进行操作。

关于目标的操作,系统也进行了统一的规范,常用的几种包括:

* WRK 工作

* CRT 建立

* ADD 增加

* CHG 改变

* DLT 删除

* DSP 显示

* EDT 编辑

* CPY 拷贝

* MOV 移动

* RNM 变名

* SAV 备份

* RST 恢复

* RTV 获取

* GRT 授权

* DMP 转储

CL 编程

CL 程序的作用

CL 程序是由 CL 命令组成,这些命令被编译成可供随时调用的程序。使用 CL 程序的优点包括:

* CL 程序比单独输入和运行命令快,因为命令被编译成能够立即运行的形式。

* 有些功能需要多条 CL 命令一起完成。

* 参数可以传递给 CL 程序,CL 程序内部也接收变量的定义, 以适应特殊需要的程序操作。

* CL 程序能够像其它高级语言程序一样被测试和监控。

CL 程序可以应用到许多方面,包括:

* 通过 CL 程序完成单独输入 CL 命令所不能完成的功能,例如,人工或者定时提交批作用完成一项工作,如启动子系统, 进行文件备份,整顿系统资源。

* 给交互式或批处理的应用程序提供一个接口,使得在应用程序中直接进行系统操作或者获取系统参数。

* 在网络通信方面,CL 程序往往承担应用主控程序的角色。

CL 程序的结构

CL 程序是借助于 ADT 工具中的 SEU 输入的,在输入过程中,键入一条命令并按 F4 键,就会显示出这条命令的提示画面,方便用户输入相应的参数值。CL 源程序主要分为以下几个部分:

* 程序的开始和结束:

PGM PARM(&A &B) 开始 CL 程序

END PGM 结束程序

* 变量定义: DCL 定义变量

DCLF 定义文件

* CL 处理命令: CHGVAR 变量赋值

MONMSG 监控错误信息

SNDPGMMSG 传送程序信息

RTVJOBA 获取作业属性值

* 逻辑控制命令: IF THEN ELSE

DO ENDDO

GOTO

* 内部函数:     % SST 取子串

* CAT 连接字符

* 程序控制命令: CALL 调用子程序

RETURN 返回调用程序

CL 程序的命令

CL 程序中仅可包含 CL 命令,由系统提供的大多数 CL 命令可用于 CL 程序,而有些 CL 命令是专门用在 CL 程序中的。 下面是一张用在 CL 程序中的部分命令清单,其中带有星号的表示该命令仅能用于 CL 程序内部。

变量的使用

* 变量说明,使用 DCL 命令来定义变量及其属性、长度和初值。标准格式如下:

* CHAR

DCL VAR (变量名) TYPE * DEC LEN (长度) VALUE(初值)

* LGL

使用 DCL 命令时,必须遵循的规则如下:

#CL 变量名必须以 & 开始,后跟字符不多于 10 个,& 后的第一个字符必须是字母,其余的可以是字母或数字。

#CL 变量值必须是:字符型最长为 9999 个字符;数值型为压缩十进制数,最长为 15 位,其中小数位最长为 9 位; 逻辑型为“0”或“1”,表示假或真。

#CL 变量的缺省初值为:字符型为空,数值型为 0,逻辑型为“0”。

#对于字符型和数值型,如果指定了初值而未指定长度,则缺省长度为初值长度。

* 变量值中小写字符的限制

用作变量的保留值必须用大写字母表示,特别是当它们用引号括起来的时候。例如:

DCL VAR(&LIB) TYPE(*CHAR) LEN(10) VALUE(’*LIBL’)

DLTPGM &LIB/MY PROG

注意:如果 VALUE 参数不使用引号,则小写是正确的。因为使用 SEU 编辑会自动转换成大写。

* 变量赋值,使用 CHGVAR 命令给变量赋值,其值可改变成:

#常量: CHGVAR VAR(&A) VALUE(0)

#变量: CHGVAR VAR(&A) VALUE(&B)

#计算量:CHGVAR VAR(&A) VALUE(&A+1)

#函数量:CHGVAR VAR(&A) VALUE(%SST(&B 1 5))

CHGVAR VAR(%SST(&A 1 5)) VALUE(&B)

赋值时应注意以下几点:

#对逻辑变量,被改变的值必须是一个逻辑值。

#对数值变量,只能赋予十进制数,或者数字字符变量(包括小数点和正负号)。

#对字符变量,既可接受字符,也可接受十进制数。赋十进制数时,该字符变量的值是右对齐,前导补零,负号放在最左边。

* CL 程序中注解的书写,在命令的头尾使用一对符号:/* 和*/。

如果一行写不下一条命令,使用 +。

CL 程序内部的逻辑控制

* 条件转移命令:

IF COND(条件) THEN(一条命令)

ELSE CMD(一条命令)

或者 IF COND(条件) THEN(DO)

.

ENDDO

ELSE CMD (DO)

.

ENDDO

* 无条件转移命令:GOTO LABEL

* 操作符:

逻辑的 *AND *OR *NOT

算术的 + - * /

字符的 *CAT *TCAT

关系的 *EQ *GT *LT *GE *LE *NE

* 监视信息命令:MONMSG

MONMSG MSGID(信息标识 1 … 信息标识 50)+ EXEC(CL命令)

系统对于CL命令执行错误所送出的信息都具有唯一的标识符,如果不进行监视,则系统会终断程序,自动显示错误信息。

系统资源的获取

* 日期格式转换命令:CVTDAT

CVTDAT DATE(被转换日期) TOVAR(转换后日期) FROMFMT(原格式) TOFMT(新格式) TOSEP(新分隔符)

其中:转换后日期的长度至少是:

#对儒略日期(如 YMD,DMY 或 JUL 格式),不使用分隔符为 5 个字符,使用分隔符为 6 个字符。

#对非儒略日期,不使用分隔符为 6 个字符,使用分隔符为8 个字符。 日期格式和分隔符可以通过按 F4 键选择。

* 检索系统值命令:RTVSYSVAL

RTVSYSVAL SYSVAL(系统值名)RTNVAR(CL变量名)

其中:系统值名可以通过按 F4 键选择,如:系统当前日期的系统值是 QDATE。变量名必须和系统值的类型匹配,对字符型和逻辑型系统值而言,变量名的长度必须相符,对数字型,则长度不小于系统值长度。

* 检索配置源命令:RTVCFGSRC

用于将现有配置的描述存放到源文件成员中

* 配置状态检索命令:RTVCFGSTS

用于获取各类配置描述的现行状态,放入 CL 变量。

* 检索网络属性的命令:RTVNETA

用于获取系统的网络属性,放入相应的 CL 变量。如:系统名SYSNAME,本地网络标识 LCLNETID。

* 检索作业属性命令:RTVJOBA

用于获取当前运行作业的属性,放入相应的 CL 变量。如:作业名 JOB,用户名 USER。

* 检索目标描述命令:RTVOBJD

用于获取指定目标的描述属性,放入相应的 CL 变量。

* 检索用户档案命令:RTVUSRPRF

用于获取指定用户的档案资料,放入相应的 CL 变量。

程序间的通讯

程序间的通讯是指不同程序之间数据或参数的传递和交流。这种通讯可以出现在不同种类的程序中。如:RPG 与 C 语言,也可以出现在不同机器上,如:PC 与 AS/400。针对OS/400 而言,通常程序间的通讯具有三种方式:

* CALL、RETURN 命令

* 数据队列通讯

* 数据域通讯

CALL 命令的使用

调用程序: CALL PGM(PGMA) PARM(&A &B)

被调用程序:PGM PARM(&C &D)

有关 CALL 命令使用的几点说明:

* 参数值可以是字符常量、数值常量、逻辑常量或 CL 常量,最多可达 40 个。

* 参数值以 CALL 命令中出现的顺序传送,这必须与被调用程序的参数顺序相匹配,变量名不一定相同。

* 被调程序中的接收参数必须说明,但接收值不受变量说明中初值的影响。

* 接收参数值的改变会反映到调用程序中,但常量传送不会改变。

* 字符常量通常以 32 个字节传送,数字常量以 15.5 长度压缩格式传送。

数据队列的程序通讯

数据队列(*DTAQ)是系统目标中的一种类型,当建立了这种目标后,一个程序可以发送数据给它,另一个程序再从中接收数据,从而达到程序之间的数据通讯。

数据队列的优点

* 数据队列是两个作业之间进行异步通讯的最快方法。相对数据库文件、消息队列或数据域而言,它需要较少的额外开销。

* 多个作业可以向相同的数据队列送数据和取数据,而数据队列的先进先出、后进先出或关键字顺序排列属性,能够保证数据送取的正确性。

* 在任何高级语言程序中,通过调用系统提供的程序,就可以对数据队列进行操作,而且操作方法灵活方便。数据队列的操作和使用包括两类:第一类使用 CL 命令;第二类调用系统程序。

CL 命令:

CRTDTAQ 建立数据队列

DLTDTAQ 删除数据队列

WRKDTAQ 工作数据队列

系统程序:

QSNDDTAQ 发送数据队列

QRCVDTAQ 接收数据队列

QCLRDTAQ 清除数据队列

QMHQRDQD 检索数据队列

数据队列的发送

需要将数据发送给数据队列,只要在程序中调用QSNDDTAQ 。在 CL 程序中,调用的格式如下:

CALL PGM(QSNDDTAQ) PARM(&QNAME &LIB &FLDLEN &FIELD &KEYLEN &KEY)

&QNAME: 是长度为10的字符型,它命名了数据队列,如:IN_Q。

&LIB: 是长度为10的字符型,它命名了数据队列所在的库,如:*LIBL。

&FLDLEN: 是长度为5的数字型,它规定了发送给数据队列的字符数,如:100。

&FIELD: 是长度为&FLDLEN的字符型,它包含了具体发送给数据队列的数据。

&KEYLEN: 是长度为3的数字型,它说明了传送给数据队列的关键字长度,如:6。

&KEY: 是长度为&KEYLEN的字符型,它包含了传送给数据队列的关键字数据。

注:后两个参数可以自选,如果说明了一个,则必须说明另一个。

数据队列的接收

需要从数据队列中接收数据,只要在程序中调用QRCVDTAQ 。在 CL 程序中,调用的格式如下:

CALL PGM(QRCVDTAQ) PARM(&QNAME &LIB &FLDLEN &FIELD &WAIT &ORDER KEYLEN &KEY &SNDRLEN &SNDR)

&QNAME: 是长度为10的字符型,它命名了数据队列。如: OUT_Q。

&LIB: 是长度为10的字符型,它命名了数据队列所在的库。如:*LIBL。

&FLDLEN: 是长度为5的数字型,它规定了发送给数据队列的字符数。

&FIELD: 是长度为&FLDLEN的字符型,它包含了从数据队列中接收到的具体数据。

&WAIT: 是长度为5的数字型,它说明了等待接收数据的时间。负数表示无限制的等待;零表示不等待;

正数示要等待的秒数,最大值是9999。这个参数只有在数据队列中无满足条件的数据时, 才起作

用。

&ORDER: 是长度为2的字符型,它说明了按关键字接收数据的条件。可用的字符值是:GT、LT、EQ、

GE、LE。

&KEYLEN: 是长度为3的数字型,它说明了接收数据队列的关键字长度。

&KEY: 是长度为&KEYLEN的字符型,它标识了用于从数据队列中接收数据的关键字变量。

&SNDRLEN:是长度为3的数字型,它规定了发送者标识的长度。

&SNDR: 是长度为&SNDRLEN 的字符型,它包含了发送者标识的数据。

注:后三个参数可以任选,但是&ORDER、&KEYLEN和&KEY 必须同时说明。

数据队列的清除

需要从数据队列中清除数据,只要在程序中调用 QCLRDTAQ 在 CL 程序中,调用的格式如下:

CALL PGM(QCLRDTAQ) PARMM(&QNAME &LIB)

数据队列的检索

需要检索一个数据队列的描述项,只要在程序中调用QMHQRDQD。在 CL 程序中,调用的格式如下:

CALL PGM(QMHQRDQD) PARM(&RCVR &RCVRLEN &FORMAT &DQNAME)

&RCVR: 是长度为&RCVRLEN的字符型,它标识了含有数据队列性的变量。

&RCVRLEN: 是长度为4的数字型,它说明了&RCVR长度。

&FORMAT: 是长度为8的字符型,它定义了接收模板的格式。

&DQNAME: 是长度为20的字符型,它标识了数据队列和所在库,前十个字符是队列名字,后十个字符是库名。

数据域的程序通讯

数据域(*DTAARA)是系统目标中的一种类型。当建立了这种目标后,可以用来存入数据,以便任何程序进行读取和修改。数据域的典型用途如下:

* 提供用于几个程序中的常数字段,易于共享和修改。如:标题、说明等。

* 在一个作业中提供一个传递信息的区域。

* 在一个作业中提供一个字段作为控制参数,以便容易地得到修改。

数据域的 CL 命令包括:

CRTDTAARA 建立数据域,长度不超过2000

CHGDTAARA 改变数据域,改变时数据域被锁定

DSPDTAARA 显示数据域,可以以十六进制方式显示

RTVDTAARA 检索数据域,检索值需要存入 CL 变量

DLTDTAARA 删除数据域

WRKDTAARA 工作数据域

测试功能

CL 程序的编译

CL 源程序必须经过编译,生成 *PGM 方可运行。建立程序的方法有两种:一是,使用 CL 命令 CRTCLPGM,二是,使用PDM 菜单选项 14,按 F4 键即可对命令参数进行选择。

系统编译的情况全部记录在编译清单中,通过 WRKSPLF 即可看到。编译过程中的错误被列在相应命令后面,以及文件的最后,方便用户查找。下列类型的错误将停止程序的建立:

* 值错

* 句法错

* 命令内部与参数间不符

* 有效性检查有错

CL 程序可以通过反编译命令 RTVCLSRC,重新建立 CL源程序。使用该命令时,必须满足建立编译程序的参数 ALWRTVSRC 为 *YES。 当源程序被反编后,任何注释信息不再重新产生,以下程序序言将被建立:

* 所有者名

* 源程序的最终修改日期

* 源程序的重建日期和时间

* 最初编译时的许可程序级

CL程序的编译

CL 程序的测试

对于 CL 程序在编译和运行中的错误,系统提供以下几种测试功能:

* 程序转储。 在 CL 源程序中输入命令 DMPCLPGM,运行后通过 WRKSPLF 即可看到转储内容。包括程序信息队列的全部信息和全部变量的数值。如果程序运行出错,出现提示画面时,输入 D 也可进行程序转储。

* 设置断点。第一步,启动测试环境,使用命令 STRDBG PGM (PGMA);第二步,设置断点,使用命令 ADDBKP STMT 1500) PGMVAR( ‘&A’ ‘&B’); 第三步,运行程序,显示断点信息;第四步,结束测试环境,使用命令 ENDDBG。

* 设置跟踪。跟踪是记录程序中语句执行顺序的过程。系统并不自动显示跟踪信息,而须使用命令 DSPTRCDTA 请求显示跟踪信息,信息包括语句执行的顺序和 ADDTRC 命令中指定的变量值。

例如:

Auto RGZPFM

STRCLPGM: PGM PARM(&LIBRARY)

DCL VAR(&LIBRARY) TYPE(*CHAR) LEN(10)

DCL VAR(&PERCENT) TYPE(*DEC) LEN(4 3)

DCLF FILE(QTEMP/WORKFILE) RCDFMT(QWHFDMBR)

DSPFD FILE(&LIBRARY/*ALL) TYPE(*MBR) +

OUTPUT(*OUTFILE) OUTFILE(QTEMP/WORKFILE)

NEXT: RCVF RCDFMT(QWHFDMBR)

MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(ENDCLPGM))

IF COND(&MBFILA *EQ ‘*PHY’) THEN(DO)

CHGVAR VAR(&PERCENT) VALUE(&MBNDTR / &MBNRCD)

MONMSG MSGID(MCH1211) EXEC(GOTO CMDLBL(NEXT))

IF COND(&PERCENT *GT .15) THEN(DO)

SBMJOB CMD(RGZPFM FILE(&MBLIB/&MBFILE) MBR(&MBNAME))

ENDDO

ENDDO

GOTO CMDLBL(NEXT)

ENDCLPGM: DLTF FILE(QTEMP/WORKFILE)

ENDPGM

常用CL命令

(1) 表示这些命令仅能用在CL过程中

系统功能

命令

命令功能

修改过程控制

 

 

CALL (Call)

调用一个程序

CALLPRC (Call Procedure)

调用一个过程

RETURN (Return)

返回到引起程序或过程运行的下一条命令

CL过程界限

PGM (program) (1)

指出CL过程源码的开始

ENDPGM (End Program) (1)

指出CL过程源码的结束

CL过程逻辑

IF (If) (1)

根据逻辑表达式的值执行命令

ELSE (Else) (1)

对IF命令为假条件定义采取的行动

DO (Do) (1)

指出DO组的开始

ENDDO (End Do) (1)

指出DO组的结束

GOTO (Go To) (1)

转移到另外的命令

CL过程变量

CHGVAR (Change Variable) (1)

修改CL变量的值

DCL (Declare) (1)

说明一个变量

替换

CHGVAR (Change Variable) (1)

修改CL变量的值

CVTDAT (Convert Date) (1)

修改日期格式

数据区

CHGDTAARA (Change Data Area)

修改数据区

CRTDTAARA (Create Data Area)

生成一个数据区

DLTDTAARA (Delete Data Area)

删除一个数据区

DSPDTAARA (Display Data Area)

显示一个数据区

RTVDTAARA (Retrieve Data Area)

把数据区的内容复制到一个CL变量中

文件

ENDRCV (End Receive) (1)

 

取消由前面的RCVF,SNDF或SNDRCVF

命令对一个显示文件发出的输入请求.

DCLF (Declare File) (1)

说明一个显示文件或数据库文件

RCVF (Receive File) (1)

从显示文件和数据库文件中读记录

RTVMBRD (Retrieve Member Description) (1)

取得数据库文件成员的描述

 

SNDF (Send File) (1)

往显示文件中写记录

SNDRCVF (Send/Reveive File)(1)

往显示文件中写记录,在用户回答后读记录

WAIT (Wait) (1)

 

等待从显示文件发出的SNDF,RCVF或SNDRVF命令接收文件

信息

MONMSG (Monitor Message)(1)

监控送往程序队列的逃逸,状态和通知信息

RCVMSG (Receive Message)(1)

把信息从信息队列复制到一个CL变量中


RMVMSG (Remove Message)(1)

从信息队列取消信息

RTVMSG (Retrieve Message)(1)

 

把预先定义的信息从信息文件复制到CL变量中

SNDPGMMSG(Send Program Message)(1)

往信息队列发送程序信息

 

SNDRPY (Send Reply)(1)

给查询信息的发送者发送回答信息

SNDUSRMSG(Send User Message)(1)

 

给显示工作站或系统操作员发送消息或查询信息

混杂命令

CHKOBJ (Check Object)

检查目标是否存在及使用目标必须有的权限

PRTCMDUSG (Print Command Usage)

 

产生一个用在某组CL过程中的一组命令中的交叉引用表

RTVCFGSRC (Retrieve Configuration Source)

 

对生成的已存在的配置目标建立一个CL命令源码且把它放在源文件成员中

RTVCFGSTS(RetrieveConfiguration Status)(1)

 

从三个配置目标(线路,控制器和设备)中取得配置状态

RTVJOBA (Retrieve Job Attributes) (1)

 

取得一个或多个作业属性的值且把它们放到CL变量中

RTVSYSVAL (Retrieve System Value)(1)

取得系统值并且把它放到一个CL变量中

RTVUSRPRF (Retrieve User Profile)(1)

取得用户文件属性并把它放到CL变量中

程序生成命令

CRTCLMOD (Create CL Module)

生成一个CL模块

DLTMOD  (Delete Module)

删除一个模块

DLTPGM   (Delete Program)

删除一个程序

CRTBNDCL (Create Bound Control Language Program)

生成一个联编的CL程序

CRTPGM (Create Program)

生成一个程序

CRTSRVPGM(Create Service Program)

生成一个服务程序

AS/400上用CL将SPLF转化为AS/400的PF

就是通过CPYSPLF的命令,你可以提前create一个字段134位的PF文件然后通过以下的CL去copy

PGM PARM(STRJOB STRUSR STRNBR)

DCL VAR(STRJOB) TYPE(*CHAR) LEN(10)

DCL VAR(STRUSR) TYPE(*CHAR) LEN(10)

DCL VAR(STRNBR) TYPE(*CHAR) LEN(6)

CPYSPLF FILE(DCPRTMF) TOFILE(TEST/MFPC) +

JOB(STRNBR/STRUSR/STRJOB) TOMBR(MFPC) +

MBROPT(*REPLACE)

DLTSPLF FILE(DCPRTMF)

JOB(STRNBR/STRUSR/STRJOB)

ENDPGM

如何用CL知道session或者杀死文件

在命令行输入WRKCFGSTS *DEV 后按ENTER确认

在以下屏幕中检查 的状态是否是ACTIVE,如果不是ACTIVE用选项9,VARY ON参数将他们改成ACTIVE。

图片

如果是自己的User 死了WRKUSRJOB, 去看

图片

物理文件Lock 及lock在CL的查看

1.锁的五种类型

(1) Exclusive(*EXCL): 只有该锁的路径选择过程(routing step)才可能使用该对象;

在其他任务中的路径选择过程不能存取该对象。

(2) Exclusive-allow-read(*EXCLRD): 占用该锁的路径选择过程可能读或更新该对象,

而其他任务中的路径选择过程只能读它。

(3) Shared-for-update(*SHRUPD): 占用该锁的路径选择过程以及在其他任务中的路径

选择过程是可以读或更新该对象。

(4) Shared-no-update(*SHRNUP): 占用该锁的路径选择过程只可以读该对象;而在其他

任务中的路径选择过程也是只读该对象。

(5) Shared-for-read(*SHRRD): 占用该锁的路径选择过程只可以读该对象;而在其他

任务中的路径选择过程是可以读或更新该对象。

2. 缺省情况下,CL和HLL(高级语言程序)程序只在输入(I)物理文件成员的数据上放置*SHRRD锁,并在只输出(O)和输入-输出(U)物理文件成员的数据上放置*SHRUPD锁。

后面这一句不是很理解,为什么O/U类型的文件不放*EXCLRD锁呢?个人理解应是只允许当前程序更新, 别的程序只能读。需要高手指教!

3. 显示对象(object)和记录(record)的锁有三个命令:

(1) wrkobjlck: 查看由所有任务在一个对象上使用的lock。

(2) dsprcdlck(display record locks): 查看一个物理文件中已锁定的记录.

(3) dspjob: 查看一个任务的所有外部锁,包括已使用的那些锁和该任务正等待使用的那些锁。

Journal管理

如何为一个物理文件创建一个journal

Create one journal rceiver

图片

Create one journal

图片

Start one PF for the journal

图片

多个相关数据库操作的回滚ROLBK及COMIT操作

COMIT和ROLBK主要目的是为了数据的统一性, 一般用在要同时对几个数据库进行增,删,改, 确保几个数据库都能正确写入,删除,更新数据, 在程序(CL或RPG都可以, 其他语言不清楚)中, 只有执行了COMIT命令后,数据操作才真正被执行。 只要任何一个数据库的操作出错, 可以用ROLBK命令将之前的数据回档。这样的程序, 如果因为某种原因(如被其他用户强行终止, 短电…)而终止,系统会自动ROLLBACK。

对需要进行COMIT的文件的声明:

FFILENAMEIPEAF…L…I…DEVICE+…KEXIT++ENTRY+A…U

FFILENAMEUF   E      K   DISK       KCOMIT

数据库纪录的写入或者更新等都不变,有变动的就是根据实际的条件进行确认或者回滚。

CL0N01N02N03FACTOR1+++OPCDEFACTOR2+++RESULTLENDHHILOEQCOMMENTS++++

C                         ROLBK

CL0N01N02N03FACTOR1+++OPCDEFACTOR2+++RESULTLENDHHILOEQCOMMENTS++++

C                         COMIT

带有COMIT的RPG程序一般通过CL程序进行调用,在调用这个程序的时候有一些针对COMIT的操作,包括:

1、创建日志和日志收集器 CRTJRN 和CRTJRNRCV

2、把PF加入日志 STRJRNPF

3、用CL 执行STRCMTCTL和 ENDCMTCTL上面具体用法去查CL REFERENCE

这样任何对该文件的修改都会记日志,当碰到COMIT 命令时确认修改,碰到ROLBK放弃更新.关于后两步的部分代码如下:

STRJRNPF FILE(FILENAME1) JRN(JOURNAL)

STRJRNPF FILE(FILENAME2) JRN(JOURNAL)

STRCMTCTL  LCKLVL(*CHG)

CALL     PGM(PGMNAME) PARM(&PARM1 &PARM2)

ENDCMTCTL

ENDJRNPF FILE(FILENAME1) JRN(JOURNAL)

ENDJRNPF FILE(FILENAME2) JRN(JOURNAL)

计划批处理任务WRKJOBSCDE

在主画面的命令行上输入WRKJOBSCDE后按(ENTER或CTRL)

图片因为没有权限,在网上截个图,这里是在具体的一天的时间去做备份,也可以是By weekly或者每周三后者每周四,你可以自己选择,这个就是比如UAT的是我们需要在固定的时候跑批或者固定时间跑back up 的时候可以用到

图片

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Saidywin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值