100% found this document useful (1 vote)
231 views132 pages

Ims DB

The document discusses an introduction to IMS DB technology, including: 1. The course outline covers topics such as hierarchical data structures, DL/I terminology, and processing data in an IMS database. 2. Key concepts include segments, segment types, hierarchical relationships between segments, and sequential processing of database records. 3. The target audience is individuals who are new to IMS DB technology.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
231 views132 pages

Ims DB

The document discusses an introduction to IMS DB technology, including: 1. The course outline covers topics such as hierarchical data structures, DL/I terminology, and processing data in an IMS database. 2. Key concepts include segments, segment types, hierarchical relationships between segments, and sequential processing of database records. 3. The target audience is individuals who are new to IMS DB technology.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 132

IMS DB

Apr 3, 2002 IMS DB Page : 1/132


Objectives

To create awareness among trainees about the IMS DB


technology and how it is used to perform data base
operations.
The target audience consists of people who are new or
relatively new to the IMS DB Technology.

Apr 3, 2002 IMS DB Page : 2/132


Prerequisites

Knowledge of COBOL
Basic knowledge of data base management systems

Apr 3, 2002 IMS DB Page : 3/132


Course Outline

1. An Introduction to DL/I Data Bases


2. An Introduction to DL/I Programs and Control Blocks
3. COBOL Basics for Processing a DL/I Data Base
4. Using Segment Search Arguments
5. Retrieving Data from a Data Base
6. Adding and Updating Data in a Data Base
7. Secondary Indexing

Apr 3, 2002 IMS DB Page : 4/132


References

IMS for the COBOL Programmer


Part 1: Data base processing with IMS/VS and DL/I DOS/VS
By Steve Eckols
IBM IMS Primer
By Rick Long, Mark Harrington, Robert Hain, Geoff Nicholls

Apr 3, 2002 IMS DB Page : 5/132


Module 1
An Introduction to DL/I Data Bases

 Hierarchical Structures
 Why a Data Base Management System
 Basic DL/I Terminology
 Basic DL/I Data Base Processing

Apr 3, 2002 IMS DB Page : 6/132


Hierarchical Structures

In a DL/I data base, data elements are organized in a


hierarchical structure.
Some data elements are dependent on others.

Fig 1.1 A hierarchical structure

DL/I supports hierarchies that are difficult to


implement with standard files.

Apr 3, 2002 IMS DB Page : 7/132


Why a data base management system?

01 VENDOR-RECORD.
05 VR-VENDOR-CODE PIC X(3).
05 VR-VENDOR-NAME PIC X(30).
05 VR-VENDOR-ADDRESS PIC X(30).
05 VR-VENDOR-CITY PIC X(17).
05 VR-VENDOR-STATE PIC XX.
05 VR-VENDOR-ZIP-CODE PIC X(9).
05 VR-VENDOR-TELEPHONE PIC X(10).
05 VR-VENDOR-CONTACT PIC X(30).

Fig 1.2.a Record layout for the VENDORS data set

01 INVENTORY-RECORD.
05 IR-ITEM-KEY.
10 IR-VENDOR-CODE PIC X(3).
10 IR-NUMBER PIC X(5).
05 IR-DESCRIPTION PIC X(35).
05 IR-UNIT-PRICE PIC S9(5)V99 COMP-3.
05 IR-AVG-UNIT-COST PIC S9(5)V99 COMP-3.
05 IR-LOCATION-QUANTITY-DATA OCCURS 20 TIMES.
10 IR-LOCATION PIC X(3).
10 IR-QUANTITY-ON-HAND PIC S9(7) COMP-3.
10 IR-REORDER-POINT PIC S9(7) COMP-3.
10 IR-QUANTITY-ON-ORDER PIC S9(7) COMP-3.
10 IR-LAST-REORDER-DATE PIC X(6).

Fig 1.2.b Record layout for the Inventory Master data set

Fig 1.2 Record layouts that illustrate a hierarchical structure

Apr 3, 2002 IMS DB Page : 8/132


Basic DL/I Terminology

Segment
A grouping of data
The unit of data that DL/I transfers to and from your
program in an I/O operation.
Consists of one or more fields

ADDRESS
House Street City State Country Zip
Number Name Code

Fig 1.3 The ADDRESS segment with six fields

Segment Type
A category of data
There can be a maximum of 255 segment types and 15
levels in one data base
Segment Occurrence
One specific segment of a particular type containing user
data
Note:-
 Within a data base there is only one of each segment type- it’s part of
the data base’s definition- but there can be an unlimited number of
occurrences of each segment type.

 The word ‘segment’ is used to mean either ‘segment type’ or ‘segment


occurrence’ and usually the meaning is clear from the context
Apr 3, 2002 IMS DB Page : 9/132
Basic DL/I Terminology (contd.)

Vendor

Item

Stock Location

Fig 1.4 The hierarchical structure of the Inventory data base with three segment types
*
01 INVENTORY-VENDOR-SEGMENT.
05 IVS-VENDOR-CODE PIC X(3).
05 IVS-VENDOR-NAME PIC X(30).
05 IVS-VENDOR-ADDRESS PIC X(30).
05 IVS-VENDOR-CITY PIC X (17).
05 IVS-VENDOR-STATE PIC XX.
05 IVS-VENDOR-ZIP-CODE PIC X(9).
05 IVS-VENDOR-TELEPHONE PIC X(10).
05 IVS-VENDOR-CONTACT PIC X(30).
*
01 INVENTORY-ITEM-SEGMENT.
05 IIS-NUMBER PIC X(5).
05 IIS-DESCRIPTION PIC X(35).
05 IIS-UNIT-PRICE PIC S9(5)V99 COMP-3.
05 IIS-AVG-UNIT-COST PIC S9(5)V99 COMP-3.
*
01 INVENTORY-STOCK-LOC-SEGMENT.
05 ISLS-LOCATION PIC X(3).
05 ISLS-QUANTITY-ON-HAND PIC S9(7) COMP-3.
05 ISLS-REORDER-POINT PIC S9(7) COMP-3.
05 ISLS-QUANTITY-ON-ORDER PIC S9(7) COMP-3.
05 ISLS-LAST-REORDER-DAT PIC X(6).
*
Fig 1.5 Segment layouts for the Inventory data base

Apr 3, 2002 IMS DB Page : 10/132


Basic DL/I Terminology (contd.)

Root Segment
The segment type at the top of a hierarchy
Data base record
Each occurrence of the root segment plus all the segment
occurrences that are subordinate to it make up one data
base record
Every data base record has one and only one root
segment, although it may have any number of
subordinate segment occurrences
Vendor 1 Vendor 2

Item 1
Item 2
Data base
Record 2
Item 1

Loc 2
Loc 2
Data base Loc 1
Loc 1
Record 1

Loc 5
Loc 4
Loc 3
Loc 2

Loc 1 Fig 1.6 Two data base records from the Inventory data base

Apr 3, 2002 IMS DB Page : 11/132


Basic DL/I Terminology (contd.)

Dependent Segments
All of the segments in a data base record other than the
root segment
They depend on one or more segments for their complete
meaning
Parent Segment
A segment that has one or more dependent segments
Child Segment
Every dependent segment in the hierarchy
Twin Segment
Two or more segment occurrences of the same type and
with the same segment occurrence as their parent are
twins of one another
Path
The series of segments that lead from the top of a data
base record (the root segment occurrence) down to any
specific segment occurrence
Must be continuous- you can’t skip intermediate levels

Apr 3, 2002 IMS DB Page : 12/132


Basic DL/I Terminology (contd.)

Logical data bases


Although DL/I doesn’t support multiple parent
relationships in physical data bases, it does let you
define logical data bases (or create additional
relationships within one physical data base)

Customer

Ship-to
Vendor

Buyer Receivable Item

Stock
Payment Adjustment Line Item Location

Fig 1.7 A logical relationship can connect two data bases

In Fig 1.7, the line item segment is the logical child


segment (or just logical child) of the item segment.
Likewise, the item segment is the logical parent segment
(or just logical parent) of the line item segment

Apr 3, 2002 IMS DB Page : 13/132


Basic DL/I Data Base Processing

Sequential Processing
When you retrieve segments from a data base
sequentially, DL/I follows a predictable pattern: down the
hierarchy, then right.
Position
At any point, a program has a position in the data base.
Position can affect not only how segments are retrieved, but
how new segments are inserted as well

Vendor 1 Vendor 2

Item 1
Item 2
Data base
Record 2
Item 1

Loc 2
Loc 2
Data base Loc 1
Loc 1
Record 1

Loc 5
Loc 4
Loc 3
Loc 2
Loc 1
Fig 1.8 Sequential processing

Apr 3, 2002 IMS DB Page : 14/132


Basic DL/I Data Base Processing (contd.)

Random (Direct) Processing


Many applications require that a data base be processed
randomly rather than sequentially
Segments that you need to access randomly normally
contain a key field (or sequence field)
Concatenated Key
Completely identifies the path from the root segment to the
segment you want to retrieve.

Vendor 1 Vendor 2

Item 1
Item 2
Data base
Record 2
Item 1

Loc 2
Loc 2
Data base Loc 1
Loc 1
Record 1

Loc 5 Concatenated Key:


Vendor 2
Loc 4
Item 1
Loc 3 Location 1
Loc 2

Loc 1
Fig 1.9 Random Processing

Apr 3, 2002 IMS DB Page : 15/132


Module 2
An Introduction to DL/I Programs and
Control Blocks

 The IMS Software Environment


 How DL/I relates to your application programs
 Control Blocks
 DBDGEN
 PSBGEN
 How to run an application program that uses DL/I

Apr 3, 2002 IMS DB Page : 16/132


The IMS Software Environment

Application
Programs

IMS Control Remote


IMS DC
Blocks Terminal

DL/I

OS

Data
Base

Fig 2.1 The IMS Software Environment

Apr 3, 2002 IMS DB Page : 17/132


How DL/I relates to
your application programs
Standard File Processing DL/I Data Base Processing

Application Application
Program Program

DL/I

Operating System Operating System


Access Method Access Method

(eg. VSAM) (eg. VSAM)

File Data Base


Data Set Data Set
Fig 2.2 Standard file processing compared to DL/I data base processing

Apr 3, 2002 IMS DB Page : 18/132


How DL/I relates
to your application programs (contd.)

Standard file processing


Application programs issue standard COBOL statements
like READ and WRITE
These statements invoke the appropriate access method,
like VSAM to transfer data between records if necessary
The format of the record that is processed by your
program is the same as the format of the record on disk
DL/I data base processing
DL/I acts as an interface between an application program
and the access method
To perform an operation on a DL/I data base, a program
doesn’t issue a standard COBOL file I/O statement
Instead it executes a CALL statement to invoke DL/I
The parameters passed by the call tell DL/I what
operation to perform
Then, DL/I, not the application program, invokes the
access method
DL/I uses a standard access method- usually VSAM- to
store data base data on disk
In fact, the access method doesn’t know that a particular
data set contains a data base instead of a standard file
Format of records in a data base data set probably
doesn’t match the layouts of the segments that make up
the data base
As a result, the way the program sees the data base
differs from the way the access method sees it.

Apr 3, 2002 IMS DB Page : 19/132


Control Blocks

The physical structure of a DL/I data base isn’t


