AS400 自学笔记集锦 下载本文

AS400学习笔记 2006/04,Daniel,Easycon

7. 集成文件系统增强功能 -- UNIX类APIs

操作系统的一个重要任务就是提供应用程序接口在文件系统上来创建,删除,读写等方法来管理文件。与UNIX层级结构一样,集成文件系统中也增加了许多UNIX类的应用程序接口。

其中的一个例子就是通过UNIX类的应用程序接口来做数据转换。应用可以使用不同于文件存储时的代码页来读取该文件,一个读取的API可以从文件存储空间将其读出并转换成应用程序所希望看到的代码页,类似的,一个写入的API可以将应用程序提供的数据在存入系统之前将其改变成希望存储的代码页。这种数据转换的功能是iSeries服务器独特的。除了这些APIs,OS/400 NetServer也可以根据文件的扩展名来实现数据转换。

支持统一字符编码(Unicode)路径名的功能也是新增的。一个内部使用统一字符编码(Unicode)的应用程序可以调用使用统一字符编码(Unicode)路径名的UNIX类API。 此外,还新增了代码转换功能,原来,集成文件系统只能实现单字节到单字节,双字节到双字节的代码转换,现在,集成文件系统已经可以支持统一字符编码(Unicode)混合编码的应用程序之间的代码转换,这是一种为复杂的转换机制。 -- 图形化访问界面

现在,既可以通过OS/400上的控制语言(CL)命令(这种命令行语言是从S/38系统上延续到OS/400上的)来访问集成文件系统中的对象,也可以通过Client Access中的操作导航器来访问集成文件系统中的对象。 -- 线程安全性

集成文件系统中使用的API在访问文件系统中的对象时,都具备线程安全性。root,QOpenSys,QSYS.LIB,QOPT,QNTC和UDFS等文件系统都具备线程安全性。 -- 支持DataLink

DataLink使得存储在数据库文件中的数据类型大大地扩展了。数据库中DataLink字段是用来保存本地集成文件系统,远程集成文件系统,或者安装了IBM DataLink Manager的Windows/UNIX服务器文件系统上非数据库文件的参照关系的。DataLink在字段中并不真正存放数据对象本身,而是存放了对象文件的位置。DataLink指向的对象可以是任意的数据类型 -- 例如,文本文件,声音记录或是图象文件。

对DataLink的支持使得用户可以在ROOT文件系统中指定一个存放DataLink对象的目录。一旦一个目录被指定为DataLink目录,那么,对该目录下所有对象的访问都要通过DataLink文件管理器(DLFM)。一旦一个DataLink目录下的对象被标定为DataLink对象,那么,DLFM就会创建一个包含到该对象的路径的前缀表。所有企图对DataLink对象的访问,删除,重命名等动作都会被DLFM截取,并通过检查对象存储路径和前缀列表来防止对DataLink对象的删除和重命名。DataLink指定的路径保证了存储在集成文件系统中的关联文件的参照完整性。 总结

集成文件系统是iSeries服务器其他应用程序的基础,它增强了OS/400现有的数据管理能力,也增强了对新兴的应用环境的支持能力。在很多应用环境 -- 例如,Lotus Domino, Linux, Unix, 和 Windows,都将使用到集成文件系统提供的功能。

- 37 -

AS400学习笔记 2006/04,Daniel,Easycon

3.19 如何快速查看IFS文件系统中FOLDER和文件的

大小

除了用NetServer在网络邻居中可以查看IFS文件系统中FOLDER和文件的大小外,OS/400提供了另一种方法。

解答 IBM 提供了一种免费的方法来获得IFS文件系统中FOLDER和文件的大小,但必须安装下列单个PTF,

V5R1M0 V5R2

Single PTF SI05856

(包含在CUM PTF TL03007中) SI05155 (包含在CUM PTF TL02211中)

可以通过调用程序qsrsrv来查看FOLDER和文件的大小。举例说明: 1.查看所有IFS文件:

