AS400学习笔记 2006/04,Daniel,Easycon
memset( lrs_msg, 0, sizeof(lrs_msg) );
memset( lrs_devname, 0, sizeof(lrs_devname) ); strcpy( lrs_devname, \ strcpy( lrs_msg, \
lrl_ret=TapInit( lrs_devname, lrs_msg );
printf(\return 0; }
2.7 AS400上C开发编译简介
1) 编辑C源代码文件,可以在400上直接编辑,也可以在其他机器(win/unix)上编
辑完成后,ftp到400主机上,注意ftp的时候记得使用quote type c 1386命令 2) 将编辑完成的C源代码进行编译,可以使用14=Compile 15=Create module命令进行编译,若为单个的原代码编译,可以直接使用14进行编译(Create Bound C Program (CRTBNDC)),编译可以直接生成可以执行的PGM;若该源码为一个系统中的一个模块需要编译,则使用15进行编译(Create C Module (CRTCMOD)),编译完成后,可以产生该源码对应的Moudle;编译过程中,可以在输入14或15后,按F4,选择参数信息;编译过程中若出现错误,则可以使用dspjoblog命令查看,或者使用sp查看产生的SPOOL FILE
3) 编译完成后,若为多个源码编译成一个执行码的情况,需要使用CRTPGM命令编
译出PGM执行码,在CRTPGM输入后,可以按F4,选择编译参数;多个源码编译产生的PGM,其中部分源码发生变化,需要重新编译时,先编译产生新的MODULE,更新已有的PGM执行码编译时,可以使用UPDPGM编译,参数中只输入需要更新的MODULE即可 4) 编译完成后,可以使用CALL PGM(PGMNAME)来调用执行,也可以使用SBMJOB
提交批处理方式执行命令
2.8 如何查看已备份磁带的内容
Display Tape (DSPTAP) ??
Data type . . . . . . . . . . . >; *SAVRST *LABELS, *SAVRST ??
LABELS 和 SAVRST 选项有什么不同
SAVRST 能够列出你磁带里的目录,内容 LABELS只是你的磁带一个属性表
直接用dsptap指令,然後輸入對應的參數,就能顯示了。
其中Sequence number . . . . . . . . SEQNBR 是存在磁帶中不同object的順序。他是從1開始計算的。如果你有多個object存在tap中,那麽你可以修改該參數,以達到顯示不同存儲順序的内容了。
- 16 -
AS400学习笔记 2006/04,Daniel,Easycon
2.9 恢复/查看备份的内容
使用命令RSTLIB(对应备份命令SAVLIB),EX:
RSTLIB SAVLIB(EASYMIS) DEV(TAP01) RSTLIB(BAKMIS)
此命令将备份的库EASYMIS从磁带TAP01上恢复到BAKMIS库中 RSTLIB SAVLIB(EASYCORE) DEV(TAP01) RSTLIB(BAKCORE) OUTPUT(*OUTFILE) OUTFILE(EASYMAP/RSTLOG) OUTMBR(RSTCORE)
此命令将备份的库EASYMIS从磁带TAP01上恢复到BAKMIS库中,同时记录恢复文件EASYMAP/BAKLOG.RSTCORE
恢复的时候,可以指定恢复哪个备份的库,恢复到哪个库里面(注意:不一定要恢复到原备份的库中,可以恢复到其他名字的库中)
关于备份后的查看备份的命令:查看磁带命令DSPTAP,或者DSPSAVF等 在磁带的备份中,若同时一个SAVLIB保存多个库的情况,比如使用如下命令保存数据: SAVLIB LIB(EASYCORE EASYPUB EASYMIS) DEV(TAP01) ENDOPT(*REWIND) SAVACT(*SYNCLIB) SAVACTWAIT(600) ACCPTH(*YES) OMITOBJ((*ALL *JRN) (*ALL *JRNRCV)) OUTPUT(*OUTFILE) OUTFILE(EASYMAP/BAKLOG)
上面的命令同时备份了3个库在TAP01设备上,在需要显示磁带内容的时候,若是使用命令:
DSPTAP DEV(TAP01) DATA(*SAVRST)
此时,只是显示了第一个库的备份情况,无法显示多个库的备份情况;若希望显示另外的库备份情况,可以使用DSPTAP的SEQNBR参数,选择查看第几个备份的库信息,例如:
DSPTAP DEV(TAP01) SEQNBR(2) DATA(*SAVRST)
此命令将显示磁带上第2个库的备份情况,其他库文件的查看显示依此类推
2.10 查看LIBRARY占用的磁盘空间
方法一:
有时用户需要查看某个Library占用多少AS/400的硬盘空间,有没有简单的办法呢? 其实很简单,可以用一个命令实现:
DSPLIB LIB(TESTLIB) OUTPUT(*PRINT) 这个命令执行后会生成一个假脱机文件QPDSPLIB,这个文件包括这个Library中各个Object的size和这个Library中所有Object所占用的硬盘空间 方法二:
sbmjob cmd(rtvdskinf) prtdskinf rpttype(*lib)
这样你可看到整个系统lib大小 注意:使用RTVDSKINF这条命令是有要求的,首先有权限要求。其次需要用WRKDIRE
- 17 -
AS400学习笔记 2006/04,Daniel,Easycon
命令将你的用户加入到Directory Entries 中去。然后SUBMIT到后台去
2.11 一个不错的400软件下载地址
http://home.columbus.rr.com/jbmmdietz/iseries.html 一个老外写得Freeware.
很多工具很好用。比如我想要的察看QZDASOINIT 对应的IP. 还有这个地址也很不错
http://www.help400.de/Freeware.htm
2.12 日志激活状态下删除400库的方法
通过strsql创建的LIB,当进行drop database操作的时候,特殊情况下可能会由于日志文件仍处于激活状态导致整个LIB无法删除,报错如下:
或者通过WRKOBJPDM进入LIB,删除对应的日志接收器时,报错:
遇到以上错误时,可通过如下解决办法处理: QSYS/WRKJRNA JRN(EASYCORE/QSQJRN)
使用F19命令即可查看哪些目标正在使用该日志文件,将正在使用该日志文件的目标文件一个个的使用ENDJRNPF命令停止日志记录即可。
- 18 -
AS400学习笔记 2006/04,Daniel,Easycon
停止后,可以正常的删除对应的库文件了。
2.13 通用日志管理
AS/400系统上有日志(JRN)和日志接收器(JRNRCV)目标对象,用来存放对数据库文件进行增删改等操作的日志记录。日志接收器是存放日志记录的具体地方,它可以是由一个无限增大的文件组成,也可以是由多个固定大小的文件组成。多个日志接收器文件形成日志接收器链,当当前ATTACHED的有限大小的日志接收器满了以后,系统会自动产生或由用户产生一个新的同样属性的接收器文件。
用CHGJRN命令可以改变产生新的日志方式,当Manage receivers( MNGRCV)选项选择*SYSTEM时,系统会自动产生新的日志接收器,当Manage receivers( MNGRCV)选项选择*USER时,则当日志接收器满了以后,需要由用户产生新的日志接收器。当Manage receivers( MNGRCV)选项选择*SYSTEM时,可以在Delete receivers(DLTRCV)选项里选择*YES来让系统自动删除已经被DETACH的日志接收器文件。
但如果我们希望定制保留固定个数的日志记录,或者保存若干天的日志记录,或者其他一些原因不能让系统自动删除日志接收器,那么我们就必须手工删除日志接收器,如果系统业务比较频繁,产生日志接收器量比较大,可能会很快使系统硬盘空间涨满,那么我们手工维护日志接收器的工作量很大。在一般的双机热备系统中比如MIMIX、OMS等都提供了日志管理功能,本文提供一个与这些软件日志管理功能类似的独立的一个通用日志管理工具,可以使你不需要依靠其他软件就可以独立地由程序来完成日志管理工作。
保留日志接收器,通常有两种方式,一种是按时间即天来保留,一种是按日志记录个数来保留。本文的例子是按日志记录个数来保留日志接收器的。但按照该例的方法也可以很容易实现按天来保留日志接收器。
修改命令:
CHGJRN JRN(EASYCORE/QSQJRN) DLTRCV(*YES)
2.14
- 19 -
AS400学习笔记 2006/04,Daniel,Easycon
3 相关资料收集
3.1 一些概念
基本术语解释
对象
对象是系统上可以操作的已命名的空间。对象的最常见的示例是文件和程序。其它类型的对象包括命令、队列、库和文件夹。系统上的对象由对象名称、对象类型和对象驻留在其中的库标识。系统上的每个对象都可受保护。 库
库是用于将其它对象分组的一种特殊类型的对象。系统上的许多对象驻留在库中。 目录
目录是将系统上的对象分组的另一种方法。对象可以驻留在目录中。一个目录可以驻留在另一目录中,从而形成一种分层结构。 组概要文件
组概要文件定义一组用户。将组概要文件看作是部门策略。可以将组概要文件用作创建单个用户概要文件的模式。还可以使用组概要文件来定义允许组的成员如何访问系统上的对象。有关组概要文件的更多信息,参见主题“计划用户组”。 用户概要文件
用户概要文件是系统上功能最强大的通用对象。它包含诸如用户密码以及用户注册后看到哪个菜单。用户概要文件定义用户在系统上可以执行和不能执行的操作。它确定用户的唯一系统视图。主题“计划用户安全性”讨论用于计划用户概要文件的技巧。 作业描述
作业描述使用系统值和用户概要文件来确定系统处理用户作业的方式。作业描述设置用户的初始库列表,该库列表确定用户在注册之后自动获取其访问权的库。 历史日志( history log):
a. 记录作业的开始,结束;设备活动状态;QSYSOPR Message中所有的消息;
PTF活动状态
b.history log 记录在队列QHST中
c.QHST的存储大小由系统值QHSTLOGSIZE定义 作业日志(Job log)
a.job结束的时候,job log写到 QPJOBLOG中,然后job log被删除;当交互式作
业正常结束时,通常job log不会被发送到joblog,非正常结束时才提交。
b.如何控制写入job log中的内容: 通过CHGJOBD来修改JOBD中的参数-
LOG。LOG参数有三个可选参数message level, message severity, message text
c.如何查看job log
* 如果作业已经结束,job log还没打印,使用WRKUSRJOB选项8(display
spooled file) 找到脱机文件名为 QPJOBLOG,选择5查看
* 如果job 没有结束或者正在队列中,使用WRKUSRJOB或者WRKACTJOB
查看
* 显示交互作业的job log: DSPJOBLOG
- 20 -