specified in application programs
Instead, DL/I uses a set of control blocks to define a
data base’s structure
In particular, DL/I uses two types of control blocks:
DBDs and PSBs
Data Base Description (DBD)
Describes the complete structure of a data base
An installation must create one DBD for each DL/I data
base
Program Specification Block (PSB)
Although each data base has a single physical structure
that is defined by a DBD, the application programs that
process it can have different views of it
These views, also called application data structures,
specify
The data bases (one or more) a program can access,
The data elements the program can “see” in those data
bases, and,
The processing the program can do.
This information is specified in a PSB
Although each application program can have its own
PSB, it is not uncommon for application programs that
have similar data base processing requirements to share
a PSB
Creating DL/I control blocks is the responsibility of a
Data Base Administrator (DBA)
Apr 3, 2002 IMS DB Page : 20/132
DBDGEN
STMT SOURCE STATEMENT
1 PRINT NOGEN
2 DBD NAME=INDBD,ACCESS=HIDAM
3 DATASET DD1=IN,DEVICE=3380
4 **/ 3380 DISK STORAGE
5 *
6 SEGM NAME=INVENSEG, PARENT=0,POINTER=TB,BYTES=131
7 LCHILD NAME=(INPXPNTR,INPXDBD),POINTER=INDX
8 FIELD NAME=(INVENCOD,SEQ),BYTES=3,START=1,TYPE=C
9 FIELD NAME=INVENNAM,BYTES=30,START=4,TYPE=C
10 FIELD NAME=INVENADR,BYTES=30,START=34,TYPE=C
11 FIELD NAME=INVENCIT,BYTES=17,START=64,TYPE=C
12 FIELD NAME=INVENSTA,BYTES=2,START=81,TYPE=C
13 FIELD NAME=INVENZIP,BYTES=9,START=83,TYPE=C
14 FIELD NAME=INVENTEL,BYTES=10,START=92,TYPE=C
15 FIELD NAME=INVENCON,BYTES=30,START=102,TYPE=C
16 *
17 SEGM NAME=INITMSEG,PARENT=INVENSEG,BYTES=48
18 FIELD NAME=(INITMNUM,SEQ),BYTES=5,START=1,TYPE=C
19 FIELD NAME=INITMDES,BYTES=35,START=6,TYPE=C
20 FIELD NAME=INITMPRC,BYTES=4,START=41,TYPE=P
21 FIELD NAME=INITMCST,BYTES=4,START=45,TYPE=P
22 *
23 SEGM NAME=INLOCSEG, PARENT=INITMSEG,BYTES=21
24 FIELD NAME=(INLOCLOC,SEQ),BYTES=3,START=1,TYPE=C
25 FIELD NAME=INLOCONH,BYTES=4,START=4,TYPE=P
26 FIELD NAME=INLOCROP,BYTES=4,START=8,TYPE=P
27 FIELD NAME=INLOCONO,BYTES=4,START=12,TYPE=P
28 FIELD NAME=INLOCDAT,BYTES=6,START=16,TYPE=C
29 *
30 DBDGEN
72 **/**************************************************************************
73 **/ RECOMMENDED VSAM DEFINE CLUSTER PARAMETERS
74 **/**************************************************************************
75 **/* *NOTE2
76 **/* DEFINE CLUSTER (NAME(IN) NONINDEXED -
77 **/* RECORDSIZE (2041,2041) -
78 **/* COUNTERINTERVALSIZE (2048))
79 **/* *NOTE2 - SHOULD SPECIFY DSNNAME FOR DD IN
80 **/**************************************************************************
162 **/***********SEQUENCE FIELD*************
211 **/***********SEQUENCE FIELD*************
236 **/***********SEQUENCE FIELD*************
325 FINISH
326 END Fig 2.3 Assembler source listing for the Inventory data base
DBDGEN
Apr 3, 2002 IMS DB Page : 21/132
DBDGEN (contd.)

Explanation of Fig 2.3


The first macro– DBD– identifies the data base
The DBD macro names the data base (NAME=INDBD) and
specifies the DL/I access method that will be used for it
(ACCESS=HIDAM)
The second macro, DATASET, identifies the file that will
contain the data base
In this case, its symbolic name will be IN (DD1=IN), and it
will reside on a 3380 disk unit (DEVICE=3380)
The symbolic name is used in the JCL to identify the data
set at execution time
Lines 72 through 80 are produced at assembly time and
give recommendations for the VSAM file that will contain
the inventory data base
The segment types are defined using the SEGM macro
The hierarchical relationships among the segments are
specified by coding the PARENT parameter on each
SEGM macro
PARENT= 0 or absence of PARENT parameter specifies root
segment
The POINTER parameter in the first SEGM macro and the
LCHILD macro that follows are required because the DBA
specified HIDAM in the DBD macro
DBA does not have to define each field in the segment,
because application programs identify fields within it in a
segment layout.
Only search fields need to be specified

Apr 3, 2002 IMS DB Page : 22/132


DBDGEN (contd.)

To define a field in the DBD, the DBA codes a FIELD macro,


which can contain the following parameters
NAME  name of the field (1 to 8 characters long)
START  position of field within segment
LENGTH  length of the field
TYPE  data type of the field

FIELD Macro TYPE Data Type


Codes
C Character
P Packed decimal
Z Zoned decimal
X Hexadecimal
H Half word Binary
F Full word Binary
Fig 2.4 FIELD macro TYPE parameter codes

The SEQ parameter is used to specify a sequence field


When occurrences of these segments are added to the data
base, they are added in sequence by values in these fields

Apr 3, 2002 IMS DB Page : 23/132


PSBGEN

STMT SOURCE STATEMENT


1 PRINT NOGEN
2 PCB TYPE=DB,DBDNAME=INDBD,PROCOPT=LS
3 SENSEG NAME=INVENSEG
4 SENSEG NAME=INITMSEG,PARENT=INVENSEG
5 SENSEG NAME=INLOCSEG,PARENT=INITMSEG
6 PSBGEN PSBNAME=INLOAD,LANG=COBOL
87 END

Fig 2.5 Assembler source listing for the Inventory data base load program’s PSBGEN

Explanation of Fig 2.5


The first macro in the PSBGEN job stream is PCB
PCB (Program Communication Block) describes one data
base.
A PSBGEN job contains one PCB macro for each data
base the application program can access.
The PSB in the figure is one for a program that accesses
a single data base with segment level sensitivity
Segment Level Sensitivity
The program’s access to parts of the data base is identified
at the segment level
Within the segments to which it is sensitive, the program has
access to all fields
A program can also have field level sensitivity
Within sensitive segments, only specific fields are identified
as sensitive fields
When the program accesses that segment, only sensitive
fields are presented

Apr 3, 2002 IMS DB Page : 24/132


PSBGEN (contd.)

The DBDNAME parameter on the PCB macro specifies the


name of the DBD for the data base to which the PCB
corresponds
The KEYLEN parameter specifies the length of the
longest concatenated key the program can process in the
data base
The PROCOPT parameter specifies the program’s
processing options
Indicate what processing the program is allowed to perform
on the data base
LS  The program can perform only load operations
Other values can authorize programs to retrieve, insert,
replace, and delete segments
This parameter can be used by the DBA to control access to
the database more selectively than is possible at the data
base level
For each PCB macro, subordinate SENSEG macros
identify the segments in the data base to which the
application program is sensitive
The names specified in the SENSEG macros must be
segment names from the DBDGEN for the data base named
in the DBDNAME parameter of the PCB macro

Apr 3, 2002 IMS DB Page : 25/132


PSBGEN (contd.)

All SENSEG macros for segments other than the root


segment must include the PARENT parameter
The last PSBGEN macro in the figure is PSBGEN
Indicates that there are no more statements in the PSBGEN
job
Its PSBNAME parameter specifies the name to be given to
the output PSB module
The LANG parameter specifies the language in which the
related application program will be written.

Apr 3, 2002 IMS DB Page : 26/132


How to run an
application program that uses DL/I

A batch program that processes a DL/I data base is not


run directly
Instead, the programmer supplies JCL to invoke the
DL/I ‘batch initialization module’, which in turn loads
the application program and the DL/I modules required
to service it.
Under IMS, the batch initialization module is
DFSRRC00
The program and DL/I modules execute together

Apr 3, 2002 IMS DB Page : 27/132


Module 3
COBOL Basics for Processing a
DL/I Data Base

 The ENTRY and GO BACK Statements


 The DL/I Call
 The PCB Mask

Apr 3, 2002 IMS DB Page : 28/132


The ENTRY and
GO BACK Statements

ENTRY ‘DLITCBL’ USING PCB-name1


[PCB-name2...]

Fig 3.1 Format of the DL/I ENTRY Statement

The application program is invoked under the control of the


batch initialization module
DL/I first loads the appropriate control blocks and modules,
then loads the application program and passes control to it
DLITCBL, which stands for ‘DL/I to COBOL’ is declared as the
entry point to the program by coding the ENTRY statement
When DL/I passes control to the program, it also supplies the
address of each PCB defined in the program’s PSB, in much
the same way as parameters are passed to a called
subprogram
Since these PCBs reside outside the program they must be
defined in the Linkage Section, just like passed parameters
would be defined in a subprogram
The Linkage Section definition of a PCB is called a ‘PCB
Mask’
Addressability to PCBs- that is, the way the programmer
relates PCB masks in your program’s Linkage Section to
actual PCBs in storage- is established by listing the PCB
Masks on the ENTRY statement

Apr 3, 2002 IMS DB Page : 29/132


The ENTRY and
GO BACK Statements (contd.)

Although the order in which the PCB Masks are coded in the
Linkage Section does not matter, you must list them on the
ENTRY statement in the same sequence as they appear in
your program’s PSBGEN
The GO BACK Statement
The ENTRY statement provides a mechanism for DL/I to transfer
control to your program
When your program ends, it must pass control back to the DL/I so
that DL/I can deallocate its resources and close your data base
data sets
To do that, you code a GO BACK statement, not a STOP RUN
statement
If you end a DL/I program with a STOP RUN statement, control
returns directly to the operating system; DL/I never has a chance
to perform its termination functions
So always use GO BACK rather than STOP RUN in your DL/I
programs

Apr 3, 2002 IMS DB Page : 30/132


The DL/I Call

CALL statements are used to request DL/I services


The parameters you code on the CALL statement
specify, among other things, the operation you want
DL/I to perform

CALL ‘CBLTDLI’ USING DLI-function


PCB-mask
segment-io-area
[segment-search-argument(s)]

Fig 3.2 Format of the DL/I call

CBLTDLI, which stands for ‘COBOL to DL/I’, is the


name of an interface module that is link edited with
your program’s object module.
If you work on PL/I, you would specify PLITDLI and for
assembler language, you would specify ASMTDLI

Apr 3, 2002 IMS DB Page : 31/132


The DL/I Call (contd.)

The DL/I Function


The first parameter coded on any DL/I call
For this parameter, you supply the name of a four
character working storage field that contains the code for
the function you want

01 DLI-FUNCTIONS.
05 DLI-GU PIC X(4) VALUE ‘GU ’.
05 DLI-GHU PIC X(4) VALUE ‘GHU ’.
05 DLI-GN PIC X(4) VALUE ‘GN ’.
05 DLI-GHN PIC X(4) VALUE ‘GHN ’.
05 DLI-GNP PIC X(4) VALUE ‘GNP ’.
05 DLI-GHNP PIC X(4) VALUE ‘GHNP’.
05 DLI-ISRT PIC X(4) VALUE ‘ISRT’.
05 DLI-DLET PIC X(4) VALUE ‘DLET’.
05 DLI-REPL PIC X(4) VALUE ‘REPL’.
05 DLI-CHKP PIC X(4) VALUE ‘CHKP’.
05 DLI-XRST PIC X(4) VALUE ‘XRST’.
05 DLI-PCB PIC X(4) VALUE ‘PCB ’.

