• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

RGZPFM的问题

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 24次 | 进入软件测试论坛讨论

领测软件测试网
AS/400提供了RGZPFM来释放一个physical file的member中已被删除的记录所占有的硬盘空间,但是,
它只能一个一个文件的的释放,我的这个library中有上千个physical file需要释放空间, 
那我怎么做,总不能手工执行RGZPFM命令上千次吧

其实和STRJRNPF是一样的??如果有1000个表就要STRJRNPF1000次??

 michael9406 回复于:2003-10-22 17:36:47
以前这里有一个工具的,你找一下,可以用的。

 zzzddd 回复于:2003-10-22 17:47:42
做一个opTION吧!然后以LIBRARY为单位一下子做。

 michael9406 回复于:2003-10-22 19:27:05
Auto RGZPFM 

But here is an CL program to RGZPFM files that > 15% deleted records. We auto-scheduled it to run on the weekends over selected libraries. It worked well, but we never had files with millions of records either. Terry  

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

 xuguopeng 回复于:2003-10-22 21:02:47
上面的程序我看懂了,就是把文件的描述信息写到一个文件里,然后根据文件的描述提取文件属性,如果被删除的记录数占总记录数的15%以上,就执行RZGPFM。
这个程式好象不全啊??
1.几个变量没有声明
2.并没有写到如何从文件中提取属性,我现在就是没搞明白如何才能在包含文
  描述信息的文件中提取某些信息给变量呢???
3.里面WORKFILE这个文件的格式是QWHFDMBR,这是什么格式啊??
  为什么会提示我NOT FOUND这个文件呢??

 michael9406 回复于:2003-10-22 21:47:50
please generate    QTEMP/WORKFILE)   first.

 xuguopeng 回复于:2003-10-22 22:16:33
对了 我就是没搞明白如何创建QWHFDMBR这种格式的文件,PF不行,所有CRT类的命令我都看了没发现有创建这种格式的文件啊??

 michael9406 回复于:2003-10-22 22:44:31
DSPFD FILE(USER) TYPE(*MBR) OUTPUT(*OUTFILE) OUTFILE(QTEMP/WORKFILE)
Output file WORKFILE created in library QTEMP.                      
Member WORKFILE added to output file WORKFILE in library QTEMP.     
1 records added to member WORKFILE in file WORKFILE in QTEMP.

 stephenxie2003 回复于:2003-10-23 10:05:05
请问xuguopeng :
你试验成功了吗?
那几个变量如何定义(声明)啊?
 

 xuguopeng 回复于:2003-10-23 10:38:51
没搞明白 声明变量到是不难 就是如何把对应的值取到变量里难到我了

 zzzddd 回复于:2003-10-23 14:16:54
这个程序也只能删一个LIbrary下的阿!
没有RPG或cobol的配合,好像只能删一个library。

 xuguopeng 回复于:2003-10-23 14:29:25
可惜我一个也没搞明白~ 哎 笨死了

 stephenxie2003 回复于:2003-10-23 16:47:40
我怎么连编译都报错啊?
请问:哪几个变量需要定义?
请成功的朋友帮忙写出来好吗?
谢谢! 

 xuguopeng 回复于:2003-10-23 16:58:29
还是根据人家的大体意思自己想办法吧 现在难就难在怎么从OUTFILE里提取需要的值赋给变量呢??

 stephenxie2003 回复于:2003-10-24 09:11:33
是啊是啊!
请michael9406大哥帮帮忙!
写得再详细一点好吗?
谢谢! 

 kimdai 回复于:2003-10-25 12:46:57
怎么上传 附件啊?这章.gif就是那个savf了






 xuguopeng 回复于:2003-10-26 10:14:04
可以发给我看看么
roc-no1@163.com
谢谢

 stephenxie2003 回复于:2003-10-28 14:51:49
请这位kimdai也发一份给我好吗?

mail to:stephenxie@hotmail.com

谢谢!

 子樵 回复于:2003-10-28 16:41:21
光想着看程序不想着原理!
400的DSP命令都有一个输出到*OUTFILT选项.可以把一些信息存入到系统定义好结构的文件中,这些PF原型在QSYS下,看名字可以分析出来如QADSPOBJ. 输出的文件可以指定,在执行语句是会自动创建这些PF.
DSPFFD,DSPFD比较常用.生成的文件中会有对应的信息,比如LIB下的OBJ的名字,SOURCE PF中的MEM NAME 等等.用SQLN可以自己分析PF的内容.
熟练使用这个功能,结合CLP就可以很容易实现讨论的这类需求了.比如BACKUP,CPYF,DELETE OBJ 等等.
强烈建议自己写这样的工具,知道方法就好了

 xuguopeng 回复于:2003-10-28 17:20:46
老大说的是,我已经用DSPFD产生了这个文件,我用DSPPFM看里面的内容,根本就和程序里的字段对应不上啊~

 michael9406 回复于:2003-10-28 21:39:16
可能是版本的问题。

 xuguopeng 回复于:2003-10-28 21:56:32
晕~~~ 我再研究研究去

 stephenxie2003 回复于:2003-11-05 14:59:52
