Chinaunix首页 | 论坛 | 博客
  • 博客访问: 72008
  • 博文数量: 15
  • 博客积分: 575
  • 博客等级: 中士
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-25 14:49
文章分类

全部博文(15)

文章存档

2011年(1)

2006年(14)

我的朋友

分类:

2006-05-29 14:45:54

`第四章  目标和库

 

目标是命令操作的基本工作单元,例如,程序和文件都是目标,通过目标可以查找、管理和处理系统中的数据。仅要知道所用目标和功能即可,不必清楚它所在的存储地址。

注:目标可放在库中和目录中。(以前说目标只能放在库中)这样的内容是有关放在库中目标的信息,目录的有
关内容请看集成文件系统介绍一书。

 

4.1  目标类型和一般属性

       每类目标在系统中都有唯一的用途以及处理这类目标的一系列命令。每类命令都有一些一般属性用来说明目标,这些一般属性在4.7表中列出。DSPOBJD的联机帮助信息也显示这些属性的说明。

 

4.2  目标完成的功能

目标可以完成多种功能,某些功能是系统自动完成的有些是通过命令完成的。

 

4.2.1   系统自动完成的功能

       自动完成的功能保证用一致的、安全的和恰当的方法处理目标。

这些功能是:

       目标类型验证:系统检查目标类型和在目标上做的功能类型以便验证在些目标上

    是否能做此种处理。例如,在CALL命令中规定的不是程序类型,则不能完成调

    用功能。

目标权限验证:系统检查目标、功能及用户以便验证用户是否用此目标

    完成功能。例如,USERA没有权力使用OBJB,所以他不能请求使用此目标完成           

    任何操作。

损坏目标的检查和通知:系统监控在处理目标时产生的错误并通知你由于不认识

目标产生的结果导致的失败。它是通过标准的信息来指出目标已损坏。

    这种情况发生的比较少,系统能整体性的监视和通知这类故障。

 

4.2.2  用命令完成的功能

       有二类功能是要通过命令来请求的:

              为每类目标规定功能,例如,生成、修改和显示

              下表给出的一般功能

 

              41目标的一般功能

 

              功能                                          标题

        检索库中的一个或多个目标                      4.3.4

        规定库中目标的权限                            4.4.6

              说明目标                                      4.6

              显示目标说明                                  4.7

              取得目标说明                                  4.8

              删除系统中无用的目标                          4.10

              在库间移动目标                                4.11

              生成重复目标                                  4.12

              目标改名                                      4.13

              删除目标                                      4.15

              分配和再分配目标                              4.16

              显示目标锁状态                                4.16.1

              检验目标是否存在                              5.1.2

 

4.3 

       AS/400系统中,目标组成一个叫做库的特别目标,目标是用库来查找的。要访问库中的目标,必须对库和目标有权限,详细内容请看4.44.4.3

       如果在同一参数中规定库名做为目标名,这种目标名叫限定名,此时,目标名要这样写:

DISTLIB/ORD040C             程序ORD040C是在DISTLIB中。

       如果对命令使用提示,而提示的是限定名,那么要给出库名和目标名。在大多数命令中,可以规定一个库名、*CURLIB(作业的当前库)或使用库列表。

 

4.3.1  库列表

       对命令可规定限定名,不能省略库名,如果省略了,发生下列情况:

       对生成命令,生成的目标会根据目标类型放在用户的当前库,*CURLIB中或放在系统库中。例如,程序会放在当前库中,授权表会放在QSYS库中。

       对不是生成命令的其它命令,系统会用列表来查找目标。AS/400系统库列表由四部分组成:

系统部分:它包括系统需要的库的列表。

产品库:它包括两个产品库。系统产品库支持与库(不是QSYS)有关的语言及实用

程序来处理它们的命令。

用户命令和菜单也能在CRTCMDCRTMNU命令的PRDLIB参数中规定产品库来保证找到有关的目标。

产品库是由系统管理的。在需要时,会自动把产品库(例如QRPG)放在库列表的保留产品库位置上。产品库可以是当前库的复本或者是库列表中用户部分的一个库。

当前库:当前库可以是但不一定非得是库列表中某一库的复本。在大多数命令时可以

*CURLIB做为一个库名而不管作业是否规定了当前库。如果库列表中没有当前库而规定了*CURLIB,就用QGPL库,可用CHGCURLIBCHGLIBL命令来修改作业的当前库。

用户部分:它包括系统用户和应用程序使用的库。库列表中的用户库,产品库和当前

  库对每个作业可以有不同,但最多25个库。

       下图给出列表的结构:

 

QSYS

QSYS2

QUSRSYS

QHLPSYS

系统部分

QPDA

产品库1

QRPG

产品库2

OELIB

当前库

OELIB

QGPL  

用户部分

QTEMP

 

 

       注:在使用SEU时,系统把QPDA放在产品库1中。当用SEU做语法检查时,第二

个库加到产品库2中,例如,要检查RPG源码的语法,则QPDA是产品库1QRPG

是产品库2。对大多数其它系统功能,不用产品库2

       用库列表很容易查找系统中的目标,每个作业都有与之有关的库列表。在用库列表找目标时,按库在库列表中的顺序查找,直到找到一个名字与类型都相符的目标为止。如果在库列表中有多个同名同类型的目标存在,那么在库列表中找到的目标第一次出现的库即为要查找的目标所在库。

       下表给出使用库列表(*LIBL)和规定库名时查找库的情况:

 

 

 

       FILE(ORDHDRP)          QSYS              FILE(DISTLIB/ORDHDRP)

为查找文件ORDHDRP,系统检索库DISTLIB,库DISTLIB不在此作业的库列表中。                                    

 

    

    

       库列表                                       

QSYS

QGPL

QGPL

 

    

    

QTEMP

DISTLIB

DSTTESTLB

     

     

 

    

    

                         QTEMP

 

 


    系统按库列表中的顺序

ORDHDRP

    

    

 

检索库,直到找到第一     DISTLIB

次的出现ORDHDRP     

 

 

                                                  DSTTESTLB

 

ORDHDRP

    

    

 

                            

                            

 

 

 

 


       下图给出在库列表中的同名但不同类型的二个目标。系统用下列命令检索:

 

        DSPOBJD   OBJ(*LIBL/CUSTINQ)   OBJTYPE(*FILE)

 

 

 

   .

   .

   .

                                   QSYS

              库列表                                    

QSYS

QGPL

QGPL

 

   .

   .

   .

QTEMP

DISTLIB

QTEMP

DSTTESTLB

   .

   .

   .

 

   .

   .

   .

 

                                   

                                    

 

       

                                   

                                        DISTLIB

CUSTINQ

(*PGM)          

   .

   .

   .

       

        

        系统按库列表中的顺序

        查找,直到找到同名同                              

        类型。在DISTLIB中的           

        CUSTINQ 类型不是                               

        *FILE,故越过它。               DSTTESTLB

CUSTINQ

(*FILE)

   .

   .

   .

 

                                                         

       

 

      

 

 

 

一般说来,使用库列表比使用限定名更灵活、容易,它的优点不仅在于不用输入库名,更表现在如应用程序使用不同数据,可使用不同库列表而不用修改应用程序本身。例如,CL程序PGMA修改数据区CHKNBR。如果没规定库名,那么根据使用的库列表不同而修改不同的数据区。如下图,JOBAJOBB都调用PGMA

      

 

 

 

 

 

 

 

 

        JOBA                                       JOBB

      

   .

   .

   .

 

 DTAARA(CHKNBR)

 

 

 

 

 DTAARA(CHKNBR)

 

 

 

PGMA                          QSYS               PGMA

                                                 

                                      

      

                                       

                                        QGPL

 

   .

   .

   .

 

       

        

     

 

DISTLIB1

QTEMP

       

   .

   .

   .

 

 

 

 

 

 


   .

   .

   .

CHKNBR

   .

   .

   .

      库列表                                                 库列表

QSYS

QGPL

QTEMP

DISTLIB2

QSYS

QGPL

QTEMP

DISTLIB1

 

DISTLIB2

   .

   .

   .

CHKNBR

   .

   .

   .

 

 

 

 

 

 

 

 

 

 

 

 


       在下列情况下,使用限定名要更好些:

              作业使用的目标不在库列表中

              在库列表中有多个同名目标,但你只用其中一个库中的目标

              由某些原因只使用一个库中的目标

       如果用限定名调用程序,但程序打开的文件不是用限定名,这时文件如不在库列表中,则文件打不开。如下图:

 

 

 

            JOBA                             库列表

        CALL DISTLIB2/PGMA              QSYS

      

   .

   .

   .

 

 DTAARA(CHKNBR)

 

 

 

 

 


                                       

                                        

                                        QGPL

      

   .

   .

   .

 

 


                                                                   

QTEMP

QSYS

       

   .

   .

   .

QGPL

QTEMP

DISTLIB1

 

DISTLIB2

DISTLIB1

        

   .

   .

   .

PGMA

ORDENTP

   .

   .

   .

 

 

 

 

 

 

 

 

 

 

 

 


       PGMA的调用是成功的。因为在CALL中的程序名用限定名,但在程序要打开文件ORDENTP时,由于用的不是限定名,而文件又不在库列表中的某一库里,故打开操作失败。如果把DISTLIB2加到库列表中或文件用限定名,则能打开文件,某些高级语言不允许用限定名,可用OVRxxx命令来规定限定名。

 

4.3.1.1  作业的库列表

       每个作业的库列表由四部分组成:系统部分,用户部分,当前库,产品库。系统部分总是在库列表中。

       初始的系统值QSYSLIBL中的库组成库列表的系统部分。它的初值为QSYSQSYS2QHLPSYSQULRSYS。系统值QUSRCIBL中的库组成库列表中的用户部分。

       QSYSLIBL中可以有15个库,QUSRLIBL可有25个库。要修改作业库列表的系统部分,使用CHGSYSLIBL命令。要修改QSYSLIBLQUSRLIBL的值,用CHGSYSVAL命令。在系统值修改后会影响新的作业。

 

4.3.1.2  修改库列表

       对正在运行的作业,可用ADDLIBLERMVLIBLE命令来往库列表中加库或从库列表移出一个库,也可用CHGLIBLEDTLIBL命令来修改库列表。这些命令只能改库列表中的用户部分,不会改系统部分。可用CHGURLIBCHGLIBL命令修改当前库,当前库也可在用户配置文件中,在注册用户时,或用SBMJOB命令来修改。产品库不能用CL命令来增加,这些库是使用它们时用命令或菜单加上去的。它们也不能用CL 命令修改,但能用修改库列表APIQLICHGLL)来修改。

       在使用这些命令时,它仅影响使用命令的作业,这些修改仅在作业运行期间有效。在用这些命令修改库列表时,库必须已经存在。活动的用户库列表中的库不能被删除。

       在作业启动时,库列表中的用户部分由作业描述中的值或在SMBJOB命令中规定的值来确定,可以规定*SYSVAL,它使QUSRLIBL的值成为作业库列表中的用户部分。如果在作业描述、BCHJOBSBMJOB都规定了库名,那么用BCHJOBSBMJOB中规定的值。下面是一些规则:

       可在作业描述中规定库列表。当作业运行时,可替代QUSRCIBL中规定的库列表。

       在用SBMJOBBCHJOB提交作业时,可在命令中规定库列表。它替代作业描

述或QUSRLIBL中规定的库列表。

       SBMJOB命令中,可规定*CURRENT。它指出使用发出命令的作业库列表。

       在作业内可使用ADDLIBLERMVLIBLECHGLIBL命令,这些命令替代以前

规定的库列表。

可用CHGCURLIBCHGLIBL命令来修改当前库。

       可用下列CL程序来修改库列表:

 

     PGM  /* SETLIBL - Set library list */

     CHGLIBL LIBL(APPDEVLIB QGPL QTEMP)

     ENDPGM

 

       如果正常使用库列表,可用一个初始程序来建立库列表:

 

 

 

     PGM  /* Initial program for QPGMR */

     CHGLIBL LIBL(APPDEVLIB QGPL QTEMP)

     TFRCTL PGM(QPGMMENU)

     ENDPGM

 

       程序生成时它的用户配置文件改为规定新的初始程序。控制从这个程序传给QPGMMENU,它显示程序员菜单。要往初始程序规定的库列表中加一个库,可用以下命令:

 

     ADDLIBLE LIB(JONES) POSITION(*LAST)

 

       如果作业中有些部分要用不同的库列表,可以写一个CL程序保存当前库列表,以后再重存回来。程序如下:

 

            PGM

            DCL &LIBL *CHAR 275

            DCL &CMD *CHAR 285

     (1)    RTVJOBA USRLIBL(&LIBL)

     (2)    CHGLIBL (QGPL QTEMP)

            .

            .

            .

     (3)    CHGVAR &CMD ('CHGLIBL (' *CAT &LIBL *TCAT ')')

     (4)    CALL QCMDEXC (&CMD 285)

            .

            .

            .

            ENDPGM

 

⑴保存库列表的命令,它存在变量&LIBL中,每个库名占10个字节,库名之间要有一个空格。

⑵此命令根据下面的功能要求修改库列表。

CHGVAR在变量&CMD中建立命令CHGLIBL

⑷调用QCMDEXC来处理&CMD中的命令串。在调用QCMDEXC之前要用CHGVAR命令。这是因为在CALL命令中不能做连接动作。

 

4.3.1.3  设置库列表的考虑

              设置库列表和使用它时,要考虑以下问题:

                     在库列表中的库必须在系统中存在,在系统启动后可以访问QUSRLIBL

QSYSLIBL。如果库列表中的库不存在,则有信息送往QSYSOPR,且忽略此库。一旦OS/400启动后,任何活动作业的库列表中的库都不可以删除。如果在作业描述、BCHJOBSBMJOB中规定的库列表有不存在的库,则作业不能启动。

库列表中的库必须为使用它们的用户授权。要初始一个库列表,用户必须对

这些库有目标操作权限,在增加库和修改库时对库要有*USE权限。

当一个在授权用户配置文件下运行的程序要往库列表中加一个库,而当前用户在结束程序运行前又不能增加或移出库,那么用户保持*USE授权来访问库,这种情况仅对规定了*LIBL时才有效。

库列表尽可能短,这样存好的系统性能。

 

4.3.2  显示库列表

       可用DSPLIBL来显示运行作业的库列表。它按库列表中库出现的同样顺序显示,也可用DSPJOB命令后选13来显示库列表。

 

4.3.3  使用类属目标名

       有时可能需要检索一些名字有相同字符的目标,这类检索叫做类属检索。此时在命令的目标名中写类属名,类属名用*号加一些字符组成。例如,要显示名字用ORD开始的目标描述,那么在DSPJOBD中用类属名ORD*

       类属检索,可由下列库限定目标类属名:

              某个库:请求的操作仅在规定库的类属名目标上完成。

作业库列表:按库列表中给出的顺序检索库,请求的操作在库列表中库的类

属名目标上完成。

                     作业当前库:检索作业的当前库。如果没规定,用QGPL

                     库列表中用户部分的所有库:按库列表中列出的顺序检索,其中包括当前库、

       有权使用的所有用户库,以及下列以Q打头的库都可被检索:

 

       QDSNX                                     QUSER38

      QGPL                                      QUSRADSM

      QGPL38                                        QUSRBRM

      QMQMDATA                                  QUSRIJS

      QMQMPROC                                      QUSRINFSKR

      QPFRDATA                                  QUSRNOTES

      QRCL                                          QUSRRDARS

      QS36F                                         QUSRSYS

      QUSRVxRxMx

 

                     系统中你有权使用的所有库:以字母顺序检索。

 

4.3.4  检索多个或一个目标

              在能用类属名的所有命令中,可规定目标名(不用*号)且可检索多个目标。如果规定目标名和*ALL*ALLUSR做库名,系统要检索多个目标,检索结果是你有权的目标名及类型。如果规定类属名,或规定*ALL*ALLUSR或库名,可以规定所有支持的目标类型(或*n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ALL目标类型)。

 

4.4  使用库

              用库来把相关目标组合在一起,且用名字来查找目标,一个库是一组目标的目录。

              可以使用库来做:

以每个用户的目标分组,这有助于管理系统中的目标。例如,可把用户JOE

的目标放在JOELIB库中。

以每个应用程序所用的目标分组。例如,可把所有定货单文件和程序放在

DISTLIB中,只要把一个库加到库列表中就能够保证所有定货单文件和程序都在列表中。这样,就不用在每次使用文件和程序时都规定库名。

保证安全,可以规定哪个用户有权使用哪些库,做什么事情。对新生成的目标根据所在库的CRTAUT参数,使用自动授权表和分配授权可以使安全措施更容易实现。对这些目标根据CRTOBJAUD参数值来查它们的属性。

把要同时保存和重存的目标都放在同一库里,能简化保存/重存操作,可用一个SAVLIB来代替多个SAVOBJ命令。

使用多个库做测试,详细内容请看附录A

使用多个产品库,例如,源文件和某些目标用一个库,程序及文件用一个库,不要经常做保存的目标用一个库,经常要保存的目标用一个库。

       用多个库能更容易的使用目标。例如,有两个同名文件放在不同库中,一个用来测试,一个正常使用。只要在程序中不规定库名,就不用对测试和正常使用来修改程序中的文件名,而用库列表来控制使用哪个库。

       有两种类型的库:产品库和测试库。产品库是正常使用的库,在调试方式中,你要注意保护产品库的数据文件不被修改,而在测试库中的文件不用特别规定即可修改。(详细内容请看附录A)。

 

4.4.1  生成一个库

CRTLIB命令生成一个库,下面的命令生成一个名为DISTLIB的库,它是一个产品库,公共权限为缺省值,它不允许其它用户访问这个库,放这个库中的目标给出缺省的权限为*CHANGE

 

     CRTLIB   LIB(DISTLIB) TYPE(*PROD) CRTAUT(*CHANGE) CRTOBJAUD(*USRPRF) +

              AUT(*EXCLUDE) TEXT('Distribution library')

 

用户不能生成名字以Q开头的库,在检索时,会认为此类库为系统库。(例如QRPGQPDA等)。

 

4.4.2  规定库的权限

下面介绍可以分配给用户使用库的各种权限,详细内容请看安全参考一书。

 

4.4.2.1  目标权限

一个库的目标操作权给用户显示库描述的权限。

一个库的目标管理权包括下列授权:

       分配和取消授权,仅能分配和取消你管理范围内的权限,仅目标主人和有*ALLOBJ

权限的人能分配库的目标管理权限

给库改名

目标存在权和使用权给用户删除目标的权力。

目标存在权和操作权给用户转移库所有者的权力。

 

4.4.2.2  数据权限

库的加和读权限允许用户在库中生成新目标和往库中移进目标。

库的修改和执行权限允许用户修改库中目标的名字,也授权给有关的用户。

删除权限允许用户从目标中取消一项,库的删除权限不是允许用户删除库中目标,用库中目标的权限来确定目标是否能删除。

执行权允许用户检索库中目标。

 

4.4.2.3  合并授权

库的*USE权限(有目标的操作权、读和执行权)包括下列权限:

              用库来查找目标

              显示库的内容

              把库放到库列表中

              保存库

              从库中删除目标

       库的*CHANGE权限(由目标操作权和所有数据权限组成)包括下列权限:

              用库查找目标

              显示库的内容

              把库放到库列表中

              保存一个库

              从库中删除目标

              往库中加目标

*ALL权限提供所有目标和数据授权。用户可以删除库,规定库的安全措施,修改库,显示库的描述和内容。

       *EXCLUDE权限不让用户访问目标。

要显示一个库的授权情况,用DSPOBJAUT命令。

 

4.4.3  目标的安全考虑

       当系统访问你要引用的目标时,要检索你是否有权使用这个目标以及请求使用它做什么。一般说,有两层授权要考虑:

              必须有权用此目标来完成请求的操作。

              必须对目标所在的库有权限,如果用库列表,必须对表中的库有权限。

       目标权限是由系统的安全功能控制的,它包括:

目标主人和有*ALLOBJ权限的用户对目标有所有的权限,也能给其它用户分配和

取消目标的权限。

在没有分配目标的私人授权时,用户有公共权限。

       详细情况请看安全考虑一书,写程序时有关安全方面的考虑也请看此书。

 

4.4.4  新建目标的缺省公共授权

       在库中建目标时,目标的公共授权是由库的CRTAUT值设置的:

 

    CRTLIB   LIB(TESTLIB) CRTAUT(*USE) AUT(*LIBCRTAUT)

 

       它生成了TESTLIB库,那么生成放在库中的所有目标都有缺省的公共权限*USETESTLIB的公共授权是由库QSYSCRTAUT值确定的。

 

      CRTDTAARA DTAARA(TESTLIB/DTA1) TYPE(*CHAR) +

               AUT(*LIBCRTAUT)

   

     CRTDTAARA DTAARA(TESTLIB/DTA2) TYPE(*CHAR) +

               AUT(*EXCLUDE)

 

       数据区DAT1生成在TESTLIB中,它的授权是*USE

       数据区DAT2生成在TESTLIB中,它的授权是*EXCLUDE,这是因为在生成它的命令中已规定AUT参数。

       可用授权表来实现库中目标的安全:

 

     CRTAUTL AUTL(PAYROLL)

     CRTLIB  LIB(PAYLIB) CRTAUT(PAYROLL) +

             AUT(*EXCLUDE)

 

       它生成名为PAYROLL的授权表。库PAYLIB生成时的公共授权为*EXCLUDE,生成在PAYLIB中的目标的安全由缺省规定,是由授权表PAYROLL管理的。

      

     CRTPF FILE(PAYLIB/PAYFILE) +

           AUT(*LIBCRTAUT)

   

     CRTPF FILE(PAYLIB/PAYACC) +

           AUT(*CHANGE)

 

       文件PAYFILE生成在PAYLIB中,它是由PAYROLL管理权限的。在CRTPF中对PAYFILE规定的公共授权为*AUTL,它指出由授权表PAYROLL管理其公共权限。

       文件PAYALL生成在PAYLIB中,由于在CRTPF命令中规定了AUT参数,故它的公共权限为*CHANGE

       库中的CRTAUT值规定了生成在此库中的目标的公共权限。这些值可以是:

       *SYSVAL(目标权限由系统值QCRTAUT确定),授权表名,*ALL*CHANGE

*USE*EXCLUDE

 

4.4.5  新建目标的缺省审查属性

       在库中生成目标时,目标的审查属性是由库的CRTOJBAUD值来设置的。

 

     CRTLIB LIB(PAYROLL) AUT(*EXCLUDE) CRTAUT(*EXCLUDE) CRTOBJAUD(*ALL)

 

       在库PAYROLL中的所有目标在读和修改时都要审查它的权限。

 

4.4.6  往库中放目标

       生成目标时,要放在库里。如果没指定库,放在作业的当前库中,如没有当前库,放在QGPL中。在生成库时可用CRTLIB中的CRTAUT参数来规定生成在此库中的目标的公共权限。一个目标的限定名包括库名和目标名。用下列命令生成物理文件ORDHDRP放在DISTLIB中:

 

                     CRTPF    FILE(DISTLIB/ORDHDRP)

 

       要能把文件放到库中,必须对库有读和加的权限。

       同名同类型的目标不能放在同一库中。如果这样做,系统要给出错读信息。

       注:QSYS库仅用于系统目标,不要把其它的特许程序放到这个库中,因为在安装新

目的OS/400时会丢失一些内容。

 

4.4.7  删除和清理库

       DLTLIB删除库时,删除了库中目标和库本身。用CLRLIB清理库时,删除了库中目标但不删除库。

       要删除一个库,必须对库和目标有存在权,对库要有使用权。如果对库中所有目标没有存在权,那么不能删除无权限的目标和库,只删除那些你有权限的目标。如果对库没有存在权而要删除它,不仅是库删不掉,库中目标也一个也删不掉。如果要删除某些你有权的目标,可用删除这类目标的命令,比如DLTPGM

       不能删除在活动作业库列表中的库,必须等到作业结束才允许删库。这样,必须在下个例程里开始之前删库。

       如果一个库是初始库列表(由系统值QSYSLIBLQUSRLIBL确定)中的一个库,要按下列步骤删除它:

1.         CHGSYSVAL把库从库列表中移出。

2.         CHGLIBL来修改作业的库列表,也可用CHGSYSLIBLADDLIBLEEDTLIBLRMVLIBLE命令来修改库列表。

3.         DLTLIB命令删除库及目标。

注:不能删除QSYSQGPL。你不能使用QRECOVERY库,它仅是给系统用的。

要清理一个库,对库中目标要有存在权,对库要有使用仅。如果不是这样,则删不掉

无权的目标。如果目标已分配给其它人,则删不掉它。

 

4.4.8  显示库名及内容

可用DSPLIBWRKLIB命令来显示或打印你有权的库来找到库中每个目标的基本信息。它包括:

              目标名和类型

              目标属性

              目标大小

              目标生成时给出的说明

DSPLIB中,可规定一个库名或多个库名,此时,目标是按库分组的。在每个库中,目标按类型分组,在同类型时,按名字的字母顺序列出,库的顺序为下列之一:

如果在DSPLIB中规定库名,按命令中规定库的顺序显示。

如果在DSPLIB中规定*LIBL*USRLIBL,按作业库列表中的顺序显示。

如果规定*ALL*ALLUSR,则以字母顺序显示,对显示的库必须有读的权限。

下列命令显示库DISTLIB中的目标:

 

            DSPLIB  LIB(DISTLIB)  QUTPUT(*)

 

参数       QUTPUT中的*号表示,显示的结果在交互处理时在工作站上显示,在批处理时要打印出来。要在交互处理时打印出来,规定QUTPUT(*PRINT)

 

4.4.9  显示和获得库的说明

       DSPLIBDRTVLIBD命令来显示和获得库的说明。

       库的说明信息包括:

              库类型(PRODTEST

              库存的辅助存储池(ASP

              库的生成权限

              库的生成目标审查

              库的说明

 

4.5  OS/400图象民族支持

       OS/400特许程序支持不同的民族语言,这就允许在系统中对不同用户表示不同的语言。

       用于用户可读信息的语言(显示、信息、打印、联机信息)是由作业的库列表控制的,往库列表中的系统部分加一个民族语言库,可表示不同的民族语言版本,主语言是支持安装的每个特许程序运行码和原文数据的民族语言版本。第二语言,是所有特许程序的原文数据。

       系统的主语言信息是存在与IBM特许程序同一库中。例如,系统的主语言是英语,则QSYSQHLPSYSQSSP就包含英文的信息。QSYSQHLPSYS是在库列表的系统部分,而其它特许程序库是在需要时由系统加到库列表中去的。

       不是主语言的民族语言版本是安装在第二语言库中的。每个库中包括一个民族语言版本,帮助所有的特许程序。第二语言库的名字为QSYSnnnn,其中nnnn是语言特性码。如法语的特性码为2928,则第二语言库为QSYS2928

       如用户要表达系统的主语言信息,则不要特别的操作。如果要用不同主语言的第二语言,则必须修改库列表,把要用的语言库放在库列表中所有民族语言信息的前边。可用下列方法之一把要用的民族语言库放在首位:

              可用CRTSBSDCHGSBSDSYSLIBLE参数来规定显示信息等所用的语言:

 

         CRTSBSD SBSD(QSBSD 2928) POOLS((1 *NOTSG)) SYSLIBLE(QSYS2928)

   

         CHGSYSLIBL  LIB(QSYS2928)

 

              可用CHGSYSLIBL中的LIB参数把语言库放在库列表的顶部:

 

            CHGSYSLIBL  LIB(QSYS2928)

 

可在用户配置文件中建一个初始程序来规定语言库放在交互作业的库列表顶部,如果用户不想在每次注册时都用CHGSYSLIBL命令,这是一个好的做法。初始程序使用CHGSYSLIBL把要用的语言库加到库列表的顶部。

              注:不是所有的用户都有权使用CHGSYSLIBL命令。

       要使一个用户在没被授权的情况下使用CHGSYSLIBL命令,可以写一个包括这条命令的CL程序。此程序的主人为超级用户,且在生成时用超级用户的权限,有权运行这个程序的用户就能用这条命令。下面是一个例子,它为用户Frence设置库列表。

 

 

     PGM

       CHGSYSLIBL  LIB(QSYS2928)  /* Use French information */

     ENDPGM

 

4.6  说明目标

       在用生成命令建立目标时,可在TEXT参数中给出不多于50个字符的说明。某些命令会允许使用缺省值*SRCMBRTXT,它指出生成目标的说明就用生成它的源成员的说明,这仅适用于用源文件生成的目标。

       如果生成命令的源输入是设备文件或联机文件或不用源文件,缺省值为空白。它可以用DSPOBJDDSPLIB命令显示说明,可用CHGOBJD或其它很多CHGxxx来修改。

 

4.7  显示目标说明

       可用DSPOBJDWRKOBJ命令来显示目标说明,它可用来确定系统中哪些目标没有被使用。如果用批处理,说明可以打印或写到一个数据库文件中。如果用交互处理,说明可以显示,打印或写到一个数据库文件中。

       可以显示目标的全部、基本或服务属性,它们在下表中给出。

 

       基本属性                全属性                    服务属性(见注)

       目标名                                目标名                                  目标名

       库名                                          库名                                            库名

       目标类型                                   目标类型                                     目标类型

       扩充属性                                   主人                                            源文件和库

       目标大小                                   主组                                            成员名

       说明(部分)                            扩充属性                                     扩充属性

                                                 用户定义的属性                    用户定义的属性

                                                 说明                                            空闲状态

                                                 生成日期和时间                    目标大小

                                                 生成目标的用户                    生成日期和时间

                                                 生成目标的系统                    文件成员最后修改的日期和 

  时间

                                                 目标定义域                           系统级别

                                                 修改日期和时间                    编译程序

                                                 是否使用数据采集                       目标

                                                 最后使用日期                              控制级别

                                                 使用天数计数                              由程序修改

                                                 允许由系统修改                         是否由用户修改

                                                 目标审查值                           特许程序

                                                 目标大小                                     PTF号码

                                                 脱机尺寸                                     APAR  ID

                                                 空闲状态                                     说明

                                                 压缩状态                                     目标或目标状态说明

                                                 辅助存储池                           条件

                                                 目标溢出

                                                 保存的日期和时间

                                                 重存的日期和时间

                                                 保存命令

                                                 设备类型

 

 


注:

    1.由编程支持人员所用的服务信息用来确定生成目标所用系统的级别以及目标是否修改过,这些信息是很有用的,因为它能给出生成目标所用的源文件以及最后修改日期。

2.库中目标仅给出目标名,如果在DSPOBJD中用*LIB,目标大小的信息是库的大小,而不是库中所有目标的总尺寸,可用QLIRLIBDDSPLIB  OUTPUT(*PRINT)来查到库的总尺寸。用DSPOBJDWRKOBJ命令,可用下列内容列出库中目标:

              目标、类属性、类型、一类目标中的名字或类属性

目标以库、类型的字母顺序列出。如果要显示多个目标的全属性或服务属性,可在批作业中用DSPOBJD命令,可以输出到假脱机上打印出来,或形成一个数据库文件。如果直接输出到数据库文件,目标的所有属性也写进文件中,可用DSPFFD命令来显示文件QADSPOBJ,来看这个文件的记录格式。

下列命令显示名字以QRD开头的目标说明。

 

     DSPOBJD   OBJ(DISTLIB/ORD*)  OBJTYPE(*FILE) +

               DETAIL(*BASIC)  OUTPUT(*)

 

显示的基本内容为:

 

  

                                                                                     

                          Display Object Description - Basic                        

                                                                      Library 1 of 1

    Library:     DISTLIB                                                             

                                                                                    

    Type options, press Enter.                                                      

      5=Display full attributes   8=Display service attributes                      

                                                                                    

    Opt  Object      Type      Attribute                 Size   Text                

     _   ORDDTLP     *FILE        PF                     8192   Order detail        

     _   ORDHDRP     *FILE        PF                     8192   Order header        

                                                                                    

                                                                                     

                                                                                    

                                                                                    

                                                                             Bottom 

    F3=Exit   F12=Cancel   F17=Top   F18=Bottom                                     

                                                                                    

                                                                                     

  

 

如果规定*FULL而不是*BASIC,或在ORDDTLP的基本显示前写5,则显示全属性。

 

  

                        Display Object Description - Full                          

                                                                     Library 1 of 1

   Object . . . . . . . :    ORDDTLP        Attribute  . . . . . :   PF            

     Library  . . . . . :      DISTLIB      Owner  . . . . . . . :   QSECOFR       

   Type . . . . . . . . :    *FILE          Primary group        :   *NONE          

   User-defined information:                                                       

      Attribute . . . . . . . . . . . . :                                          

      Text  . . . . . . . . . . . . . . :                                          

   Creation information:                                                           

     Creation date and time . . . . . . :   06/08/89  10:17:03                     

     Created by user  . . . . . . . . . :   QSECOFR                                

     System created on  . . . . . . . . :   SYSTEM01                               

     Object domain  . . . . . . . . . . :   *SYSTEM                                

   Change/Usage information:                                                       

     Change date/time . . . . . . . . . :   05/11/90  10:03:02                     

     Usage data collected . . . . . . . :   YES                                    

     Date last used . . . . . . . . . . :   05/11/90                               

     Days used count  . . . . . . . . . :   20                                     

     Date use count reset . . . . . . . :   03/10/90                               

     Allow change by program  . . . . . :   YES                                    

   Auditing information:                                                           

     Object auditing value  . . . . . . :   *NONE                                  

   Press Enter to continue.                                                        

   F3=Exit   F12=Cancel                      (C) COPYRIGHT IBM CORP. 1980, 1993.   

                                                                                    

  

   

   

  

                                                                                     

                         Display Object Description - Full                          

                                                                      Library 1 of 1

    Object . . . . . . . :    ORDDTLP        Attribute  . . . . . :   PF            

      Library  . . . . . :      DISTLIB      Owner  . . . . . . . :   QSECOFR       

    Type . . . . . . . . :    *FILE                                                 

                                                                                     

    Storage information:                                                            

      Size . . . . . . . . . . . . . . . :   8192                                   

      Offline size . . . . . . . . . . . :   0                                       

      Freed  . . . . . . . . . . . . . . :   NO                                     

      Compressed . . . . . . . . . . . . :   NO                                     

      Auxiliary storage pool . . . . . . :   1                                       

        Object overflowed  . . . . . . . :   NO                                     

    Save/Restore information:                                                       

      Save date/time . . . . . . . . . . :                                           

      Restore date/time  . . . . . . . . :                                          

      Save command . . . . . . . . . . . :                                          

      Device type  . . . . . . . . . . . :                                           

                                                                           Bottom   

    Press Enter to continue.                                                        

                                                                                     

                                                                                    

    F3=Exit   F12=Cancel                                                            

                                              (C) COPYRIGHT IBM CORP. 1980, 1993.   

                                                                                    

  

 

4.8  得到目标说明

可用RTVOBJ命令把目标的说明返回给一个CL过程,用变量来返回说明,可用这些说明来确定系统中已用的目标。

返给做为变量的目标说明可以是:

              目标所在库名

              目标的扩展属性

              用户定义的属性

              描述说明

              目标主人的用户配置文件名

              目标主组的名字

              ASP  ID

              是否溢出所在ASP

              目标生成日期和时间

              目标最后保存日期和时间

SAVACT(*LIB  *SYSDFN*YES)保存操作期间目标最后保存的日期和时间

目标最后重存的日期和时间

生成目标的系统

目标定义域

是否使用数据采集

目标最后使用日期

目标使用的天数

最后计数清零的日期

目标数据的存储状态

目标压缩状态

目标的字节数

最后保存时目标的字节数

保存目标使用的命令

保存目标到带上时的顺序号

保存目标的带或软盘的卷标

保存目标用的设备类型

保存目标使用的备份文件名

保存目标使用的备份文件所在库名

保存目标使用的文件标号

用来生成目标的源文件名

用来生成目标的源文件所在库名

用来生成目标的原成员名

源文件的最后修改日期

特许程序标识、版本

生成目标的控制级

是否可用QLICOBJD  API修改的有关信息

指出是否用了QLICOBJD  API修改目标的有关信息

程序是否由用户修改过

如果得到的目标是特许程序的一部分,特许程序的名字及版本

生成得到目标的PTF号码

授权的程序分析报告(APAR)标识

目标跟踪的类型

 

4.8.1  RTVOBJ的例子

在下面的CL过程中,用RTVOBJD得到目标的说明,假定MOBJMYLIB中:

 

     DCL  &LIB      TYPE(*CHAR) LEN(10)

     DCL  &CRTDATE  TYPE(*CHAR) LEN(13)

     DCL  &USEDATE  TYPE(*CHAR) LEN(13)

     DCL  &USECNT   TYPE(*DEC)  LEN(5 0)

     DCL  &RESET    TYPE(*CHAR) LEN(13)

     .

     .

     .

     RTVOBJD    OBJ(MYLIB/MOBJ) OBJTYPE(*FILE) RTNLIB(&LIB)

                CRTDATE(&CRTDATE) USEDATE(&USEDATE)

                USECOUNT(&USECNT) RESETDATE(&RESET)

 

则下列信息返给程序:

MYLIB放在&LIB

MOBJ的生成日期放在&CRTDATE

MOBJ的最后使用日期放在&USEDATE

使用MOBJ的天数放在&USECNT中,开始计数的日期放在&RESET

 

4.9  目标的生成信息

下列信息是在目标生成时建立的一些信息,它对于目标管理和维护是很用用的。

目标的生成者:

         生成目标的用户配置文件完成生成操作,如果此用户配置文件有成组配置文件,则组中的用户都拥有这个目标

         当主人变更时,目标的生成者不能修改目标

         在重存目标时,生成者是目标,所在介质上的生成者

         在用CRTDUPOBJ命令建目标副本时,目标的生成者是运行此命令的用户

         IBM支持目标的生成者为*IBM

         V1.3版本以前已有的目标,生成者为空白

生成目标的系统:

         当重存目标时,生成系统为中间介质上目标所用系统

         V1.3版本以前已有的目标,生成系统为空白

 

4.10  删除系统中不用的目标

目标说明中的信息能帮助你确定及管理系统中不用的目标。要确定不用的目标,看最后使用日期和最后修改日期,修改命令不能改变最后使用日期

最后修改的日期和时间:

         在目标生成或修改时,系统会标记时期,指出发生修改的日期和时间

最后使用日期:

         最后使用日期是在一天中的某个时候,(一天中的第一次使用)则用系统日期

         不成功的企图使用一个目标,不改变最后使用日期

         新目标的最后使用日期为空白

         在重存期间删除和再生成的目标,丢失最后使用日期

         成员数为零的数据库文件的最后使用日期不改变。例如,在用CRTDUPOBJ命令复制目标时,文件中无成员,则不改变最后使用日期

         数据库文件的最后使用日期是最近使用的文件成员的日期

         对逻辑文件,最后使用日期是最后一次使用逻辑成员的日期

         对物理文件,最后使用日期是通过物理文件或逻辑文件访问得到数据空间数据的最后时间。

 

4-3  对不同类型目标引起最后使用日期更改的操作

目标类型

命令及操作

所有类型

CRTDUPOBJ以及象CPYLIB之类的复制命令,GRTOBJAUT命令

修改请求说明

CHGCMDCRQA

图表格式

DSPCHT

C场所说明

RTVCLDSRC或在C程序中引用

级别

用于启动一个作业

命令

运行,在CL程序编译时,对SEU提示时,在检查方式下调系统时

通讯边界信息(CSI)

当调用CMINIT来从边界信息目标初始化为不同转换字符值时

连接列表

当连接列表到达Vary on pending状态边界时

交叉系统产品映象

CSP应用程序中引用时

控制器描述

在控制器到达Vary on pending状态边界时

设备描述

当设备到达Vary on pending状态边界时

数据区

RTVDTAARADSPDTAARA

数据队列

在每个作业仅一次修改下列API信息时:QSNDDTAQQRCVDTAQQMHRDQMQMHQRDQD

文件(数据库文件)

在关闭、清理,初始化重组时,APYJRNCHGRMVJRNCHG

文件资源

在打印期间引用时

格式定义

在打印期间引用时

图形符号集

GDDM*PGR图形应用程序引用时,在交互装入或用GSLSS

作业描述

用来建立一个作业时

作业调度

系统间作业调度入口提交一个作业

作业队列

在队列中移出一项或往队列中放入一项时

线路描述

当线路到达Vary on pending边界状态时

场所

取得场所API  QLGRTVLC

在作业启动时,如果用户配置文件LOCALE值包括个有效的*LOCALE目标的路径名时

菜单

GO命令显示菜单时

信息文件

在从信息文件中获得信息时(除QCPFMSG##MSG1##MSG2QSSPMSG外),例如建立作业日志时,显示信息队列时,在需要QHST记录的信息时,或程序收到一个除标识信息以外的信息时

合并信息文件命令(MRGMSGF)。信息文件*QCPFMSG##MSG1##MSG2,或QSSPMSG除外

信息队列

除了QSYSOPRQHST外,在发送信息,接收信息,列出信息

网络接口描述

在网络接口描述到达Vary  on  pending边界时

结点列表

仅由影响所有目标类型的命令和操作修改

输出队列

当在队列中放入一项或移出一项时

复盖

在打印期间引用时

页定义

在打印期间引用时

页段

在打印期间引用时

面板组

在用HELP键请求对提示或面板帮助时,更改所用的日期

在从面板组显示或打印一个面板时

打印描述组

在打印期间引用时

产品可用性

仅由影响所有目标类型的命令和操作来更新

产品装入

仅由影响所有目标类型的命令和操作来更新

程序

RTVCLSRC命令,在运行非系统程序时,与其它程序连编生成程序目标时

PSF配置

在打印操作期间引用时

查询定义

在用来成报告时,在输入输出时

查询管理格式

在用来成报告时,在输入输出时

查询管理查询

在用来成报告时,在输入输出时

检索索引

在联机帮助信息中使用F11键时,在用STRSCHIDX命令时

服务存储

运行VARCFG,不用网络服务描述目标

SQL

仅由影响所有目标类型的命令和操作更新

子系统描述

在子系统启动时

拼写辅助字典

在用来生成另外的字典时,在恢复时,在拼写检索期间在字典中找到一个词且字典不是IBM支持的拼写辅助字典

程序使用做传输时

用户配置文件

当作业用配置文件做初始化时,在配置文件是成组文件且作业用组中成员启动时,GRTUSRAUT命令

工作站用户

仅由影响所有目标类型的命令和操作更新

 

在用户从WRKJOBSCDE面板上选择选项10=立即提交时

 

 

       下面是在目标说明中提供的有用信息:

       所用天数计数:

         在最后使用日期更新时计数增加

         在重存系统中已有目标时,使用的天数来自系统中的目标。如果在重存时没有则

计数为零。

         在重存操作期间删除和再生成的目标会丢失所用天数计数。

         新目标的使用天数为零。

       注:AS/400系统不能决定新老设备文件之间的不同。如果往系统中重存一个已有的同

名的目标,如果不删除,系统则用原有目标的天数计数。

  数据库文件的使用天数是其中成员使用天数的总和。如果总和溢出,则给出

最大值。

       使用天数清零:

         在用CHGOBJDQLICOBJD  API把使用天数清零时,要记录日期,用户就会

知道使用天数有多长。      

         对一个文件的使用天数清零,其中所有的成员使用天数也清零。

       能删除使用天数和最后使用日期的一般情况如下:

              目标损坏要重存。

              当系统不在限制状态时重存一个程序。

       DSPOBJD命令可以显示目标的全部说明,它可以把输入写到一个输出文件中,要得到这个说明,用RTVOBJD命令。

       RTVMBRDDSPFD命令提供文件中成员的信息。

       下列类型的目标不能修改其使用信息:

              警告表(*ACRTBL                        授权表(*AUTL

配置表(*CFGL                                   服务级别描述(*COSD

数据字典(*DCADCT                   文本(*DOC

双字节字符集字典(*IGCDCT

双字节字符集分类(*IGCSRT

双字节字符集表(*IGCTBL          编辑说明(*EDTD

结束寄存器(*EXITRG                 格式控制表(*FCT

过滤器(*FTR                              文件夹(*FLR

网间包交换描述(*IPXD                     日志(*JRN

日志接收器(*JRNRCV                 库(*LIB

方式描述(*MODD                     网络服务描述(*NWSD

BIOS描述(*NTBD                  产品定义(*PRDDFN

引用码传输表(*RCT                   对话描述(*SSND

S/36机器说明(*S36                    用户队列(*USRQ

 

4.11  从一个库往另一库中移动目标

 

       可用MOVOBJ命令在库间移动目标。一个目标暂时不用,用一个新版的目标代替超期的目标时用此命令。例如,可把新的主文件临时放在一个库中,与老主文件不在一个库,由于老文件的数据是正常复制到新文件中,那么在没有生成新文件时就不能删除老文件。然后,可删除老文件把新文件移到老文件所在的库中。

       仅可移动你有目标管理权的目标。对移出的库要有删除和执行权限,对移入的库要有增加和读的权限,可以从临时库QTEMP中移出目标,但不可以移进目标,也不能移动非空的输出队列。

       对日志和接收器要移回生成它们所在的库时要有限制,如果日志目标由RCLST命令放到了QRCL库中,它们必须移回原库才能使用。

       下面是不能移动的目标类型:

       授权表(*AUTL                                   服务级别描述(*COSD

配置表(*CFGL                                   连接列表(*CNNL)

控制器描述(*CTLD)                         数据字典(*DTADCT)

双字节字符集字体表(*IGCTBL)        设备描述(*DEVD)

显示工作站信息队列(*MSGQ)          文本(*DOC)

编辑描述(*EDTD)                                   结束寄存器(*EXITRG)

文件夹(*FLR)                                          网间包交换描述(*IPXD)

作业调度(*JOBSCD)                         (*LIB)

线路描述(*LIND)                             方式描述(*MODD

BIOS描述 (*NTBD)                     网络接口描述(*NWID)

SQL程序包(*SQLPKG)                    S/36机器说明(*S36)

系统历史日志(QHST)                       系统操作员信息队列(QSYSOPR)

用户配置文件(*USRPRF)

       下例中,一个文件从QGPL库移动到DISTLIB中,与其它的定货单文件组成一组。

 

 

 

MOVOBJ

ORDFILL移出J

 

              QGPL(以前)                          USTLIB                       QGPL(以后)

 ORDFILL

 

 

ORDFILL

 


                                                 

 


                                                                             

 

 

       要移动目标,必须规定TOLIB以及目标类型(OBJTYPE):

 

     MOVOBJ  OBJ(QGPL/ORDFILL)  OBJTYPE(*FILE)  TOLIB(DISTLIB)

 

       在移动目标时,要注意不要移动其它目标依赖的目标。例如,CL过程要依赖同一库中另一过程中所用的命令定义。生成模块和运行过程要是同一个库,在编译时和运行时,要在某个规定的库或库列表中找命令定义。如果规定库名,命令定义必须运行时与编译时在同一库中,如果规定*LIBL,命令定义可在编译与运行时在库列表中的库间移动。同样,应用程序也依赖于某个库中的一定目标。

       一个目标引用另一目标时可能会依赖目标的位置(虽然可用*LIBL来定位目标)。这样,如果要移动目标,就要修改一些引用关系。下面给出一些目标间的引用关系:

       子系统描述引用作业队列,级别,信息队列和程序

       命令定义引用程序,信息文件,帮助面板组和包括REXX过程的源文件

       设备文件引用输出队列

       设备描述引用传输表

       作业描述引用作业队列输出队列

       数据库文件引用其它数据库文件

       逻辑文件引用物理文件和格式选择

       用户配置文件引用程序,菜单,作业描述,信息队列和输出队列

       CL程序引用显示文件,数据区和其它程序

       显示文件引用数据库文件

       打印文件引用输出队列

       注:在从系统库QSYS中移出目标时要小心。这些目标是系统完成操作必不可少的,

系统必须能找到这些目标。对QGPL库也是同样。特别是对一些作业和输出队列,移出时要注意。

       MOVOBJ一次只移出一个目标,用一个命令移出多个目标,请看QUSRTOOL中的MOVLIBOBJ命令。

 

4.12  生成重复的目标

       可用CRTDUPOBJ命令来生成已有目标的一个复本。复本与原目标有相同的类型和权限,在同一个ASP中,使用这个命令的用户有二个同样的目标。

注:1、如果对已日志的文件生成重复目标,则对复本日志并不活动,但可在其后对其

   做日志。

2、如果要重复的目标没有成员,则最后使用日期字段为空,使用天数为零。

       要对目标进行重复,必须对目标有管理和使用权,对放复本目标的库有使用和增加权,对原目标所在库有使用权,对处理用户配置文件有增加权。

       只能重复作业队列,信息队列,输出队列和数据队列的定义。作业队列和输出队列不能重复到QTEMP中,对物理文件或备份文件,能规定文件中的数据是否可重复。

       下面是不能重复的目标:

       AS/400先进的36*机器,*CODS*CFGL*CNNL*CTLD*DATCT*DEVD*DTAQ

*IPXD*JOBSCD*JRN*JRNRCV*LIB*LIND*MODD*NWID*NWSD

*RCT  *SVTSTG*SPADCT*SQLPKG*S36  QSYSOPR  QHST*USRPRF*USRQ

在某些情况下,可能仅重复一个文件中的某些数据,那么可用CRTDUPOBJCPYF命令的一些选择值来做。

下列命令生成物理文件的一个复本,且重复文件中的数据。

 

       CRTDUPOBJ  OBJ(ORDHDRP)  FROMLIB(DSTPRODLLIB)  OBJTYPE(*FILE) +

                  TOLIB(DISTLIB2)  NEWOBJ(*SAME)  DATA(*YES) 

 

在生成目标复本时,要考虑目标间的引用顺序。多数是以名字来引用的,且多数都要有库名,而复本目标可能包含要引用不同于原目标所在的库中的目标。对于除文件外的所有类型,引用对其它目标的引用重复到复本目标中,对文件,复本目标共享原文件的格式。

FROM-LIB中的物理文件且有逻辑文件使用它,则在TO-LIB中必须也有。要比较FROM库和TO库中的记录格式名和记录级ID。如果物理文件不匹配,则不能重复逻辑文件。如果在FROM库中逻辑文件使用一个格式选择,则假定在TO库存中也存在这个格式选择。

 

4.13  重命名目标

       可用RNMOBJ命令重命名一个目标。此时,对目标要有管理权,对其所在的库要有更新和执行权。要给授权表改名,对其要有授权表管理权,对QSYS库要有更新和读数。

       下面的目标不能改名:

       *COSD*DTADCT*IGLTBL*MSGQ*DOC*EXITRG*FLR*JOBSCD*JRN

*JRNRCV*MODD*NWSD*SOLPKG*S36QHSTQSYSQTEMPQSYSQPR*USRPRF

也不能给非空的输出队列改名,也不能给IBM提供的命令改名。

要重命名目标,必须给出原名,改后的名及类型。

下面是改名的例子:

 

        RNMOBJ  OBJ(QGPL/ORDERL)  OBJTYPE(*FILE)  NEWOBJ(ORDFILL)

 

    新目标不能用限定名,因为新老目标要在同一库中,如果在执行RNMOBJ时,目标正在使用,则不能执行且系统给出信息。

       在给目标改名时,要小心不要改有其它目标引用的目标。例如,一个CL程序要依赖于程序中使用的命令定义,在运行和编译时命令定义要同名。如果不同名,由于找不到命令程序就不能运行,应用程序也是同样情况。

       不能给有日志,日志接收器,数据字典或SQL程序包的库改名。一个目标引用另一目标要依赖于目标名和库名。如果改名,就要修改相关的引用涉及的内容。

       如果给物理文件或逻辑文件改名,文件中的成员名不改,但可用RNMM命令给它们改名。

       注:在给QSYS库中目标改名时要小心,这些目标是运行系统必须的,在执行系统任务时必须能找到它,对QGPL库存中的目标也同样。

 

4.14  目标压缩和解压缩

可用CPROBJ命令来压缩选择的目标以便节省系统的磁盘空间。也可用DCPOBJ命令来对已压缩的目标解压。能压缩和解压目标类型为*PGM*SRVPGM*MOUDLE*PNLGRP*MENU(仅UIM菜单)和*FILE(仅显示文件和打印文件)。数据库文件是不允许压缩的。客户目标通讯AS/400系统支持的目标可以压缩和解压。要看或取得目标压缩的状态,可用DSPOBJ命令(选*FULL参数)或RTVOBJD命令。

 

4.14.1  目标的压缩

       可用CPROBJDCPOBJ命令来压缩和解压上节中给出的目标。在下列情况都为真时才能压缩目标:

              系统能获得目标的排它锁。

              压缩的大小能节省一磁盘空间。

       下面是对目标压缩的一些限制:

              V1.3版本之前生成的程序不能压缩。

V.3.6版本之前生成的程序,服务程序和模块在没转换前不能压缩。

       QSYSQSSP库中的IBM提供的程序在程序的页池值不是*BASE时不能压

缩。用DSPPGM命令来看程序的页池值,在除QSYSQSSP库外中的程序都可压缩而不考试页池值。

              仅属性为UIM的菜单可压缩。

              DSPFPRTF的文件可压缩。

              只有系统在限制状态(所有子系统都结束)时才可压缩系统库中的目标和程序。

              压缩的程序不能在系统中运行,程序会异常结束。

       如下表,在非限制状态用多个作业运行压缩会比较快。

 

              44用多个作业压缩目标

目标类型

IBM支持

用户支持

*HLE

作业3QSYS

作业7USRLIB1

*MENU

作业2QSYS

作业8

*MODULE

不能用

作业10USRLIB1

*PGM

仅在限制状态

作业5USRLIB1

*PNLGRP

作业1QSYS

作业4QHLPSYS

作业6USRLIB1

*SRVPGM

作业11QSYS

作业9USRLIB1

 

4.14.2  临时解压目标

       压缩的目标在使用时会由系统自动解压,在发生下列情况前一直会是临时解压状态:

              系统做IPL。这时会删除临时解压的目标(保留压缩目标)

              RCLTMPSTG命令释放临时解压的目标。假如目标没有用到规定日期,要删除

解压目标。

              临时解压目标用了两天以上或在同一IPL中用了五次以上,则要永久解压

              DCPOBJ命令解压目标,这时是永久解压

              系统对目标有排它锁

注:1、类型为*PGM*SRVPGM*MODULE的目标不能临时解压。如果调用压

缩程序或调试程序,它会自动地永久解压。

              2、打开压缩的文件时会自动解压。

3、如果检索得到压缩文件的描述,文件会临时解压,检索文件的两个例子是:

   DSPFFD命令显示文件的字段级信息

   DCLF命令说明文件

 

4.14.3  自动解压目标

       OS/400或其它IBM特许程序来的压缩目标在安装特许程序后会由系统解压。解压只在有足够的可用空间时才做,系统作业调用QDCPOBJx来自动开始解压。QDCPOBJ的作业数会根据处理数加1,这些作业是系统作业,优先级为60。用户不能修改、结束或挂起这些作业。QDCPOBJx作业可以是下列状态之一,它是来自WRKACTJOB命令:

              RUN(运行):作业正在解压目标。

              EVTW(文件等待):作业没解压目标。有多个目标要解压时作业才活动(也即,

   要安装另外的特许程序)。

              DLYW(延迟等待):作业临时停止,下列情况可导致QDCPOBJx临时停止:

系统在限制状态下运行(即执行了ENDSYSENDSBS  *ALL 

   令)

此时正从处理特许程序显示上安装特许程序。作业是在延迟等待状

   态,最多等15分钟才开始解压目标。

LCKW(锁等待):作业等待一个内部锁。在有一个QDCPOBJ作业在DLYW

 态时发生这种情况。

       如果在现有的系统上安装操作系统,有下列的存储要求:

              要能启动QDCPOBJx作业,起码要有250MB的可用存储。系统可用存储要大于

750MB,才能提交作业来解压要安装的系统目标。

              系统可用存储若小于250MB,则不能提交作业,目标要在用时才解压。

              系统可用存储在250MB750MB之间,仅解压经常使用的目标。

       经常使用的目标是指那些至少使用过5次且最后使用日期在前14天之内,其余不常用的目标保持压缩状态。

       如果操作系统是从安装特许内码显示上安装的特许内码和用选项2初始化的系统,则必须有至少1000MB的可用存储。

       如果在QDCPJOBx活动时系统中断,则在下一次IPL时重新启动作业。

 

4.15  删除目标

       要删除一个目标,可用DLTxxx命令,也可用WRKLIB显示中的处理目标的删除选项,删目标必须对目标有存在权,对库有执行权,只有权授表的主人或有*ALL权的人才能删除授权表。

       在删目标时,要保证目标没有人用。一般讲,如果有人在用目标。它是不能删掉的。如果在调用程序前用ALCOBJ命令分配的程序也能删除。

       生成程序命令和生成设备文件命令中都有REPLACE参数,它让你能继续使用被替代的老程序,这些再生成程序的老版本都放在QRPLOBJ库中。

       删系统库中目标时要非常小心。

       大多数删除命令中可在目标名栏中填一个类属名,要用DSPOBJD命令看一个所要删的目标类属名,详细内容请看4.3.3。删库的内容请看4.4.7

 

4.16  分配资源

       系统中目标的分配要保证集中性,并保证最大可能的一致性。在同一时间对目标完成几个操作,那么对目标要有一定的保护。比如,同时有两个用户读一个目标或一个用户仅可读目标而另一用户能读和更新目标。

       AS/400根据用目标完成的功能来分配目标。例如:

       如果一个用户显示或转储一个目标,另一用户可读此目标。

              如果一个用户修改、删除、改名或移动目标,其它人不许使用此目标。

              如果一个用户保存一个目标,另一用户可读它,但不能更新或删除它。

              如果一个用户重存一个目标,没有人可以读或更新此目标。

              如果一个用户为了输入打开一个数据库文件,另一用户可读此文件。

              如果一个用户为了输出打开一个数据库文件,另一用户可更新此文件。

              如果一个用户打开一个设备文件,另一用户仅可读此文件。

       一般讲,目标是根据需要才分配的,即在作业步需要目标时,才分配它,使用它,再分配它以使其它作业可以用此目标。请求目标的第一个作业分配目标,在程序中,可以处理例外发生,即处理不能分配请求的目标,详细情况请看第七章和第八章。有时在作业需要一个目标之前分配目标,这样在用目标时不用再等,可保证完成所需功能,这叫目标的预先分配,可用ALCOBJ命令预先分配目标。

       目标是根据要它们做什么来分配的(读或修改)和它们是否可以共享。文件和成员总是以*SHRRD来分配的。而数据用规定锁状态来分配锁的级别。锁状态标识使用的目标及是否可共享。有下列五个锁状态:

       *EXCL(排它):目标对请求它的作业保留排它使用。其它的作业不可使用它,但假如目标已分配给其它作业,你的作业也不能得到排它使用目标。这种锁状态用在完成功能前不想让其它作业访问此目标时。

       *EXCLRD(排它但允许读):目标已分配给请求它的作业,但其它作业可以读它。此锁用在不想让其它用户对目标做除读以外的操作时。

       *SHRUPD(共享更新):目标可对其它作业共享读或更新。即另外用户可对同一目标请求共享读锁状态或共享修改锁状态。在用户想要修改一个目标的同时也让另外用户读或修改同一目标时用此状态。

       *SHRNUP(共享不更新):如果作业请求一个共享不更新或共享读锁状态,则目标可与其它作业共享,在用户不修改目标且要保证其它用户也不修改目标时用此状态。

       *SHRRD(共享更新):如果用户不请求排它使用目标,则目标可与其它作业共享,另外作业可以请求排它允许读、共享更新、共享读或共享不更新锁状态。

       注:库的分配不限制在库中目标上完成的操作。即如果一个作业把排它读或共享更新锁状态放在一个库中,那么其它作业就不能往库中放进目标或从库中移出目标,而其它作业仍能更新库中的目标。

       下表给出对一个目标有效的锁状态组合:

 

       45  有效锁状态的组合

如果一个作业有这种锁状态:

另一个作业可能有的锁状态:

*EXCL

None

*EXCLRD

*SHRRD

*SHRUPD

*SHRUPD or *SHRRD

*SHRNUP

*SHRNUP or *SHRRD

*SHRRD

*EXCLRD, *SHRUPD, *SHRNUP, or*SHRRD

 

       对多数类型的目标可以规定五个锁状态,但不是对所有目标。

       下表给出对某些类型目标有效的锁状态。

 

     4—6  特别目标类型有效的锁状态

目标类型

*EXCL

*EXCLRD

*SHRUPD

*SHRNUP

*SHRRD

设备描述

 

x

 

 

 

 

x

x

x

x

信息队列

x

 

 

 

x

面板组

x

x

 

 

 

程序

x

x

 

 

x

子系统描述

x

 

 

 

 

 

       要分配一个目标,必须有目标存在权、目标管理权或操作权。分配过的目标在作业结束时会自动取消分配。在任何时候取消分配一个目标,用DLCOBJ命令。

       可在程序调用前分配它以保护其不被删掉。要不允许程序同时被不同作业运行,在作业调用程序前必须给程序加排它锁。下列目标不能用ALCOBJ命令分配:

       AS/400先进的36机器,AS/400先进的机器配置

       不能用ALCOBJDLCOBJ来分配APPC设备描述。

       下例中是一个更新二个文件成员的批作业。文件成员在更新时,可由另一程序读,但在作业运行时其它程序不可更新成员,每个文件的第一个成员用排它允许读锁状态预先分配好。

 

     //JOB  JOBD(ORDER)

       ALCOBJ  OBJ((FILEA *FILE *EXCLRD) (FILEB *FILE *EXCLRD))

       CALL  PROGX

     //ENDJOB

 

       分配给你的目标在使用完它们后要立即取消分配,这样其它用户可以使用它们。在作业前结束时分配过的目标会自动取消分配。如果FILEAFILEB中的第一个成员没有预先分配,那么排它允许读限制就不会起作用。在使用文件时,你可能想预先分配它们,这时,应该保证在使用它们 时没有被修改过。

       注:假如一个目标已被分配多次(由多个分配命令),用一个DLCOBJ命令不能完全取消分配,每个分配命令要用一个取消分配命令。

       对一个没加锁或没有分配所需锁状态的目标用DLCOBJ命令不算错误。

       下例是修改一个目标的锁状态:

 

     PGM

     ALCOBJ  OBJ((FILEX *FILE *EXCL)) WAIT(0)

     CALL PGMA

     ALCOBJ  OBJ((FILEX *FILE *EXCLRD))

     DLCOBJ  OBJ((FILEX *FILE *EXCL))

     CALL PGMB

     DLCOBJ  OBJ((FILEX *FILE *EXCLRD))

     ENDPGM

 

       文件FILEX用排它分配给PGMA,用排它允许读分配给PGMB

用记录锁来分配文件中的数据记录。可用生成文件命令中的WAITFILE参数来规定超时前程序等待文件多长时间。

       生成文件命令中的WAITRCD参数规定等待记录锁的时间。在CRTCLS命令中的DFTWAIT参数规定等待其它目标的时间。详细内容请看备份和恢复一书。

       对由落实控制提供的记录锁的详细内容,请看数据库程序设计一书。

 

4.16.1  显示目标的锁状态

       可用WRKOBJLCKWRKOBJ命令显示目标的锁状态。

       WRKOBJLCK命令显示一个目标的所有锁状态。它显示挂起锁和等待锁的情况。对数据库文件,WRKOBJLCK命令显示的是文件层的锁而不是记录层的锁,也用WRKOBJLCK命令显示数据库文件成员的锁。

       如果用WRKOBJ命令,在显示作业菜单中可以选择锁选项。这些选项包括显示规定作业的所有锁状态,作业挂起的锁,作业等待的锁。但如果作业正等待一个数据库记录锁,那它不出现在目标锁显示中。

       下面的命令显示逻辑文件ORDFILE在系统中所请求的所有锁状态:

 

     WRKOBJLCK  OBJ(QGPL/ORDFILL)  OBJTYPE(*FILE)

 

       显示结果为:

 

  

                                                                                    

                               Work with Object Locks                              

                                                                System:   SYSTEM01 

    Object:   ORDFILL        Library:   QGPL           Type:   *FILE-LGL           

                                                                                     

    Type options, press Enter.                                                     

      4=End job   5=Work with job   8=Work with job locks                          

                                                                                     

    Opt     Job            User           Lock        Status                       

     _      WORKST04       QSECOFR        *SHRRD       HELD                        

                                          *SHRRD       HELD                        

                                          *SHRRD       HELD                        

                                          *SHRRD       HELD                        

                                          *SHRRD       HELD                        

                                          *SHRRD       HELD                        

                                          *SHRRD       HELD                        

                                          *SHRRD       HELD                        

                                          *SHRRD       HELD                        

                                          *SHRRD       HELD                        

                                          *SHRRD       HELD                        

                                          *SHRRD       HELD                        

                                          *SHRRD       HELD                        

                                                                           More... 

    F3=Exit   F5=Refresh   F6=Work with member locks   F12=Cancel                  

                                                                                    

                                                                                     

  

 

阅读(2701) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~