Fig 3.3 DL/I function codes

For specifying the DL/I function, the programmer would


code one of the 05 level data names (like DLI-GN) in a DL/I
call, since COBOL doesn’t let you code literals on a CALL
statement

Apr 3, 2002 IMS DB Page : 32/132


The DL/I Call (contd.)

Get functions
The first six 05-level items in Fig 3.3 are get functions
They are used to retrieve segments from a DL/I data base
GU  ‘get unique’ function causes DL/I to retrieve a specific
segment occurrence based on field values that you specify.
GN  ‘get next’ function used to retrieve segment
occurrences in sequence
GNP  ‘get next within parent’ function lets you retrieve
segment occurrences in sequence, but only subordinate to
an established parent segment
The three get function codes that contain an H are ‘get hold
functions’ and are used to specify an intent to update a
segment after you retrieve it
GHU or the ‘get hold unique’ function corresponds to GU
GHN or the ‘get hold next’ function corresponds to GN
GHNP or the ‘get hold next within parent’ function
corresponds to GNP
Update functions
Used to change data in the data base
ISRT or the ‘insert’ function is used to add a new segment
occurrence to a data base– whether it be change an existing
data base or to load a new one
DLET or the ‘delete’ function is used to remove a segment
from a data base
REPL or the ‘replace’ function is used to replace a segment
occurrence

Apr 3, 2002 IMS DB Page : 33/132


The DL/I Call (contd.)

Other functions
Functions CHKP (the ‘checkpoint’ function) and XRST (the
‘restart’ function) are used in programs to take advantage of
IMS’s recovery and restart features
The last function code PCB is used in CICS programs

Apr 3, 2002 IMS DB Page : 34/132


The DL/I Call (contd.)

The PCB mask


The second parameter on the DL/I call
The name of the PCB mask defined in the program’s
Linkage Section
The ENTRY statement establishes a correspondence
between PCB masks in the Linkage Section and the PCBs
within the program’s PSB
So, when you code a particular PCB mask on a DL/I call,
you tell DL/I which data base to use for the operation you
are requesting
After each DL/I call, DL/I stores a status code in the PCB
mask, which the programmer can use to determine
whether the call succeeded or failed
Segment I/O Area
The third parameter on the DL/I call
The name of the working storage field into which DL/I will
return retrieved data or from which it will get data for an
update operation

Apr 3, 2002 IMS DB Page : 35/132


The DL/I Call (contd.)

Segment search arguments


Optional parameter on the DL/I call
An SSA identifies the segment occurrence you want to
access
Depending on the call you are issuing and the structure
of the data base, you may have to code several SSAs on a
single DL/I call
The structure of the SSAs can vary from simple to
complex
You can code as many SSAs as required
There are two kinds of SSAs– unqualified and qualified
An unqualified SSA
Supplies the name of the next segment type that you want to
operate on
For instance, if you issue a GN call with an unqualified SSA,
DL/I will return the next occurrence of the segment type you
specify
A qualified SSA
Combines a segment name with additional information that
specifies the segment occurrence to be processed
For example, a GU call with a qualified SSA might request a
particular occurrence of a named segment type by providing
a key value

Apr 3, 2002 IMS DB Page : 36/132


The PCB Mask

For each data base your program accesses, DL/I


maintains an area of storage called the program
communication block (PCB)
You define masks for those areas of storage in the
Linkage Section of your program
Then, after establishing the proper linkage to them at
the start of your program, you can evaluate data DL/I
stores there for information about the data bases your
program can process

01 INVENTORY-PCB-MASK.
05 IPCB-DBD-NAME PIC X(8).
05 IPCB-SEGMENT-LEVEL PIC XX.
05 IPCB-STATUS-CODE PIC XX.
05 IPCB-PROC-OPTIONS PIC X(4).
05 FILLER PIC S9(5) COMP.
05 IPCB-SEGMENT-NAME PIC X(8).
05 IPCB-KEY-LENGTH PIC S9(5) COMP.
05 IPCB-NUMB-SENS-SEGS PIC S9(5) COMP.
05 IPCB-KEY PIC X(11).

Fig 3.4 PCB mask for the Inventory data base

Apr 3, 2002 IMS DB Page : 37/132


The PCB Mask (contd.)

Data base name


The name of the data base being processed
Segment level
Specifies the current segment level in the data base
After a successful call, DL/I stores the level of the
segment just processed in this field
Status code
Contains the DL/I status code
When DL/I successfully completes the processing you
request in a call, it indicates that to your program by
moving spaces to the status code field in the PCB
On the other hand, if a call is unsuccessful or raises
some condition that isn’t normal, DL/I moves some non-
blank value to the status code field
It is good programming practice to evaluate the status
code after you issue a DL/I call
Processing options
Indicates the processing a program is allowed to do on
the data base
Segment name feedback area
The name of the segment is stored by DL/I in this field
after each DL/I call.

Apr 3, 2002 IMS DB Page : 38/132


The PCB Mask (contd.)

Key length feedback area


The field DL/I uses to report the length of the
concatenated key of the lowest level segment processed
during the previous call
Used with the key feedback area
Number of sensitive segments
Contains the number of SENSEG macros subordinate to
the PCB macro for this data base
Key feedback area
Varies in length from one PCB to another
As long as the longest possible concatenated key that
can be used with the program’s view of the data base
After a data base operation, DL/I returns the concatenated
key of he lowest level segment processed in this field,
and it returns the key’s length in the key length feedback
area

Apr 3, 2002 IMS DB Page : 39/132


Module 4
Segment Search Arguments

 Types of SSAs
 Basic Unqualified SSA
 Basic Qualified SSA
 Command Codes
 The Null Command Code
 Multiple Qualifications

Apr 3, 2002 IMS DB Page : 40/132


Types of SSAs

An SSA identifies the segment occurrence you want to


access
It can be either
Qualified, or,
Unqualified
An unqualified SSA simply names the type of segment
you want to use
A qualified SSA, on the other hand, specifies not only
the segment type, but also a specific occurrence of it.
Includes a field value DL/I uses to search for the segment
you request
Any field to which the program is sensitive to can be
used in an SSA
Because of the hierarchical structure DL/I uses, you
often have to specify several levels of SSAs to access
a segment at a low level in a data base
You can code as many SSAs on a single call as you
need
You can combine qualified and unqualified SSAs on a
single call

Apr 3, 2002 IMS DB Page : 41/132


Basic Unqualified SSA

01 UNQUALIFIED-SSA.
*
05 UNQUAL-SSA-SEGMENT-NAME PIC X(8).
05 FILLER PIC X VALUE SPACE.
*

Fig 4.1 A basic unqualified SSA

A basic unqualified SSA is 9 bytes long


The first eight bytes contain the name of the segment
you want to process
If the segment name is less than eight characters long,
you must pad it on the right with blanks
The ninth position of a basic unqualified SSA always
contains a blank
The DL/I uses the value in position 9 to decide what kind
of SSA you are providing

Apr 3, 2002 IMS DB Page : 42/132


Basic Unqualified SSA (contd.)

Unqualified SSA shown in Fig 4.1 was generalized


To access a particular segment type, you must modify the
segment name during program execution, by moving an
appropriate eight-character segment name to the field
UNQUAL-SSA-SEGMENT-NAME
For example,

MOVE ‘INVENSEG’ TO UNQUAL-SSA-SEGMENT-NAME

MOVE ‘INITMSEG’ TO UNQUAL-SSA-SEGMENT-NAME

Alternatively, you can code the segment name as a


literal when you define a qualified SSA
For example,

01 UNQUAL-VENDOR-SSA PIC X(9) VALUE ‘INVENSEG ’.


*
01 UNQUAL-ITEM-SSA PIC X(9) VALUE ‘INITMSEG ’.
*
01 UNQUAL-STOCK-LOC-SSA PIC X(9) VALUE ‘INVENSEG ’.

Apr 3, 2002 IMS DB Page : 43/132


Basic Qualified SSA

01 VENDOR-SSA.
*
05 FILLER PIC X(9) VALUE ‘INVENSEG(’.
05 FILLER PIC X(10) VALUE ‘INVENCOD =’.
05 VENDOR-SSA-CODE PIC X(3).
05 FILLER PIC X VALUE ‘)’.
*
Fig 4.2 A basic qualified SSA

A qualified SSA lets you specify a particular segment


occurrence based on a condition that a field within the
segment must meet
The first eight characters of a basic qualified SSA is
the eight character segment name
The ninth byte is a left parenthesis: (
Immediately following the left parenthesis in positions
10 through 17 is an eight character field name

Apr 3, 2002 IMS DB Page : 44/132


Basic Qualified SSA (contd.)

After the field name, in positions 18 and 19, you code a


two-character relational operator to indicate the kind
of checking DL/I should do on the field in the segment
The qualified SSA relational operators are shown below

Equal to EQ = =
Not equal to NE = =
Greater Than GT > >
Greater than or Equal to GE >= =>
Less Than LT < <
Less than or Equal to LE <= =<

 stands for a single blank space

After the relational operator, you code a variable field


into which you move the search value you want to use
for the call
The length of the search value field can vary
depending on the size of the field in the segment– it is
the only part of a basic qualified SSA that doesn’t have
a fixed length
The last character in the qualified SSA is a right
parenthesis: )

Apr 3, 2002 IMS DB Page : 45/132


Command Codes

Fig 4.3 Unqualified SSA format with a single command code

Fig 4.4 Qualified SSA format with a single command code

Command are used in SSAs for three purposes


To extend DL/I functionality
To simplify programs by reducing the number of DL/I
calls
For performance improvement resulting from the reduced
number of DL/I calls
Apr 3, 2002 IMS DB Page : 46/132
Command Codes (contd.)

To use command codes, code an asterisk in position 9


of the SSA
Then code your command codes starting from
position 10.
When DL/I finds an asterisk in position 9, it knows
command codes will follow
From position 10 onwards, DL/I considers all
characters to be command codes until it encounters a
space (for an unqualified SSA) or a left parenthesis
(for a qualified SSA)
It is unusual to use more than one command code in a
single SSA
A basic unqualified SSA with a single variable
command code is shown below

01 UNQUALIFIED-SSA.
*
05 UNQUAL-SSA-SEGMENT-NAME PIC X(8).
05 FILLER PIC X VALUE “*”.
05 UNQUAL-SSA-COMMAND-CODE PIC X.
05 FILLER PIC X VALUE SPACE.
*

Apr 3, 2002 IMS DB Page : 47/132


Command Codes (contd.)

Command Code Meaning


C Concatenated Key
D Path Call
F First Occurrence
L Last Occurrence
N Path Call Ignore
P Set Parentage
Q Enqueue Segment
U Maintain position at
this level
V Maintain position at
this and all superior
levels
– Null command codes

Fig 4.5 SSA Command Codes

Apr 3, 2002 IMS DB Page : 48/132


The Null Command Code

Value is a hyphen (–)


Although command code position is present, DL/I
ignores it
Particularly useful if you would like to use the same
SSA with and without command codes
An SSA with the null command code is shown below

01 UNQUALIFIED-SSA.
*
05 UNQUAL-SSA-SEGMENT-NAME PIC X(8).
05 FILLER PIC X VALUE “*”.
05 UNQUAL-SSA-COMMAND-CODE PIC X VALUE “-”.
05 FILLER PIC X VALUE SPACE.
*