这个问题不知道哪位高手解决了吗?
请帮忙指点一下!
 

 stephenxie2003 回复于:2003-11-05 16:06:21
[quote:0a31fc5315="stephenxie2003"]是啊是啊!
请michael9406大哥帮帮忙!
写得再详细一点好吗?
谢谢! [/quote:0a31fc5315]

再次请michael9406大哥帮帮忙!

 xuguopeng 回复于:2003-11-05 20:35:50
代码没有问题的,只要先生成WORKFILE就好

 stephenxie2003 回复于:2003-11-06 13:03:34
我已经生成了Workfile,用wrkobj *all/workfile能够找到
接着还是不能编译?
请教!

 xuguopeng 回复于:2003-11-06 13:29:55
贴出错误消息吧

 vampirec 回复于:2003-11-06 14:13:03
我来解释一下程序

/* 程序入口 */
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将LIB下所有的MEMBER属性写入QTEMP/WORKFILE */
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)) 

/*  如果空间比>15%,提交JOB来RGZPFM  */
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

备注:运行程序前,现通过DSPFD来创建QTEMP/WORKFILE,&MBNDTR和&MBNRCD应该都是WORKFILE中的字段名

 vampirec 回复于:2003-11-06 14:24:40
我测试了一下程序,发现无法申明QTEMP下的WORKFILE。更改LIB后编译通过!(当然事先要在其它LIB中生成好WORKFILE)

 stephenxie2003 回复于:2003-11-06 14:36:55
* CPD0852 30  File WORKFILE in library QTEMP not found.

 xuguopeng 回复于:2003-11-06 14:38:53
我也是,我还以为是权限不够呢,在自己的LIB下就没问题,无法申明QTEMP下的WORKFILE,这到底是为什么呢??权限问题??

 stephenxie2003 回复于:2003-11-06 14:55:34
那么这个&LIBRARY事先需要赋值吗?

 vampirec 回复于:2003-11-06 15:06:28
[quote:21cf42d3d1="stephenxie2003"]那么这个&LIBRARY事先需要赋值吗?[/quote:21cf42d3d1]

这个&LIB是入口参数,CALL起程序时赋值给它即可,如:
想要返回RGZ LIB1,可用CALL PGM(XXX) PARM(LIB1)即可

 stephenxie2003 回复于:2003-11-06 15:29:31
我已经成功编译了,但是还有比较小的错误信息:
* CPI0845 10  Character CL variable declared for DBCS field &MBTXT. 
* CPI0306 10  Character CL variable declared for numeric field &MBOPOP. 
Maximum error severity 10.

谢谢各位大侠!

 xuguopeng 回复于:2003-11-06 15:33:22
10以下的错误可以忽略的吧

这些变量不用DCL的

 stephenxie2003 回复于:2003-11-06 17:58:10
那么为什么QTEMP下就会不成功呢?
不像是权限的问题,因为我这个用户已经是*SECOFR

 zzzddd 回复于:2003-11-06 21:18:44
*SECOFR的话,如果没有special authority的话,好像也不起作用!

 xuguopeng 回复于:2003-11-06 23:59:47
谁有QSECOFR啊?? 试一下嘛,我想知道为什么?

 stephenxie2003 回复于:2003-11-07 12:44:05
我已经用QSECOFR这个用户试过了,还是不行!
编译时报错:找不到WORKFILE这个文件。
但怪了,为什么我用WRKOBJ *ALL/QTEMP却找不到这个LIB?

 xuguopeng 回复于:2003-11-07 12:52:11
我晕~ 不是吧 你的LIBL里有QTEMP么?用WRKLIB LIB(QTEMP)看看

 stephenxie2003 回复于:2003-11-07 14:02:59
晕什么啊!
用你的方法也是找不到QTEMP这个LIB的!
但是可以用同样的方法找到QSYS这个LIB!

 xuguopeng 回复于:2003-11-07 15:51:00
看看你的LIBL里有没有QTEMP?怀疑你是不是管理员?用QSECOFR登陆我就不信看不到QTEMP?

 stephenxie2003 回复于:2003-11-07 17:17:28
我当然是系统管理员!
我当然也能看到QTEMP!
但是就是不能用上面的方法找到这个LIB!

 xuguopeng 回复于:2003-11-07 17:36:16
???那你是怎么看到QTEMP的??
你是说在CL程序里看不到还是命令行下看不到?

 xuguopeng 回复于:2003-11-07 17:54:35
我做了测试,在QTEMP下是无法打开物理文件的,我把这个CLP拷贝到QTEMP下编译都是不通过的,提示无法打开源物理文件。不知道为什么?

 vampirec 回复于:2003-11-10 16:34:36
子礁的回答也许有点道理:
对QTEMP的理解是有问题的. 
QTEMP是所谓的系统提供临时工作目录,每一个作业(是否只是BATCH和INTERACTIVE有效??)都会有一个独占的QTEMP,不同作业不会共用QTEMP目录.也就是说不可以通过在QTEMP中存放OBJ的方式实现两个不同的作业的OBJ共享.一但作业结束,分配给该作业的QTEMP被系统收回,该LIB下的OBJ会丢失.

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网