call qsrsrv parm(\2.查看某个特定的目录

call qsrsrv parm(\

1和2中,命令执行之后生成一个SPOOL FILE,文件名是:QSRSRV,可以用命令WRKSPLF查看。

如下图所示:其中“SIZE IN K BYTES”列是FOLDER和文件的大小。

-------Display Spooled File

File . . . . . : QSRSRV -------Page/Line 1/7 Control . . . . . -------------Columns 1 - 78 Find . . . . . .

*...+....1....+...2....+...3....+...4...+...5...+...6...+...7....+... QSRSRV 'METRICS' ' /QIBM LINK --DFRD --SIZE IN DIRECTORY COUNT -LINKS -K BYTES NAME

17 ----0 -------136 /QIBM/ProdData/LicenseDoc/GC52-0885-01 17 ----0 -------928 /QIBM/ProdData/LicenseDoc/Z125-3301-11 17 ----0 -------136 /QIBM/ProdData/LicenseDoc/GC52-0914-00 2 ---- 0 -------16 /QIBM/ProdData/OS400/Shell/MRI/com/ibm/util --------------------------------------------------------------More... F3=Exit --F12=Cancel --F19=Left --F20=Right --F24=More keys

3.20 如何显示查询的调试信息

当您定义了一个查询并运行时,如果该查询出现错误,如何得到详细的调试信息,本篇文章介绍具体的操作过程。

解答 1. 将系统查询属性文件复制到自己的库中:

- 38 -

AS400学习笔记 2006/04,Daniel,Easycon

CRTDUPOBJ OBJ(QAQQINI) FROMLIB(QSYS) OBJTYPE(*FILE) TOLIB(userlibrary) DATA(*YES)

注意:不能用命令CPYF来操作,否则会引起数据丢失。 2. 进入交互式SQL环境: STRSQL

3. 更改系统查询属性文件的副本,将调试信息置为*YES:

UPDATE userlibrary/QAQQINI SET QQPARM = 'MESSAGES_DEBUG', QQVAL = '*YES', QQTEXT = NULL WHERE QQPARM = 'MESSAGES_DEBUG' and QQVAL = '*DEFAULT'

4. 将查询属性文件改为用户库中修改过的文件: CHGQRYA QRYOPTLIB(USERLIBRARY)

5. 然后,在交互史下,运行您有问题的查询; WRKQRY, 回车。

Option . . . . . . 9 --------1=Create, 2=Change, 3=Copy, 4=Delete -----------------------------5=Display, 6=Print definition -----------------------------8=Run in batch, 9=Run Query . . . . . . . TESTQRY -Name, F4 for list Library . . . . . USERLIB ---Name, *LIBL, F4 for list

6. 将详细的作业记录输出到假脱机文件中: DSPJOBLOG OUTPUT(*PRINT)

7. 详细的查询调试信息就记录在假脱机文件中,这些信息对您修改该查询有很大帮助。

3.21 如何修改QSYS/QADBXREF的CCSID

有些用户想修改物理文件QSYS/QADBXREF的CCSID,使用CHGPF命令修改时系统提示目标被锁定,使用WRKOBJLCK OBJ(QADBXREF) OBJTYPE(*FILE)得知目标是被作业QDBSRVXR锁定的,而此作业是系统底层作业,用户不能使用命令结束此作业,故在系统正常运行的情况下是不能对此文件进行修改,用户如必须在不影响系统的前提下修改此文件需要手动IPL,在IPL过程中的IPL OPTION屏中修改DEFINE OR CHANGE SYSTEM AT IPL项为Y,按执行键后下一屏中选择5(GENERAL OBJECT COMMANDS),在相继屏中选4(CHANGE PHSICAL FILE),其它操作请按屏幕提示执行。类似的方法可以修改其它系统目标的属性。

3.22 如何在AS400上发送带有颜色的MESSAGE

用户经常发送MESSAGE,MESSAGE的颜色往往是绿色的,其实是可以发送彩色的MESSAGE的。

1.创建SNDCOLMSG CLP程序。

SNDCOLMSG: PGM PARM(&MSG &COLOR &MSGTYPE) DCL VAR(&MSG) TYPE(*CHAR) LEN(80) DCL VAR(&COLOR) TYPE(*CHAR) LEN(1) DCL VAR(&MSGTYPE) TYPE(*CHAR) LEN(10)

DCL VAR(&LASTBYTE) TYPE(*CHAR) LEN(1) VALUE(X'20') DCL VAR(&TEXT) TYPE(*CHAR) LEN(82)

CHGVAR VAR(&TEXT) VALUE(&COLOR *CAT &MSG *TCAT

- 39 -

AS400学习笔记 2006/04,Daniel,Easycon &LASTBYTE)

SNDPGMMSG MSG(&TEXT) TOPGMQ(*EXT) MSGTYPE(&MSGTYPE) SNDPGMMSG MSG(&TEXT) MSGTYPE(&MSG)

END: ENDPGM

2.创建命令SNCCOLMSG

CRTCMD CMD(SNDCOLMSG) PGM(SNDCOLMSGC)

SNDCOLMSG: CMD PROMPT('Send colored message')

PARM KWD(MSG) TYPE(*CHAR) LEN(80) PROMPT('Message')

PARM KWD(COLOR) TYPE(*CHAR) LEN(1) RSTD(*YES) DFT(*GREEN) SPCVAL( (*GREEN X'20')

(*GREEN_REVERSE X'21') (*WHITE X'22')

(*WHITE_REVERSE X'23') (*GREEN_UNDERSCORE X'24') (*GREEN_UNDERSCORE_REVERSE X'25') (*WHITE_UNDERSCORE X'26') (*RED X'28')

(*RED_REVERSE X'29') (*RED_BLINK X'2A')

(*RED_REVERSE_BLINK X'2B') (*RED_UNDERSCORE X'2C') (*RED_UNDERSCORE_REVERSE X'2D') (*RED_UNDERSCORE_BLINK X'2E') (*TURQUOISE X'30')

(*TURQUOISE_REVERSE X'31') (*YELLOW X'32')

(*YELLOW_REVERSE X'33') (*TURQUOISE_UNDERSCORE X'34')

(*TURQUOISE_UNDERSCORE_REVERSE X'35') (*YELLOW_UNDERSCORE X'36') (*PINK X'38')

(*PINK_REVERSE X'39') (*BLUE X'3A')

(*BLUE_REVERSE X'3B') (*PINK_UNDERSCORE X'3C') (*PINK_UNDERSCORE_REVERSE X'3D') (*BLUE_UNDERSCORE X'3E') ) PROMPT('Color')

- 40 -