Apr 3, 2002 IMS DB Page : 49/132


Multiple Qualifications

There are two cases in which you would use multiple


qualification
When you want to process a segment based on the
contents of two or more fields within it
When you want to process a segment based on a range
of possible values for a single field
To use multiple qualification, you connect two or more
qualification statements (a field name, a relational
operator, and a comparison value) within the
parentheses of the SSA.
To connect them, you use the Boolean operators AND
and OR
Either of the two symbols shown in the table below
may be used for AND or OR
The independent AND operator is used for special
operations with secondary indexes and will be
discussed later

Apr 3, 2002 IMS DB Page : 50/132


Multiple Qualifications (contd.)

01 VENDOR-SSA.
*
05 FILLER PIC X(9) VALUE ‘INVENSEG(’.
05 FILLER PIC X(10) VALUE ‘INVENCOD>=’.
05 VENDOR-SSA-LOW-CODE PIC X(3).
05 FILLER PIC X VALUE ‘&’.
05 FILLER PIC X(10) VALUE ‘INVENCOD<=’.
05 VENDOR-SSA-HIGH-CODE PIC X(3).
05 FILLER PIC X VALUE ‘)’.

The above SSA, which uses multiple qualifications can


be used to retrieve vendor segments whose vendor
codes fall within a certain range
The first qualification statement specifies that the vendor
code field must be greater than or equal to a particular
value; that is the low end of the range
The second qualification statement specifies that the
vendor code field must be less than or equal to a
particular value; that is the high end of the range
To retrieve segments that fall within this range, you
would first move values for low and high ends of the
range to VENDOR-SSA-LOW-CODE and VENDOR-SSA-HIGH-CODE
Then you would execute GN calls that include VENDOR-SSA

Apr 3, 2002 IMS DB Page : 51/132


Module 5
Retrieving Data from a Data Base

 The GU Call
 The GN Call
 The GNP Call
 Status Codes Expected during Sequential Processing
 Using Command Codes with Retrieval Calls
 Multiple Processing

Apr 3, 2002 IMS DB Page : 52/132


The GU Call

Used for random processing


Applications of random processing
When a relatively small number of updates are posted to
a large data base
To establish position in a data base for subsequent
sequential retrieval
You know what data you want to retrieve and you want
to get to it directly
Independent of the position established by the
previous calls

CALL ‘CBLTDLI’ USING DLI-GU


INVENTORY-PCB-MASK
INVENTORY-STOCK-LOC-SEGMENT
VENDOR-SSA
ITEM-SSA
STOCK-LOCATION-SSA.

A typical GU call like the one above, wherein a


complete set of qualified SSAs to retrieve a segment,
includes one for each level in the hierarchical path to
the segment you want to retrieve is called a ‘fully
qualified call’

Apr 3, 2002 IMS DB Page : 53/132


The GU Call (contd.)

Usually, GU processing is based on sequence (key)


fields with unique values
However, for some applications you may find it
necessary to either
Access a segment whose sequence field allows non-
unique values, or,
Access a segment based on a field that is not the
segment’s key field
In the above cases, DL/I returns the first segment
occurrence with the specified search value
Special considerations for GU calls without a full set of
qualified SSAs
1. When you use an unqualified SSA in a GU call, DL/I
accesses the first segment occurrence in the data base
that meets the criteria you specify
2. If you issue a GU call without any SSAs, DL/I returns the
first occurrence of the root segment in the data base
3. If you omit some SSAs for intermediate levels in a
hierarchical path, the action DL/I takes depends on your
current position and on the SSAs that are missing
DL/I either uses the established position or defaults to an
unqualified SSA for the segment
Recommended style of coding
Code a qualified or unqualified SSA for each level in the
path from the root segment to the segment you want to
retrieve

Apr 3, 2002 IMS DB Page : 54/132


The GU Call (contd.)

Status codes you can expect during random


processing with GU calls
Only two status code values need to be considered–
spaces and GE
Spaces means the call was successful and the requested
segment was returned in your program’s segment I/O
area
A GE status code indicates that DL/I couldn’t find a
segment that met the criteria you specified in the call

Apr 3, 2002 IMS DB Page : 55/132


The GN Call

CALL ‘CBLTDLI’ USING DLI-GN


INVENTORY-PCB-MASK
INVENTORY-STOCK-LOC-SEGMENT
STOCK-LOCATION-SSA.

Used for basic sequential processing


After any successful data base call, your data base
position is immediately before the next segment
occurrence in the normal hierarchical sequence
Before your program issues any calls, position is
before the root segment of the first data base record
The GN call moves forward through the data base from
the position established by the previous call
If a GN call is unqualified (that is, if it does not employ
an SSA), it returns the next segment occurrence in the
data base regardless of type, in hierarchical sequence
If a GN call includes SSAs– qualified or unqualified–
DL/I retrieves only segments that meet requirements of
all SSAs you specify
If you include an unqualified SSA or omit an SSA
altogether for a segment type, DL/I allows any
occurrence of that segment type to satisfy the call
But when you specify a qualified SSA, DL/I selects
only those segment occurrences that meet the criteria
you specify

Apr 3, 2002 IMS DB Page : 56/132


The GNP Call

CALL ‘CBLTDLI’ USING DLI-GNP


INVENTORY-PCB-MASK
INVENTORY-STOCK-LOC-SEGMENT
UNQUALIFIED-SSA.

Used for sequential processing within parentage


Works like the GN call, except it retrieves only
segments that are subordinate to the currently
established parent
To establish parentage, your program MUST issue
either a GU call or a GN call, and the call must be
successful
Parentage is never automatically established, in spite of
the hierarchical structure of the data base
The segment returned by the call becomes the
established parent
Subsequent GNP calls return only segment
occurrences that are dependent on that parent
When there are no more segments within the
established parentage DL/I returns GE as the status
code

Apr 3, 2002 IMS DB Page : 57/132


The GNP Call (contd.)
Vendor 1

Item 2

Established  Item 1
Parent

Loc 2

Loc 1

Established
Loc 5
Vendor 1  Parent
Loc 4
Loc 3
Loc 2 Item 2
Loc 1
Item 1

Loc 2

Loc 1
Fig 5.1 Sequential retrieval with GNP call

Loc 5
Loc 4
Loc 3
Loc 2

Loc 1

Apr 3, 2002 IMS DB Page : 58/132


Status Codes you can expect during
Sequential Processing

Apr 3, 2002 IMS DB Page : 59/132


Using Command Codes with Retrieval Calls

The F command code


When you issue a call with an SSA that includes the F
command code, the call processes the first occurrence of
the segment named by the SSA, subject to the call’s other
qualifications
Can be used when you are doing sequential processing
and you need to back up in the data base, or in other
words, the F command code can be used for sequential
retrieval using GN and GNP calls
Meaningless with GU calls, because GU normally
retrieves the first segment occurrence that meets the
criteria you specify
The L command code
When you issue a call with an SSA that includes the L
command code, the call processes the last occurrence of
the segment named by the SSA, subject to the call’s other
qualifications
The D command code
Used to retrieve more than one segment occurrence
using just one call
Normally DL/I operates on the lowest level segment you
specify in an SSA, but in many cases, you want data not
just from the lowest level in the call, but from other levels
as well
Makes it easy to retrieve an entire path of segments

Apr 3, 2002 IMS DB Page : 60/132


Using Command Codes with Retrieval Calls
(contd.)
The usage of the D command code is illustrated below

01 VENDOR-SSA.
05 FILLER PIC X(11) VALUE “INVENSEG*D(”.
05 FILLER PIC X(10) VALUE “INVENCOD =”.
05 VENDOR-SSA-CODE PIC X(3).
05 FILLER PIC X VALUE “)”.
*
01 ITEM-SSA.
05 FILLER PIC X(11) VALUE “INITMSEG*D(”.
05 FILLER PIC X(10) VALUE “INITMNUM =”.
05 ITEM-SSA-NUMBER PIC X(5).
05 FILLER PIC X VALUE “)”.
*
01 LOCATION-SSA.
05 FILLER PIC X(11) VALUE “INLOCSEG*D(”.
05 FILLER PIC X(10) VALUE “INLOCLOC =”.
05 LOCATION-SSA-CODE PIC X(3).
05 FILLER PIC X VALUE “)”.
*
01 PATH-CALL-I-O-AREA.
05 INVENTORY-VENDOR-SEGMENT PIC X(131).
05 INVENTORY-ITEM-SEGMENT PIC X(48).
05 INVENTORY-STOCK-LOC-SEGMENT PIC X(21).
*
. . .
*
CALL “CBLTDLI” USING DLI-GU
INVENTORY-PCB-MASK
PATH-CALL-I-O-AREA
VENDOR-SSA
ITEM-SSA
LOCATION-SSA.

Apr 3, 2002 IMS DB Page : 61/132


Using Command Codes with Retrieval Calls
(contd.)

The C command code


If you are developing a program that retrieves just lower-
level segment occurrences from a data base, you don’t
have to code separate SSAs for each level in the
hierarchical path
Instead you can use a single SSA with the C command
code
Then, rather than coding a field name, relational operator,
and search value, you specify the concatenated key for
the segment you are interested in
An illustration of the use of the C command code is
shown below

*
01 LOCATION-SSA.
*
05 FILLER PIC X(11) VALUE ‘INLOCSEG*C(‘.
05 LOCATION-SSA-VENDOR PIC X(3).
05 LOCATION-SSA-ITEM PIC X(5).
05 LOCATION-SSA-LOCATION PIC X(3).
05 FILLER PIC X VALUE ‘)’.
*
.
.
.
CALL ‘CBLTDLI’ USING DLI-GU
INVENTORY-PCB-MASK
INVENTORY-STOCK-LOC-SEGMENT
LOCATION-SSA.

Apr 3, 2002 IMS DB Page : 62/132


Using Command Codes with Retrieval Calls
(contd.)

The P command code


When you issue a GU or GN call, DL/I normally
establishes parentage at the lowest level segment that is
retrieved
However, if you want to override that and cause
parentage to be established at a higher-level segment in
the hierarchical path, you can use the P command code
in its SSA
The U command code
When you use an unqualified SSA that specifies the U
command code in a GN call, DL/I restricts the search for
the segment you request to dependents of the segments
with the U command code
Has the same effect as a call which contains a qualified
SSA for the current position
Is ignored if used with a qualified SSA
The V command code
Effect is same as coding the U command code at that
level and all levels above it in the hierarchy
Is ignored if used with a qualified SSA

Apr 3, 2002 IMS DB Page : 63/132


Using Command Codes with Retrieval Calls
(contd.)

The Q command code


This command code is used to enqueue, or reserve for
exclusive use, a segment or path of segments
You only need to use the Q command code in an
interactive environment where there is a chance that
another program might make a change to a segment
between the time you first access it and the time you are
finished with it

Apr 3, 2002 IMS DB Page : 64/132


Multiple Processing

Multiple processing is a general term that means a


program can have more than one position in a single
physical data base at the same time
DL/I lets the programmer implement multiple
processing in two ways
1. Through multiple PCBs
2. Through multiple positioning
Multiple PCBs
The DBA can define multiple PCBs for a single data base
Then, the program has two (or more) views of the data
base
As with PCBs for different data bases, each has its own
mask in the Linkage Section and is specified in the
ENTRY statement
It is up to the program’s logic to decide when to use a
particular PCB to access the data base
This method for implementing multiple processing,
though flexible, is inefficient because of the overhead
imposed by the extra PCBs

