IMS控制块定义IMS数据库的结构以及程序对它们的访问.下图显示了IMS控制块的结构.
DL/I使用以下三种类型的控制块 :
数据库描述符(DBD)
程序规范块(PSB)
访问控制块(ACB)
注意事项和减号;
DBD描述了完整的物理结构数据库一旦定义了所有段.
安装DL/I数据库时,必须创建一个DBD,因为它需要访问IMS数据库.
应用程序可以使用DBD的不同视图.它们被称为应用程序数据结构,它们在程序规范块中指定.
数据库管理员通过编码 DBDGEN 创建DBD控制语句.
DBDGEN是数据库描述符生成器.创建控制块是数据库管理员的责任.所有加载模块都存储在IMS库中.汇编语言宏语句用于创建控制块.下面是一个示例代码,显示如何使用DBDGEN控制语句创建DBD :
PRINT NOGEN DBD NAME=LIBRARY,ACCESS=HIDAM DATASET DD1=LIB,DEVICE=3380 SEGM NAME=LIBSEG,PARENT=0,BYTES=10 FIELD NAME=(LIBRARY,SEQ,U),BYTES=10,START=1,TYPE=C SEGM NAME=BOOKSEG,PARENT=LIBSEG,BYTES=5 FIELD NAME=(BOOKS,SEQ,U),BYTES=10,START=1,TYPE=C SEGM NAME=MAGSEG,PARENT=LIBSEG,BYTES=9 FIELD NAME=(MAGZINES,SEQ),BYTES=8,START=1,TYPE=C DBDGEN FINISH END
让我们理解上面DBDGEN中使用的术语 :
当您在 JCL 中执行上述控制语句时,它会创建一个物理结构,其中LIBRARY是根段,BOOKS和MAGZINES是其子段.
第一个DBD宏语句标识数据库.在这里,我们需要提及DL/I用来访问该数据库的NAME和ACCESS.
第二个DATASET宏语句标识包含的文件数据库.
使用SEGM宏语句定义段类型.我们需要指定该段的PARENT.如果它是根段,则提及PARENT = 0.
下表显示了FIELD宏语句中使用的参数 :
S.No | 参数&描述 |
---|---|
1 | Name 字段名称,通常为1到8个字符 |
2 | Bytes 字段长度 |
3 | Start 段内字段的位置 |
4 | Type 字段的数据类型 |
5 | Type C 字符数据类型 |
6 | Type P 打包的十进制数据类型 |
7 | Type Z 分区十进制数据类型 |
8 | Type X 十六进制数据类型 |
9 | Type H 半字二进制数据类型 |
10 | Type F 全字二进制数据类型 |
PSB的基本原理如下:
数据库具有由DBD定义的单个物理结构,但处理它的应用程序可以具有不同的数据库视图.这些视图称为应用程序数据结构,在PSB中定义.
任何程序在一次执行中都不能使用多个PSB.
应用程序有自己的PSB,对于具有类似数据库处理要求的应用程序来说,共享PSB很常见.
PSB由一个或多个称为程序通信块(PCB)的控制块组成. PSB包含应用程序将访问的每个DL/I数据库的一个PCB.我们将在即将发布的模块中讨论有关PCB的更多信息.
必须执行PSBGEN才能为程序创建PSB.
PSBGEN称为程序规范块生成器.以下示例使用PSBGEN创建PSB :
PRINT NOGEN PCB TYPE=DB,DBDNAME=LIBRARY,KEYLEN=10,PROCOPT=LS SENSEG NAME=LIBSEG SENSEG NAME=BOOKSEG,PARENT=LIBSEG SENSEG NAME=MAGSEG,PARENT=LIBSEG PSBGEN PSBNAME=LIBPSB,LANG=COBOL END
让我们了解上述DBDGEN中使用的术语 :
第一个宏语句是程序通信块(PCB),它描述了数据库的类型,名称,键长和处理选项.
PCB宏上的DBDNAME参数指定DBD的名称. KEYLEN指定最长连锁密钥的长度.该程序可以在数据库中处理. PROCOPT参数指定程序的处理选项.例如,LS仅表示LOAD操作.
SENSEG称为段级灵敏度.它定义了程序对数据库部分的访问权限,并在段级别进行标识.该程序可以访问敏感段所在的所有字段.程序还可以具有场级灵敏度.在此,我们定义段名称和段的父名称.
最后一个宏语句是PCBGEN. PSBGEN是最后一条声明,它没有更多的声明要处理. PSBNAME定义给输出PSB模块的名称. LANG参数指定编写应用程序的语言,例如COBOL.
下面列出了关于访问控制块和减号的注意事项;
访问控制块对于应用程序,将数据库描述符和程序规范块组合成可执行的形式.
ACBGEN称为访问控制块生成器.它用于生成ACB.
对于在线程序,我们需要预先构建ACB.因此,在执行应用程序之前执行ACBGEN实用程序.
对于批处理程序,也可以在执行时生成ACB.