Tuesday, March 27, 2007
Review Topic: IMS basics
I’ve had experience with IMS twice in my career. Once was from 1979-1981 with the Blue Cross / Blue Shield Combined Medicare Project in Dallas, where I designed a back end statistical reporting system that would have to harvest medical information from a claims database in IMS. I would code the requirements on “Pride-Logik” forms, and a DBA would design the IMS retrieval methods and control blocks.
Later, in 1998 I implemented a National Change of Address system which had to communicate with a mainframe customer management system name-address database then in IMS. Actually, the database was accessed through a meta-language provided by Computer Sciences Corporation, so we did not have to be very concerned with IMS blocks much, although I remember one time there was a controversy over how generic to make the access, and there were certain difficulties in getting the PSB’s to work in the test regions. In 1999, we would convert to DB2.
Back in the early to mid 1980s, IMS and CICS was very much the preferred mix that headhunters looked for in mainframe programmers (at least in Dallas). That would change gradually throughout the 90s.
Relatively few shops compared to the universe use IMS today. Therefore, sometimes companies will scour the country looking for an IMS guru when they need one, especially someone with IMS-DC, which in the early 1980s had been a credible competitor with CICS as a teleprocessing monitor.
Nevertheless, sometimes candidates who have IMS on their resumes might get a few general questions in telephone interviews, so here are a few concepts.
A DL/I program in batch is executed by JCL whose EXEC actually says something like PGM=DFSRRC00,PARM=’DLI,BMPR165M’ where BMPR165M is the actual COBOL program. The LINKAGE SECTION of the COBOL program contains the Program Control Block masks. The PROCEDURE DIVISION has an ENTRY to ‘DLITCBL’ and then later makes calls to ‘CBLTDLI’ with arguments that include the PCB mask, SSA (sequential search argument), and retrieval area.
A DBDGEN is setup by the DBA to describe the physical database. The PSBGEN sets up Program Specification Blocks that will live in a PSB Library. Each PSB has PCB’s, or Program Control Clocks, that typically name the hierarchal database segments to which the program is “sensitive”, and sensitivity can even be defined at the individual field level. Some typical DLI calls include GU (Get Unique), GHU (Get Hold Unique), GNP (Get Next Within Parent) and many others (DLET, ISRT, REPL). SSA’s can have command codes, that can accomplish things like path calls and establishing parentage.
A good textbook is still “IMS Programming Techniques” by Dan Kapp and Joseph F. Leben, Van Nostrand Reinhold, 1978.
I have an earlier posting about my experience with IMS here (Nov 2006).