Apr 3, 2002 IMS DB Page : 65/132


Multiple Processing (contd.)

Multiple positioning
Lets a program maintain more than one position within a
data base using a single PCB
To do that, DL/I maintains a distinct position for each
hierarchical path the program processes
Most of the time, multiple positioning is used to access
segments of two or more types sequentially at the same
time
A1
Data base
Record 1

C13
C12 A2
B13
C11
B12
Data base
B11 Record 2

C22

B22 C21

B21

Fig 5.2 Two data base records to illustrate multiple positioning

Apr 3, 2002 IMS DB Page : 66/132


Multiple Processing (contd.)

MOVE ‘SEGB ’ TO UNQUAL-SSA-SEGMENT-NAME.


CALL ‘CBLTDLI’ USING DLI-GN
SAMPLE-DB-PCB
SEGMENT-B-I-O-AREA
UNQUALIFIED-SSA.

MOVE ‘SEGC ’ TO UNQUAL-SSA-SEGMENT-NAME.


CALL ‘CBLTDLI’ USING DLI-GN
SAMPLE-DB-PCB
SEGMENT-C-I-O-AREA
UNQUALIFIED-SSA.
When you use multiple positioning, DL/I maintains its
separate positions based on segment type
As a result you include an unqualified SSA in the call that
names the segment type whose position you want to use
It is the DBA who decides whether single or multiple
positioning will be in effect in the program’s PSB
As a result multiple positioning is not the characteristic
of the data base but instead, it’s how DL/I allows a
program to view a data base
The same program can be processed with either single or
multiple positioning by different programs
The technique a program uses is determined by the
program’s PSB

Apr 3, 2002 IMS DB Page : 67/132


Module 6
Adding and Updating Data
in a Data Base

 The ISRT Call


 The Get Hold Calls
 The REPL Call
 The DLET Call

Apr 3, 2002 IMS DB Page : 68/132


The ISRT Call

The ISRT call is used to add a segment occurrence to


a data base, either during update processing of an
existing data base or during load processing of a new
data base
Before an ISRT call is issued, you should first build
the segment occurrence by moving data to the fields
of the segment description
After formatting the segment, you issue the ISRT call
with at least one SSA: an unqualified SSA for the
segment type you want to add
Consider the example below

CALL ‘CBLTDLI’ USING DLI-ISRT


INVENTORY-PCB-MASK
INVENTORY-STOCK-LOC-SEGMENT
UNQUALIFIED-SSA.
Here UNQUALIFIED-SSA specifies the segment name
Because the SSA is unqualified, DL/I tries to satisfy
the call based on the current position in the data base
As a result, you need to be careful about position
when you issue an ISRT call that specifies only a
single unqualified SSA

Apr 3, 2002 IMS DB Page : 69/132


The ISRT Call (contd.)

A safer technique is to specify a qualified SSA for each


hierarchical level above the one where you want to
insert the segment, as illustrated below

CALL ‘CBLTDLI’ USING DLI-ISRT


INVENTORY-PCB-MASK
INVENTORY-STOCK-LOC-SEGMENT
VENDOR-SSA
ITEM-SSA
UNQUALIFIED-SSA.

If SSAs for vendor and item are initialized with the


proper key values, DL/I inserts the new segment
occurrence in the correct position in the data base
When you issue a fully qualified ISRT call like this, DL/I
returns a status code of GE if any segment occurrence
you specify in an SSA isn’t present in the data base
As a result, you can issue an ISRT call with qualified
SSAs instead of first issuing GU calls to find out if
higher-level segments in the path are present
By issuing one call instead of two (or more), you can
save system resources

Apr 3, 2002 IMS DB Page : 70/132


The ISRT Call (contd.)

Where inserted segments are stored


If the new segment has a unique sequence field, as most
segment types do, it is added in its proper sequential
position
However, some lower-level segment types in some data
bases have non-unique sequence fields or don’t have
sequence fields at all
When that’s the case, where the segment occurrence is
added depends on the rules the DBA specifies for the
data base
For a segment without a sequence field, the insert rule
determines how the new segment is positioned relative to
existing twin segments
If the rule is “first”, the new segment is added before any
existing twins
If the rule is “last”, the new segment is added after all
existing twins
If the rule is “here”, it is added at the current position
relative to existing twins, which may be first, last, or
anywhere in the middle
For a segment with non-unique sequence fields, the rules
are similar, but they determine where the new segment is
positioned relative to existing twin segments that have
the same key value

Apr 3, 2002 IMS DB Page : 71/132


The ISRT Call (contd.)

Status codes you can expect during insert processing


GE  When you use multiple SSAs and DL/I cannot
satisfy the call with the specified path
I I  When you try to add a segment occurrence that is
already present in the data base
For load processing you might get status codes LB, LC,
LD or LE.
In most cases they indicate that you are not inserting
segments in exact hierarchical sequence
That means there is an error in your program or the files
from which you are loading the data base contain incorrect
data

Apr 3, 2002 IMS DB Page : 72/132


The Get Hold Calls

There are three get hold functions you can specify in a


DL/I call:
1. GHU (Get hold unique)
2. GHN (Get hold next), and,
3. GHNP (Get hold next within parent)
These calls parallel the three retrieval calls earlier
discussed
Before you can replace or delete a segment, you must
declare your intent to do so, by retrieving the segment
with one of these three calls
Then you must issue the replace or delete call before
you do another DL/I processing in your program

Apr 3, 2002 IMS DB Page : 73/132


The REPL Call

After you have retrieved a segment with one of the get


hold calls, you can make changes to the data in that
segment, then issue an REPL call to replace the
original segment with the new data
There are two restrictions on the changes you can
make:
1. You can’t change the length of the segment
2. You can’t change the value of the sequence field (if the
segment has one)
Never code a qualified SSA on an REPL call: if you do,
the call will fail
An example of a typical replace operation is shown
below
CALL ‘CBLTDLI’ USING DLI-GHU
INVENTORY-PCB-MASK
INVENTORY-STOCK-LOC-SEGMENT
VENDOR-SSA
ITEM-SSA
LOCATION-SSA.
ADD TRANS-RECEIPT-QTY TO ISLS-QUANTITY-ON-HAND.
SUBTRACT TRANS-RECEIPT-QTY FROM ISLS-QUANTITY-ON-ORDER.
CALL ‘CBLTDLI’ USING DLI-REPL
INVENTORY-PCB-MASK
INVENTORY-STOCK-LOC-SEGMENT.

Apr 3, 2002 IMS DB Page : 74/132


The REPL Call (contd.)

Status codes you can expect during replace


processing
If you try to use a qualified SSA on an REPL call, you will
get an AJ status code
If your program issues a replace call without an
immediately preceding get hold call, DL/I returns a DJ
status code
If your program makes a change to the segment’s key
field before issuing the REPL call, DL/I returns a DA
status code

Apr 3, 2002 IMS DB Page : 75/132


The DLET Call

The DLET call works much like REPL


You must first issue a get hold call to indicate that you
intend to make a change to the segment you are
retrieving
Then you issue a DLET call to delete the segment
occurrence from the data base
For example, to delete a stock location that is no
longer active, you’d code a series of statements like
the ones below
CALL ‘CBLTDLI’ USING DLI-GHU
INVENTORY-PCB-MASK
INVENTORY-STOCK-LOC-SEGMENT
VENDOR-SSA
ITEM-SSA
LOCATION-SSA.
CALL ‘CBLTDLI’ USING DLI-DLET
INVENTORY-PCB-MASK
INVENTORY-STOCK-LOC-SEGMENT.
Notice that the DLET call does not include any SSAs
There is one important point you must keep in mind
whenever you use the DLET call– when you delete a
segment, you automatically delete all segment
occurrences subordinate to it
The status codes you might get after a DLET call are
the same as those you can get after an REPL call

Apr 3, 2002 IMS DB Page : 76/132


Module 7
Secondary Indexing

 The Need for Secondary Indexing


 A Customer Data Base
 Secondary Indexes
 Secondary Keys
 Secondary Data Structures
 DBDGEN Requirements for Secondary Indexes
 PSBGEN Requirements for Secondary Indexing
 Indexing a Segment based on a Dependent Segment
 The Independent AND Operator
 Sparse Sequencing
 Duplicate Data Fields

Apr 3, 2002 IMS DB Page : 77/132


The Need for Secondary Indexing

Often you need to be able to access a data base in an


order other than its primary hierarchical sequence
Or, you may need to access a segment in a data base
directly, without supplying its complete concatenated
key
With secondary indexing both are possible

Apr 3, 2002 IMS DB Page : 78/132


A Customer Data Base

Customer

Ship-to

Buyer Receivable

Payment Adjustment Line Item

Fig 7.1 The customer data base

Apr 3, 2002 IMS DB Page : 79/132


The Customer Data Base (contd.)

01 CUSTOMER-SEGMENT.
05 CS-CUSTOMER-NUMBER PIC X(6).
05 CS-CUSTOMER-NAME PIC X(31).
05 CS-ADDRESS-LINE-1 PIC X(31).
05 CS-ADDRESS-LINE-2 PIC X(31).
05 CS-CITY PIC X(18).
05 CS-STATE PIC XX.
05 CS-ZIP-CODE PIC X(9).
*
01 SHIP-TO-SEGMENT.
05 STS-SHIP-TO-SEQUENCE PIC XX.
05 STS-SHIP-TO-NAME PIC X(31).
05 STS-ADDRESS-LINE-1 PIC X(31).
05 STS-ADDRESS-LINE-2 PIC X(31).
05 STS-CITY PIC X(18).
05 STS-STATE PIC XX.
05 STS-ZIP-CODE PIC X(9).
*
01 BUYER-SEGMENT.
05 BS-BUYER-NAME PIC X(31).
05 BS-TITLE PIC X(31).
05 BS-TELEPHONE PIC X(10).
*
01 RECEIVABLE-SEGMENT.
05 RS-INVOICE-NUMBER PIC X(6).
05 RS-INVOICE-DATE PIC X(6).
05 RS-PO-NUMBER PIC X(25).
05 RS-PRODUCT-TOTAL PIC S9(5)V99COMP-3.
05 RS-CASH-DISCOUNT PIC S9(5)V99COMP-3.
05 RS-SALES-TAX PIC S9(5)V99COMP-3.
05 RS-FREIGHT PIC S9(5)V99COMP-3.
05 RS-BALANCE-DUE PIC S9(5)V99COMP-3.
*

Fig 7.2 Segment Layouts for the Customer Data Base (Part 1 of 2)

Apr 3, 2002 IMS DB Page : 80/132


The Customer Data Base (contd.)

01 PAYMENT-SEGMENT.
05 PS-CHECK-NUMBER PIC X(16).
05 PS-BANK-NUMBER PIC X(25).
05 PS-PAYMENT-DATE PIC X(6).
05 PS-PAYMENT-AMOUNT PIC S9(5)V99 COMP-3.
*
01 ADJUSTMENT-SEGMENT.
05 AS-REFERENCE-NUMBER PIC X(16).
05 AS-ADJUSTMENT-DATE PIC X(6).
05 AS-ADJUSTMENT-TYPE PIC X.
05 AS-ADJUSTMENT-AMOUNT PIC S9(5)V99 COMP-3.
*
01 LINE-ITEM-SEGMENT.
05 LIS-ITEM-KEY.
10 LIS-ITEM-KEY-VENDOR PIC X(3).
10 LIS-ITEM-KEY-NUMBER PIC X(3).
05 LIS-UNIT-PRICE PIC S9(5)V99 COMP-
3.
05 LIS-QUANTITY PIC S9(7) COMP-
3.
*

Fig 7.2 Segment Layouts for the Customer Data Base (Part 2 of 2)

Apr 3, 2002 IMS DB Page : 81/132


Secondary Indexes
Secondary Index
Data Base
Customer Data Base
Invoice number index data base
Prefix Data
Customer
Rec. Seg. Invoice Index
No. Pointer
Addr.
Segment

Ship-to

Index Target
Index Source
Segment
Segment

Buyer Receivable

Payment Adjustment Line Item

Indexed Data Base

Fig 7.3 Secondary Indexing Example in which the Index Source Segment and the Index
Target Segment are the same

Apr 3, 2002 IMS DB Page : 82/132


Secondary Indexes (contd.)

DL/I maintains the alternate sequence by storing


pointers to segments of the indexed data base in a
separate index data base
A secondary index data base has just one segment
type, called the index pointer segment
The index pointer segment contains two main
elements– a prefix element and a data element
The data element contains the key value from the
segment in the indexed data base over which the index
is built, called the index source segment
The prefix part of the index pointer segment contains a
pointer to the index target segment– the segment that
is accessible via the secondary index
The index source and target segments need not be the
same
After a secondary index has been set up, DL/I
maintains it automatically as changes are made to the
indexed data base– though the index is transparent to
application programs that use it
So, even if a program that is not sensitive to a secondary
index updates a data base record in a way that would
affect the index, DL/I automatically updates the index
That can also result in performance degradation

Apr 3, 2002 IMS DB Page : 83/132


Secondary Indexes (contd.)

If multiple access paths are required into the same


data base, the DBA can define as many different
secondary indexes as necessary– each stored in a
separate index data base
In practice, the number of secondary indexes for a given
data base is kept low because each imposes additional
processing overhead on DL/I

Apr 3, 2002 IMS DB Page : 84/132


Secondary Keys

The field in the index source segment over which the


secondary index is built is called the secondary key
The secondary key need not be the segment’s
sequence field– any field can be used as a secondary
key
Though usually, a single field within the index source
segment is designated as the secondary key for a
secondary index, the DBA can combine as many as
five fields in the source segment to form the complete
secondary key
These fields need not even lie adjacent to each other
Secondary key values do not have to be unique

Apr 3, 2002 IMS DB Page : 85/132


Secondary Data Structures

A secondary index changes the apparent hierarchical


structure of the data base
The index target segment is presented to your
program as if it were a root segment, even if it isn’t
actually the root segment
As a result, the hierarchical sequence of the segments
in the path from the index target segment to the root
segment is inverted: those segments appear to be
subordinate to the index target segment, even though
they are actually superior to it
The resulting rearrangement of the data base structure
is called a secondary data structure

Receivable

Ship-to Payment Adjustment Line Item

Customer Buyer
Fig 7.4 Secondary Data Structure for the Secondary Index
Apr 3, 2002 IMS DB Page : 86/132
Secondary Data Structures (contd.)

Secondary data structures don’t change the way the


data base segments are stored on disk
They just alter the way DL/I presents those segments to
application programs
When you code an application program that processes
a data base via a secondary index, you must consider
how the secondary data structure affects your
program’s logic

Apr 3, 2002 IMS DB Page : 87/132


DBDGEN Requirements for
Secondary Indexes

Because a secondary index relationship involves two


data bases, two DBDGENs are required– one for the
indexed data base and the other for the secondary
index data base

Fig 7.5 Partial DBDGEN output for the customer data base showing the code to
implement the secondary index

Apr 3, 2002 IMS DB Page : 88/132


DBDGEN Requirements for
Secondary Indexes (contd.)

Fig 7.6 DBDGEN output for the Secondary Index Data Base

In the DBDGEN for the indexed data base, an LCHILD macro


relates an index target segment to its associated secondary
index data base
In the DBDGEN for the secondary index data base, an LCHILD
macro relates the index pointer segment to the index target
segment

Apr 3, 2002 IMS DB Page : 89/132


DBDGEN Requirements for
Secondary Indexes (contd.)

ACCESS=INDEX in the DBD macro in Fig 7.6 tells DL/I


that an index data base is being defined
The INDEX parameter of the LCHILD macro in Fig 7.6
specifies the name of the secondary key field–
CRRECXNO
The XDFLD macro in Fig 7.5 supplies a field name
(CRRECXNO) that is used to access the data base via
the secondary key
This key field does not become a part of the segment
Instead, its value is derived from up to five fields defined
within the segment with FIELD macros
The SRCH parameter defines the field(s) that
constitute the secondary index

Apr 3, 2002 IMS DB Page : 90/132


PSBGEN Requirements for
Secondary Indexing

Just because a secondary index exists for a data base


doesn’t mean DL/I will automatically use it when one
of your programs issues calls for that data base
You need to be sure that the PSBGEN for the program
specifies the proper processing sequence for the data
base on the PROCSEQ parameter of the PSB macro
If it doesn’t, processing is done using the normal
hierarchical sequence for the data base
For the PROCSEQ parameter, the DBA codes the DBD
name for the secondary index data base that will be
used

Fig 7.7 PSBGEN Output

Apr 3, 2002 IMS DB Page : 91/132


PSBGEN Requirements for
Secondary Indexing (contd.)

The SENSEG macros in Fig 7.7 reflect the secondary


data structure imposed by the secondary index
When the PROCSEQ parameter is present, processing
is done based on the secondary index sequence
If a program needs to access the same indexed data
base using different processing sequences, the
program’s PSBGEN will contain more than one PCB
macro, each specifying a different value for the
PROCSEQ parameter

Apr 3, 2002 IMS DB Page : 92/132


Indexing a Segment
based on a Dependent Segment

Secondary Index Data Base


Customer Data Base
Invoice number index data base
Index Target Customer Prefix Data
Segment
Cust. Seg. Item Index
Addr. No. Pointer
Segment
Ship-to

Buyer Receivable

Index Source
Segment

Payment Adjustment Line Item

Indexed Data Base

Fig 7.8 Secondary Indexing Example in which the Index Source


Segment and the Index Target Segment are different

Apr 3, 2002 IMS DB Page : 93/132


Indexing a Segment
based on a Dependent Segment (contd.)

The Index Source Segment and the Index Target


Segment need not be the same
Some applications require that a particular segment be
indexed by a value that is derived from a dependent
segment
In such a case, the Index Target Segment and the Index
Source Segment are different
For example, in Fig 7.8, you can retrieve customers based
on items they have purchased
In other words, the SSA for a get call would specify an
item number, but the call would retrieve a customer
segment
The only restriction you need to be aware of here is
that the Index Source Segment must be a dependent of
the Index Target Segment
Thus, in the example shown in Fig 7.8, it wouldn’t be
possible to index the buyer segment based on values in
the line item segment, because the line item segment
isn’t dependent on the buyer segment
Similarly , you couldn’t index the line item segment based
in the customer segment, because the customer segment
is superior to the line item segment

Apr 3, 2002 IMS DB Page : 94/132


The Independent AND Operator

When used with secondary indexes, AND ( * or & ) is called


the dependent AND operator
The independent AND (#) lets you specify qualifications that
would be impossible with the dependent AND
This operator can be used only for secondary indexes where
the index source segment is a dependent of the index target
segment
Then, you can code an SSA with the independent AND to
specify that an occurrence of the target segment be
processed based on fields in two or more dependent source
segments
In contrast, a dependent AND requires that all fields you
specify in the SSA be in the same segment occurrence
An SSA that uses the independent AND operator is shown
below

01 ITEM-SELECTION-SSA.
*
05 FILLER PIC X(9) VALUE ‘CRCUSSEG(’.
05 FILLER PIC X(10) VALUE ‘CRLINXNO =’.
05 SSA-ITEM-KEY-1 PIC X(8).
05 FILLER PIC X VALUE ‘#’.
05 FILLER PIC X(10) VALUE ‘CRLINXNO =’.
05 SSA-ITEM-KEY-2 PIC X(8).
05 FILLER PIC X VALUE ‘)’.

Apr 3, 2002 IMS DB Page : 95/132


Sparse Sequencing

When the DBA implements a secondary index data


base with sparse sequencing (also called sparse
indexing), it is possible to omit some index source
segments from the index
Sparse sequencing can improve performance when
some occurrences of the index source segment must
be indexed but others need not be
DL/I uses a suppression value, a suppression routine,
or both to determine whether a segment should be
indexed (either when inserting a new segment or
processing an existing one)
If the value of the sequence field(s) in the index source
segment matches a suppression value specified by the
DBA, no index relationship is established (for an
insert) or expected (for any other call)
The DBA can also specify a suppression routine that
DL/I invokes to determine the index status for the
segment
The suppression routine is a user-written program that
evaluates the segment and determines whether or not
it should be indexed
Note:
When sparse indexing is used, its functions are handled
by DL/I
You don’t need to make special provisions for it in your
application program
Apr 3, 2002 IMS DB Page : 96/132
Duplicate Data Fields

For some applications, it might be desirable to store


user data from the index source segment in the index
pointer segment
When the DBA specifies that some fields are duplicate
data fields, this is possible
Up to five data fields can be stored in the index data
base, and DL/I maintains them automatically
Duplicate data fields are useful only when the index
data base is processed as a separate data base
Note:
Duplicate data fields impose extra DL/I overhead and
require extra DASD storage
It is the DBA’s responsibility to decide whether the
advantages of using duplicate data fields outweigh the
extra DL/I overhead and DASD storage requirements
mentioned above

Apr 3, 2002 IMS DB Page : 97/132


Module 8
Logical Data Bases

 Introduction to Logical Data Bases


 Logical Data Base Terminology
 DBDGENs for Logical Data Bases

Apr 3, 2002 IMS DB Page : 98/132


An Introduction to Logical Data Bases

Inter related databases.


A logical child segment having 2 parent segments.
One physical parent and one logical parent.

DB2

SEG-1
DB1

PP Physical
Parent

Logical
LP Parent
ons hip
al r elati
c
Logi
SEG-a SEG-b RLC

Real
Logical
Child
C2 VLC

Virtual
Logical
Child

Apr 3, 2002 IMS DB Page : 99/132


Logical Data Base Terminology

Real Logical Child


The child under consideration

Physical Parent
Original parent of the child

Logical Parent
The parent in the other data base

Virtual Logical Child


The child as seen from the other data base

Three types of Logical data bases


Unidirectional.
The child accesses logical parent’s data but the reverse is
not allowed.

Bi-directional virtual.
Accesses in both the directions, but the child exists only in
the physical DB.

Bi-directional physical.
Accesses in both the directions, but the child exists both in
the physical DB as well as the logical DB.

Apr 3, 2002 IMS DB Page : 100/132


DBDGENs for a Logical Data Base

******DBD1******
.
.
.
6 SEGM NAME=RLC,
7 PARENT=(PP,PTR), (LP,DBD2),
8 POINTER=(TWIN,LTWIN), RULES=(LLV,LAST),BYTES=16
9 FIELD NAME=********************************
10 FIELD NAME=********************************
.
.
.

******DBD2*******
.
.
.
6 SEGM NAME=LP, PARENT=SEG-1, BYTES=48
7 LCHILD NAME= (RLC,DBD1), POINTER=PTR, PAIR=VLC
8 FIELD NAME=********************************
9 FIELD NAME=********************************
10 FIELD NAME=********************************
.
.
.

Apr 3, 2002 IMS DB Page : 101/132


Module 9
Recovery and Restart

 Introduction to Data Base Recovery


 Introduction to Checkpointing
 Types of Checkpointing
 Extended Restart

Apr 3, 2002 IMS DB Page : 102/132


Introduction to Data Base Recovery

The process of recovering the data base in case of


application program failure
Back out changes made by the abended program,
correct the error and rerun the program.
Types of recoveries
Forward recovery
Backward recovery
Forward Recovery
Data base changes for a time period is accumulated
A copy of the data base is created
The changes are applied to this data base copy
DL/I uses change data stored in DL/I logs for forward
recovery
Used when a data base is physically damaged
Backward Recovery
Data base changes due to the failed program is reverted
directly in the data base
Program log records are read backwards and their effects
are reversed in the data base
When backout is complete data base is in the former
state that was before the failure
Normally applied when the program ends in a controlled
fashion and no data base damage

Apr 3, 2002 IMS DB Page : 103/132


Introduction to Checkpointing

Synonyms: synchronization point, sync point, commit


point and point of integrity
Program execution point at which the DB changes are
complete and accurate
DB changes made before the most recent checkpoint
are not reversed by recovery
Normally the start of the pgm is considered as a
default checkpoint
In case of a number of DB updates, explicit
checkpoints can be specified
Explicit checkpoints can be established using
checkpoint call(CHKP) inside the program
CHKP creates a checkpoint record on DL/I log which
prevents recovery before that point

Apr 3, 2002 IMS DB Page : 104/132


Types of Checkpointing

Types of checkpointing
Basic checkpointing
Symbolic checkpointing
Basic checkpointing
Simple form of checkpointing.
Issues checkpoint calls that the DL/I recovery utilities use
during recovery processing
Symbolic checkpointing
More advanced type of checkpointing
Used in combination with extended restart
Programs resume from the point following the
checkpoint, in case of a failure
Store program data and CHKP records and retrieve them
at the time of restart
Along with symbolic CHKP call you must use the XRST
(Extended Restart) call too.

Apr 3, 2002 IMS DB Page : 105/132


Extended Restart (XRST)

The XRST call is used in connection with the symbolic


checkpoint call
It is used to restart your program
The XRST call precedes a symbolic checkpoint call
The XRST call must be issued only once
It should be issued early in the execution of the
program
It must precede any CHKP call
The program is restarted from a symbolic CHKP taken
during a previous execution of the program
The CHKP used to perform the restart can be identified
by entering the checkpoint ID
CHKP ID can be specified in 2 ways
In the I/O area pointed to by the XRST call
Specifying ID in the CKPTID= field of EXEC statement in
the program's JCL

Apr 3, 2002 IMS DB Page : 106/132


Module 10
Advanced DL/I features

 Variable Length Segments


 DBD for GSAMs
 PCB for GSAMs

Apr 3, 2002 IMS DB Page : 107/132


Variable Length Segments

When a field length that is stored in a segment type


varies, for example Description or Explanatory text,
then we define those fields as variable length fields
The segment with such a field defined in it is called
Variable Length Segment
For description and explanatory fields if we define
them long enough to accommodate longest possible
text then lot of space is wasted in cases where it
contains shorter strings.
The SEGM macro in DBD is defined as
SEGM NAME=INVENSEG,PARENT=0,POINTER=TR,BYTES=m,n
m=maximum length of the segment + 2 bytes
n=minimum length of the segment + 2 bytes
The extra two bytes is used to store the length field of
the occurrence of the variable length segment
In Application Program :
The length field has to be included in the I-O Area for the
segment. Length PIC S 9(4)
The I-O area should be large enough to accommodate the
Maximum variable length segment + Length field
Before an ISRT / REPLACE / DELETE call is issued we
have to move the actual length to the length field in the
I/O area

Apr 3, 2002 IMS DB Page : 108/132


Variable Length Segments (contd.)

Variable Length Segments are appropriate when


segment occurrence length vary but once created and
made stabilized.

Disadvantage:

If the occurrence of the segment type grows in length


then Variable length segment will drop performance

When segment type occurrences grow in size then it


split's into 2 parts which are not stored in the same
physical record, so we require two I/O operations to fetch
the segment therefore the performance drops

Apr 3, 2002 IMS DB Page : 109/132


DBD for GSAMs

During DBD generation for a GSAM database we


should specify one dataset group
The DD name of the input dataset that is used when
the application retrieves data from the database
The DD name of the output dataset used when loading
the database.

The DBD for a GSAM is shown below


DBD NAME=CARDS,ACCESS=(GSAM,BSAM)
DATASET D1=ICARDS,DD2=OCARDS,RECFM=F,RECORD=80
DBDGEN
FINISH
END
In GSAM DBD's you can't specify
SEGM and FIELD statements
The use of logical or index relationships between
segments
IMS adds 2 bytes to the record length value specified
in the DBD in order to accommodate the ZZ field that is
needed to make up the BSAM RDW.

Apr 3, 2002 IMS DB Page : 110/132


DBD for GSAMs (contd.)

Whenever the database is GSAM/BSAM and the


records are variable (V or VB), IMS adds 2 bytes.

The record size of the GSAM database is 2 bytes


greater than the longest segment that is passed to IMS
by the application program.

A database if defined as GSAM has the advantage of


the usage of CHECKPOINT and RESTART

Disadvantage of GSAM database : Only inserts can be


done to the DB which is defined as GSAM, no delete
operation can be performed on GSAM Database.

Apr 3, 2002 IMS DB Page : 111/132


PCB for GSAMs

The PCB for a GSAM database is coded as shown


below
PCB TYPE=GSAM,DBDNAME=REPORT,PROCOPT=LS
The GSAM PCB statement must follow the PCB
statements with TYPE=TP or DB if any exist in the PSB
generation, the rule is:
TP PCBs First
DB PCBs Second
GSAM PCBs Last
A sample PSB is shown below
PCB TYPE=TP,NAME=OUTPUT1
PCB TYPE=DB,DBDNAME=PARTMSTR,PROCOPT=A,KEYLEN=100
SENSEG NAME=PARTMAST,PARENT=0,PROCOPT=A
SENSEG NAME=CPWS,PARENT=PARTMAST,PROCOPT=A
PCB TYPE=GSAM,DBDNAME=REPORT,PROCOPT=LS
PSBGEN LANG=COBOL,PSBNAME=APPLPGM3
END

Apr 3, 2002 IMS DB Page : 112/132


Module 11
DL/I Data Base Organizations

 DL/I Organizations & Access Methods


 Hierarchical Sequential Organization
 Hierarchical Direct Organization
 Additional IMS Access Methods

Apr 3, 2002 IMS DB Page : 113/132


DL/I Organization & Access Methods

File Organization is a description of how a file is


processed & access method is the software used to
implement that processing.
DL/I provides two basic data base organizations :
Hierarchic Sequential: In this the segments that make up
the database record are related to one another by their
physical locations.
Hierarchic Direct : In this the segment occurrences
include prefixes that contain direct pointers to related
segments.

Apr 3, 2002 IMS DB Page : 114/132


Hierarchic Sequential Organizations
Access Methods

HS Organizations provide four types of Access


Methods
HSAM ( Hierarchic Sequential Access Method) : The
program in HSAM database works through it sequentially
from beginning to end.The application programs cannot
replace or delete segments without copying the entire
database.
HISAM (Hierarchic Indexed Sequential Access Method): In
HISAM the data is stored with hierarchic sequential
organization. An index is also maintained to allow
random access to any database record.
SHSAM( Simple Hierarchical Sequential Access
Method):Similar to HSAM but used to support databases
that consist only of root segments.
SHISAM(Simple Hierarchic Indexed Sequential Access
Method ) : Similar to HISAM and used in cases in which
the database consist of only root segments.
SHSAM & SHISAM are used primarily for converting
standard files to DL/I data bases.

Apr 3, 2002 IMS DB Page : 115/132


Hierarchic Direct Organization
Access Method

HDAM ( Hierarchic Direct Access Method ):


HDAM stores root segment occurrences based on a
randomizing routine.
Occurrences of dependent segments are related to root
and one another by a system of pointers the HD
Organization is based upon.
HDAM databases are not appropriate for sequential
processing.
HIDAM (Hierarchic Indexed Direct Access Method) :
Segment data in HIDAM is stored in the same way like
that in HDAM.
In HIDAM, unlike HDAM root segment is located through
an index.
Root segments can be retrieved in sequence.

Apr 3, 2002 IMS DB Page : 116/132


Additional IMS Access Methods

GSAM( Generalized Sequential Access Methods):


GSAM lets application files to be treat OS sequential files
as databases.
Data is processed on a record to record to basis but
through DL/I calls.
Processing of database is sequential , ISRT add data only
at the end of database & REPL and DLET calls are not
supported.
They are typically used during conversion from a system
that uses standard files to one that uses data bases.
Since files are considered by IMS to be databases, IMS
recovery facilities can be used.
Fast Path data bases:
Fast Path data bases provides fast processing of simple
data structures.
Two types of Fast Path databases : MSDB(Main Storage
Data Base ) & DEDB( Data Entry Data Base ).
MSDB(Main Storage Data Base) :
It is used to store an application’s most intensively used
data and resides in virtual storage.
It provides fast access to data and it contains only a
small amount of data.
These are root-segment-only data bases.

Apr 3, 2002 IMS DB Page : 117/132


Additional IMS Access Methods (contd.)

DEDB( Data Entry Data Base ) :


DEBD is stored in a disk and has a hierarchical structure
They are organized in typical DL/I fashion, as direct
dependent segments types.
DEBDs use a complicated storage scheme that involves
separating the data base into as many as 240 areas and
this allows very large data bases

Apr 3, 2002 IMS DB Page : 118/132


ACB & ACBGEN

ACB(Application Control Blocks) : It is created by


merging and expanding PSBs and DBDs into an IMS
internal format when an application program is
scheduled for execution.
ACBGEN : The process of building ACB is called Block
Building and is done by means of ACBGEN.
IMS can build ACBs either dynamically or it can
prebuild them using ACB maintenance utility.
ACBs cannot be prebuilt for GSAM DBDs.
ACBs can be prebuild for PSBs that reference GSAM
databases.
ACBs save instruction, execution and direct-access
wait time and improves performance in application
scheduling.
ACBs are maintained in IMS.ACBLIB library.

Apr 3, 2002 IMS DB Page : 119/132


Sample JCL

//JOBNAME JOB (ACCT),'PGMR NAME',


// CLASS=J,
// MSGCLASS=Z,
// NOTIFY=&SYSUID
//JOBLIB DD DSN=YOUR.PROGRAM.LOAD.LIBRARY,
// DISP=SHR
// DD DSN=YOUR.SYSTEM.RESLIB.LIBRARY,
// DISP=SHR
//PROC EXEC PROCNAME, SYMBOLIC PARAMETERS
//****************************************************************
//PROCNAME PROC
//****************************************************************
//* THIS STEP LOADS INTO AN IMS VSAM DATABASE
//* A COBOL PROGRAM 'LOAD' IS USED FOR THIS
//*PURPOSE
//* THE PSB USED FOR LOADING IS LOADPSB
//****************************************************************
//LOAD EXEC PGM=DFSRRC00,
// PARM='DLI,LOAD,LOADPSB'
//*
//DFSRESLB DD DSN=YOUR.DFRESLIB.LIBRARY,
// DISP=SHR
//IMS DD DSN=YOUR.DBD.LIBRARY,
// DISP=SHR
// DD DSN=YOUR.PSB.LIBRARY,
// DISP=SHR
//*

Apr 3, 2002 IMS DB Page : 120/132


Sample JCL (contd.)

//IMSLOGR DD DSN=YOUR.IMSRLOG.DATASET,
// DISP=SHR
//*
//IEFRDER DD DSN=YOUR.IEFRDER.DATASET,
// DISP=(,DELETE,DELETE),UNIT=&UNITDA,
// CB=(RECFM=&RECFM,LRECL=&LRECL,
// BLKSIZE=&BLKSIZE), SPACE=&SPACE
//*
//* DD NAMES ARE AS SPECIFIED IN THE DATABASE
//* DBD
//DATA DD DSN=VSAMDB.DATA.PART,DISP=SHR
//INDEX DD DSN=VSAMDB.INDEX.PART,DISP=SHR
//*
//INPUT DD DSN=FILE.USED.FOR.LOADING,
// DISP=SHR
//DFSVSAMP DD DSN=IMSVS.PROCLIB(DFSVSAMP),
// DISP=SHR
//CPXMOPTS DD DSN=PARMLIB.LIBRARY(LOAD),
// DISP=SHR
//CPXMRPTS DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//IMSERR DD SYSOUT=*
//IMSPRINT DD SYSOUT=*

Apr 3, 2002 IMS DB Page : 121/132


Module 12
Miscellaneous Topics

 Data base image copy


 Path Call
 IMS Processing Options
 IMS Status Codes
 IMS Abends
 Key, search and concatenated key
fields

Apr 3, 2002 IMS DB Page : 122/132


Data Base Image Copy

Job which is run to take backup copies of IMS


database datasets at periodic intervals
Traditionally, batch cycle starts at 7 pm and ends at 7 am
Image Copy jobs are usually run before and after a batch
cycle
If abend occurs, revert to the DB generated by image
copy job and rerun
Commonly used image copy utility is BMC Software’s
ICPUMAIN
Database and Image copy DD names specified in the
ICPSYSIN card
Advantage : Simple, Fast, Automated procedure

Apr 3, 2002 IMS DB Page : 123/132


Path Call

A DB call with an SSA that includes the 'D' Command


code is a "PATH CALL“ . It’s a facility where in we can
retrieve an entire path of the segment
Consider a sample GU call
CALL 'CBLTDLI' USING DLI-GU
INVEN-PCB-MASK
INVEN-STOCK-LOC-SEG
VENDOR-SSA
ITEM-SSA
STOCK-LOC-SSA
Normally, DL/I operates on the lowest level segment
that is specified in an SSA(STOCK-LOC-SSA in the
above E.g.)
In case if we need data from not just from the lowest
level but from other levels as well we normally have to
give 3 separate GU calls.This will reduce the efficiency
of the program
Such a call operates on two or more segments rather
than just one segment.
If a program has to use "Path call" then "P" should be
one of the values specified in the PROCOPT
parameter of the PCB in the programs PSBGEN.
If path call is not explicitly enabled in the PSBGEN job
there will be an 'AM' status code.

Apr 3, 2002 IMS DB Page : 124/132


Sample Program

IDENTIFICATION DIVISION.
PROGRAM-ID. PATGET2.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-370.
OBJECT-COMPUTER. IBM-370.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.

77 TOP-PAGE PIC X VALUE '1'.


77 GET-UNIQUE PIC X(4) VALUE 'GU'.

01 HOSPITAL-SSA.
05 FILLER PIC X(19) VALUE 'HOSPITAL(HOSPNAME ='.
05 HOSPNAME-SSA PIC X(20).
05 FILLER PIC X VALUE ')'.
01 WARD-SSA.
05 FILLER PIC X(19) VALUE 'WARD (WARDNO ='.
05 WARDNO-SSA PIC X(04).
05 FILLER PIC X VALUE ')'.
01 PATIENT-SSA.
05 FILLER PIC X(19) VALUE 'PATIENT (PATNAME ='.
05 PATNAME-SS PIC X(20).
05 FILLER PIC X VALUE ')'.
01 UNQUAL-HOSPITAL-SSA PIC X(9) VALUE 'HOSPITAL '.
01 UNQUAL-WARD-SSA PIC X(9) VALUE 'WARD '.
01 UNQUAL-PATIENT-SSA PIC X(9) VALUE 'PATIENT '.
01 WS-ISRT PIC X(4) VALUE 'ISRT'.
01 WS-GHU PIC X(4) VALUE 'GHU '.
01 HOSP-I-O-AREA.
05 HOSP-NAME PIC X(20).
05 HOSP-ADDRESS PIC X(30).
05 HOSP-PHONE PIC X(10).
01 Ward-I-O-AREA.
03 WARD-NO PIC X(04).
03 TOT-ROOMS PIC 9(03).
03 TOT-BEDS PIC XXX.
03 BEDAVAIL PIC X(3).
03 WARD-TYPE PIC X(20).

Apr 3, 2002 IMS DB Page : 125/132


Sample Program (contd.)

01 PATIENT-I-O-AREA.
03 PATIENT-NAME PIC X(20).
03 PATIENT-ADDRESS PIC X(30).
03 PATIENT-PHONE PIC X(10).
03 BEDINDENT PIC X(4).
03 DATEADMT PIC X(8).
03 PREV-STAY-FLAG PIC X.
LINKAGE SECTION.
01 PCB-MASK.
02 DBD-NAME-1 PIC X(8).
02 SEG-LEVEL-1 PIC XX.
02 STATUS-CODE-1 PIC XX.
02 PROCESS-OPTIONS-1 PIC X(4).
02 KEY-LENGTH PIC S9(5) COMP.
02 SEG-NAME-FDBK-1 PIC X(8).
02 LENGTH-FB-KEY-1 PIC S9(5) COMP.
02 NUMB-SENS-SEGS-1 PIC S9(5) COMP.
02 KEY-FB-AREA-1 PIC X(26).

PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING PCB-MASK.
PERFORM INSERT-HOSP-PARA THRU INSERT-HOSP-EXIT.
PERFORM INSERT-WARD-01-PARA THRU

INSERT-WARD-01-EXIT.
PERFORM INSERT-PATIENTS-PARA THRU

INSERT-PATIENTS-EXIT.
GOBACK.
INSERT-HOSP-PARA.
MOVE 'MACNEAL ' TO HOSP-NAME.
MOVE 'ABC DDDD' TO HOSP-ADDRESS.
MOVE '12345' TO HOSP-PHONE.
CALL 'CBLTDLI' USING WS-ISRT
PCB-MASK
HOSP-I-O-AREA
UNQUAL-HOSPITAL-SSA.

Apr 3, 2002 IMS DB Page : 126/132


Sample Program (contd.)

IF STATUS-CODE-1 NOT EQUAL SPACES


EXIT.
INSERT-HOSP-EXIT.
EXIT.
INSERT-WARD-01-PARA.
MOVE '01' TO WARD-NO.
MOVE 10 TO TOT-ROOMS.
MOVE 20 TO TOT-BEDS.
MOVE '03' TO BEDAVAIL
MOVE 'INTENSIVE' TO WARD-TYPE.
CALL 'CBLTDLI' USING WS-ISRT
PCB-MASK
WARD-I-O-AREA
UNQUAL-HOSPITAL-SSA
UNQUAL-WARD-SSA.
IF STATUS-CODE-1 NOT EQUAL SPACES
EXIT.
INSERT-WARD-01-EXIT.
EXIT.
INSERT-PATIENTS-PARA.
MOVE 'MACNEAL' TO WARDNO-SSA.
MOVE 'JOHN SMITH' TO PATIENT-NAME.
MOVE '123 HAMILTON STR' TO PATIENT-ADDRESS.
MOVE '12345 ' TO PATIENT-PHONE.
MOVE '1111' TO BEDINDENT.
MOVE '02021999' TO DATEADMT.
MOVE 'N' TO PREV-STAY-FLAG.
CALL 'CBLTDLI' USING WS-ISRT
PCB-MASK
PATIENT-I-O-AREA
HOSPITAL-SSA
WARD-SSA
UNQUAL-PATIENT-SSA.

IF STATUS-CODE-1 NOT EQUAL SPACES


EXIT.

INSERT-PATIENTS-EXIT.
EXIT.

Apr 3, 2002 IMS DB Page : 127/132


IMS Processing Options

Indicates to IMS the type of access allowed for a


sensitive segment (SENSEG)
Commonly used Processing Options
PROCOPT=G means only read only access
PROCOPT=R means read/replace access
PROCOPT=I means insert access allowed
PROCOPT=D means Read/Delete access
PROCOPT=A means all the above options present
For GSAM DBs PROCOPT=LS for output and GS (Get
Sequential) for input
PROCOPT=L allows a 'load' into the DB. If VSAM DB, it
should be empty prior to the load
The PROCOPT given for a Sensitive segment would
override the one given for the DB
Example : -
PCB
TYPE=DB,NAME=LDB42F,PROCOPT=G,KEYLEN=200
SENSEG NAME=SEGL4201,PARENT=0,PROCOPT=A
WARNING : Indiscriminate use of PROCOPTS might lead
to inexplicable results !

Apr 3, 2002 IMS DB Page : 128/132


IMS Status Codes

Returned by IMS after each DB call


Field STATUS-CODE X(02) in the PCB-MASK definition
Acceptable and unacceptable status codes
‘GE’ – record occurrence not found
‘GB’ – End of DB reached

Status codes relate to the type of IMS call

DLET – AB, AJ, DJ


AB – I/O area not specified in the call
AJ – Invalid SSA format (invalid command code etc)
DJ – Segment not in ‘HOLD’ status

GHN, GHNP, GHU, GU – AB, AK, GE, GB


AK – Invalid field name in SSA

ISRT – AB, AC, AD, AJ, AK, II


AC – Segment not found
AD – Wrong PCB used
II -- Segment occurrence already exists in the DB

REPL -- AB, AC, AD, DJ

Apr 3, 2002 IMS DB Page : 129/132


IMS Abends

U0456 -- PSB stopped


U0456 -- IMS Compile option ‘DLITCBL’ not set to ‘Y’
U0458 -- DB Stopped
U0844 -- DB being updated is full
S013 -- Error opening the DB

A few tips on resolving IMS abends:


Confirm that the Abend is caused by IMS – check the
joblog for IMS return code
Check the JCL – if modified from another JCL, verify
that changes are correct
Check the SYSOUT dump for IMS diagnostic
messages
Use MVS/QW to get further information on the abend

Apr 3, 2002 IMS DB Page : 130/132


Key, Search and Concatenated Key Fields

Key or Sequence Field


The field DLI uses to maintain segments in ascending
sequence
Only a single field within a segment
Segments need not necessarily require a key field
If in a root segment, key field uniquely identifies the
record

Additional Search fields


Used to search through the DB for particular values
Max 255 search fields in a segment

Concatenated field
Key formed to access a particular segment
Concatenation of keys of root segment and all successive
children down to the accessed segment

Undefined fields
Fields not defined to IMS
Format determined by the program loading the DB

Apr 3, 2002 IMS DB Page : 131/132


Thank You

Apr 3, 2002 IMS DB Page : 132/132

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy