Let's say a customer executing one of the products encounters an abend. How do you determine what maintenance has been applied to the load module? In this article, we introduce CAMODID (a purpose-built tool) and expand on the existing Technical Document, TEC481994, which identifies a number of manual methods to determine what maintenance has been applied. In these examples, we have encountered an abend in PDTDIIC0 and are specifically looking to see if PTF RO95038 has been applied.
The following methods are described:
- CA Load Module Service Analyzer
- SMP/E Query
- Either of AMASPZAP or AMBLIST utilities to dump load module information
- ISPF Search-For to scan a load library
- ISPF Browse to inspect a load module
Additionally, the differences between a GA IR and a GA Complete PAX file are covered:
- What is the difference between a GA IR and a GA Complete PAX file?
Background
When doing maintenance research, there are several things to consider:
- We provide product maintenance as either an SMP/E APAR or PTF. In this article:
- RMID (replacement module id) identifies the name of a specific APAR or PTF.
- The term maintenance refers to a collection of one or more APARs or PTFs.
- When applying maintenance, SMP/E manages a set of libraries referred to as the Target zone which are an executable runtime environment. Best practices advise against using the Target zone libraries directly to avoid exposing users to an unstable environment while maintenance is being applied. To address this concern, a copy of the Target zone libraries is created and deployed to the LPARs where the products will be used. This deployment process needs to be performed each time maintenance is applied.
This additional step introduces the possibility that the deployment environment will be out of synch with the SMP/E Target library environment. Since SMP/E reporting reflects the status of the Target zone environment it does not automatically mean that the report applies to a given deployment environment.
- Product maintenance can consist of many element types such as ISPF panels, messages, and JCL. Our packaging embeds the RMID string in object modules only. If the maintenance does not contain a ++MOD statement, the RMID string is not found in the load library.
- When maintenance is applied to an object module, the RMID string is updated to reflect the name of its RMID. When using one of the load library inspection methods, be aware that the load library represents a snapshot in time. The library may:
- Not have the maintenance applied. You would not expect to find the RMID string.
- Have the maintenance applied. If this was the last maintenance that has been applied to a module, you would expect to find the RMID string.
- Have the maintenance and subsequent maintenance applied. When subsequent maintenance is applied to the same object module, prior RMIDs will not be found.
- When a product release is initially packaged, no maintenance exists. The RMID string is set to the SMP/E FMID name (function) that the module is packaged in.
- The RMID value will remain the FMID name until a module experiences its first maintenance. Some modules may never have maintenance applied over the course of a release.
CA Load Module Service Analyzer
The CAMODID utility is packaged in the CA Common Services stack and can be used to report on the applied maintenance for a load library. Our customers already have this utility installed!
The utility replaces other methods that are often used:
- ISPF Search-For method
- AMASPZAP or AMBLIST utilities
- ISPSF Browse
The utility works for all CA products that are CAMODID enabled. It can be invoked interactively in ISPF or in batch.
//STEP1 EXEC PGM=IKJEFT01 //SYSPROC DD DISP=SHR,DSN=SYS2.SYSEXEC //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * CAMODID DSNAME(PTIPROD.RD190.DEV.CDBALOAD) DETAIL LMOD(PDTDIIC0) |
The generated report can be easily captured and sent to CA for review. It provides consolidated summaries:
- Identifying the last applied maintenance for each object module.
- Identifying all maintenance applied to the load module.
The report confirms that RO95038 has indeed been applied to this load library.
PROCESSING DATASET=PTIPROD.RD190.DEV.CDBALOAD MODULE FMID RMID DATE TIME PRODUCT -------- ------- ------- -------- ----- -------------------- =========================================================================== LMOD=PDTDIIC0 DT$DIIC0 CPDTJ00 TR95149 20170321 17.14 CA Database Management R19.0 DT$DI8C0 CPDTJ00 RO94732 20170228 08.55 CA Database Management R19.0 DT$DI9C0 CPDTJ00 TR95149 20170321 17.20 CA Database Management R19.0 DT$DIPC0 CPDTJ00 RO95038 20170314 19.16 CA Database Management R19.0 CA LOAD MODULE SERVICE SUMMARY RMID FMID RMID FMID RMID FMID RMID FMID TR95149 CPDTJ00 RO95038 CPDTJ00 RO94732 CPDTJ00 |
In contrast to the prior example, the following example shows what a base release looks like before any maintenance has been applied. Each module has an RMID that has been initialized to its FMID name. In addition, the Service Summary reports no maintenance.
|
---|
PROCESSING DATASET=PTIPROD.RD200.DEV.CDBALOAD MODULE FMID RMID DATE TIME PRODUCT -------- ------- ------- -------- ----- -------------------- =========================================================================== LMOD=PDTDIIC0 DT$DIIC0 CPDTK00 CPDTK00 20170328 12.47 CA Database Management R20.0 DT$DI8C0 CPDTK00 CPDTK00 20170327 21.51 CA Database Management R20.0 DT$DI9C0 CPDTK00 CPDTK00 20170327 21.51 CA Database Management R20.0 DT$DIPC0 CPDTK00 CPDTK00 20170327 21.50 CA Database Management R20.0 CA LOAD MODULE SERVICE SUMMARY NO SERVICE MAINTENANCE FOUND |
Documentation for CAMODID can be found on the CA DocOps site. The utility supports more use cases which have not been illustrated in this article.
Hopefully you can see the power and the simplicity of the CAMODID utility. Point it to the runtime load library to determine the latest maintenance that has been applied.
Next we explore alternate methods to obtain this information.
SMP/E Query
You can query the SMP/E CSI in either ISPF or batch and is an easy way to determine what maintenance has been pulled down from the CA support site. You need the SMP/E CSI dataset and Target zone name to perform the query.
//SMPE EXEC PGM=GIMSMP //SMPCSI DD DISP=SHR,DSN= PTIPROD.RD190.PRD.CSI <-- Update with site specific CSI //SMPCNTL DD * SET BOUNDARY(CAIT0) . <-- Update with Target Zone LIST PTFS. |
In the batch report below, we can see that SYSMOD RO95038 has been applied. The report provides information about the PTF and identifies the object modules that are updated by the PTF. The report shows the relationship of the PTF with other maintenance. In addition, it also identifies all the modules that are updated in the PTF.
RO95038 TYPE = PTF DESCRIPTION = DUPLICATE EXCEPTIONS FOR SQL USING CPU PARALLELISM STATUS = REC BYP APP FMID = CPDTJ00 DATE/TIME REC = 17.074 10:14:01 INS = 17.074 10:14:08 SOURCEID = CAP1703 D190R01399 PRE VER(001) = RO78199 RO78673 RO79247 RO79651 RO79913 RO80050 RO80197 RO80565 RO80822 RO81029 RO83779 RO83941 RO85469 RO85918 RO87010 RO87439 RO87957 RO88357 RO88607 RO88741 RO89174 RO91026 RO91241 RO91623 RO92190 RO92351 RO92933 RO93375 RO94030 RO94205 RO94593 RO94882 RO94982 SUPING VER(001) = RO79164 RO80342 RO80718 RO80898 RO81413 RO82589 RO83072 RO84456 RO84899 RO84992 RO85001 RO85659 RO86415 RO86718 RO89230 RO90016 RO90442 RO91332 TR77302 TR77303 TR79164 TR80342 TR80718 TR80898 TR81413 TR82589 TR83072 TR84456 TR84899 TR84992 TR85001 TR85659 TR85847 TR86384 TR86415 TR86718 TR89230 TR90016 TR90329 TR90442 TR91332 TR95038 MOD = DT$DIIC0 DT$DIIC1 DT$DIIC2 DT$DIIC9 DT$DIOC0 DT$DIOC1 DT$DIOC2 DT$DIOC9 DT$DIPC0 DT$DIPC1 DT$DIPC2 DT$DIPC9 DT$DIYC0 DT$DIYC1 DT$DIYC2 DT$DIYC9 |
SMP/E queries provide insight into the relationships of the maintenance that CAMODID cannot. Likewise, SMP/E cannot provide insight into the maintenance that has been applied to a deployed library. Both have their place and can be used successfully in tandem to research issues.
What is the difference between a GA IR and a GA Complete PAX file?
We publish a PAX file for both the GA IR and the GA Complete milestones. The benefit of the GA Complete PAX is that all IR maintenance is rolled up. Customers will be able to install the GA Complete PAX faster than installing the GA IR PAX and then applying all the maintenance. The resulting target environment will be the same using either method.
Depending on which PAX file the customer installed, SMP/E queries may provide contrasting results when researching a fix. Here is an online SMP/E query showing part of a GA IR function definition. The new function cleans up prior releases that may be installed in the same environment.
|
---|
Entry Type: SYSMOD Zone Name: CAIT0 Entry Name: CPDTJ00 Zone Type: TARGET Description: CA Detector for DB2 for z/OS Type: FUNCTION Status: APP FMID: CINSJ00 JCLIN Date/Time: 15.015 12:39:15 APP REWORK 2015014 -------- -------- -------- -------- -------- -------- -------- SUP CPDTF00 CPDTG00 CPDTH00 CPDTI00 DEL CPDTF00 CPDTG00 CPDTH00 CPDTI00 |
Customers participating in the IR program apply all maintenance introduced during the IR phase. SMP/E, having applied all that maintenance, records the detailed information for each PTF and APAR applied.
During the IR phase, PTF RO92351 was published. Detailed SMPE/E information is available after the maintenance was applied.
|
---|
Entry Type: SYSMOD Zone Name: CAIT0 Entry Name: RO92351 Zone Type: TARGET Description: DB2 TOOLS INCREMENTAL RELEASE FIX #4 Type: PTF Status: APP BYP FMID: CPDTJ00 Date/Time: 16.281 12:36:44 APP -------- -------- -------- -------- -------- -------- -------- PRE RO78199 RO78204 RO78673 RO78820 RO78978 RO79168 RO79247 RO79651 RO79723 RO79913 RO80050 RO80197 RO80342 RO80502 RO80509 RO80565 RO80718 RO80822 RO80898 RO81029 RO81186 RO81413 RO81547 RO81580 RO81684 RO82177 RO82510 RO82589 RO82885 RO83072 RO83779 RO83941 RO84030 RO84443 RO84456 RO84899 RO84927 RO84961 RO84992 RO85001 RO85234 RO85469 RO85659 RO85918 RO86415 RO86536 RO86718 RO86900 RO87010 RO87402 RO87439 RO87957 RO88041 RO88070 RO88357 RO88607 RO88741 RO89174 RO89230 RO90130 RO90333 RO90433 RO90442 RO91026 RO91193 RO91241 RO91311 RO91332 RO91623 RO91773 RO92190 SUP RO78546 RO79327 RO79581 RO82839 RO89273 RO89463 RO90023 TR77302 TR77303 TR77748 TR78546 TR79327 TR79581 TR79695 TR79908 TR80037 TR82839 TR84911 TR85847 TR86384 TR87912 TR87950 TR88068 TR88169 TR88204 TR89273 TR89463 TR90023 TR90107 TR90169 TR90219 TR90285 TR90329 TR91128 TR91235 TR91390 TR92096 TR92351 IFREQ RO92344 RO92345 RO92346 RO92347 RO92350 RO92352 RO92353 RO92354 RO92355 RO92356 RO92357 RO92358 RO92359 RO92360 RO92361 RO92362 RO92363 RO92364 |
Since the GA Complete PAX contains only the last update for each published module, none of the IR PTFs or APARs are present! Since the IR maintenance is not present, SMP/E cannot report detailed information.
The same function definition, on the GA Complete PAX, looks very different. It identifies all previously published IR maintenance by superseding (SUP) it. This critical piece of housekeeping enables maintenance to be applied after GA Complete for all customers, regardless of which PAX file the customer installed.
|
---|
Entry Type: SYSMOD Zone Name: CAIT0 Entry Name: CPDTJ00 Zone Type: TARGET Description: CA Detector for DB2 for z/OS Type: FUNCTION Status: APP FMID: CINSJ00 JCLIN Date/Time: 17.101 14:38:42 APP REWORK 2016288 -------- -------- -------- -------- -------- -------- -------- SUP AR87957 AR91241 CPDTF00 CPDTG00 CPDTH00 CPDTI00 RO78199 RO78204 RO78490 RO78546 RO78673 RO78703 RO78820 RO78978 RO79164 RO79168 RO79247 RO79306 RO79327 RO79581 RO79651 RO79723 RO79913 RO80019 RO80050 RO80197 RO80209 RO80342 RO80454 RO80482 RO80502 RO80509 RO80565 RO80596 RO80604 RO80718 RO80822 RO80898 RO81029 RO81186 RO81393 RO81413 RO81547 RO81580 RO81684 RO82177 RO82510 RO82589 RO82714 RO82839 RO82885 RO83072 RO83779 RO83941 RO84030 RO84443 RO84456 RO84854 RO84899 RO84927 RO84961 RO84992 RO85001 RO85234 RO85246 RO85469 RO85659 RO85827 RO85918 RO86415 RO86536 RO86718 RO86900 RO87010 RO87371 RO87402 RO87439 RO87957 RO88041 RO88070 RO88357 RO88607 RO88741 RO88751 RO89174 RO89230 RO89273 RO89463 RO90016 RO90023 RO90130 RO90140 RO90333 RO90433 RO90442 RO91026 RO91193 RO91241 RO91311 RO91332 RO91623 RO91773 RO92190 RO92351 DEL CPDTF00 CPDTG00 CPDTH00 CPDTI00 |
Performing a query on the last SYSMOD in the SUP list, RO92351, we see a skeleton definition having no detail. Since the PTF was not shipped in the GA Complete PAX, SMP/E has no detail. The only thing it does know is that it was superseded by the SYSMOD FUNCTION definition. This breadcrumb of information is all SMP/E needs in order to satisfy requisite checks specified on subsequent maintenance.
|
---|
Entry Type: SYSMOD Zone Name: CAIT0 Entry Name: RO92351 Zone Type: TARGET Description: Type: Status: FMID: SUPBY CPDTJ00 Date/Time: -------- -------- -------- -------- -------- -------- -------- |
Next we explore the old-school methods to obtain maintenance information from a load library. Hopefully in reviewing these methods you will be comfortable to abandon them and just use CAMODID and SMP/E queries to perform your research.
IBM AMASPZAP or AMBLIST utilities
You can use AMASPZAP or AMBLIST to dump load module information. The AMBLIST utility provides a basic report identifying the CSECTs in a load module.
//AMBLIST EXEC PGM=AMBLIST //PTILIB DD DISP=SHR,DSN=PTIPROD.RD190.DEV.CDBALOAD //SYSPRINT DD SYSOUT=* //SYSIN DD * LISTIDR OUTPUT=IDENT,MEMBER=PDTDIIC0,DDN=PTILIB |
By reviewing the user data section of the report, we can see the maintenance that has been applied to the load module and confirm that RO95038 has been applied to the load module.
------------------------------------- DATE USER DATA CSECT: DT$DIIC0 03/31/2017 TR95149 CSECT: DT$DIPC0 03/15/2017 RO95038 CSECT: DT$DI8C0 03/09/2017 RO94732 CSECT: DT$DI9C0 03/31/2017 TR95149 |
ISPF Search-For
You can use the ISPF Search-For dialogue can scan for the RMID name in a load library.
Search-For Utility Command ===> Search String . . RO95038 ISPF Library: Project . . . Group . . . . . . . . . . . . . Type . . . . Member . . . (Blank or pattern for member selection list, "*" for all members) Other Partitioned, Sequential or VSAM Data Set: Data Set Name . . . 'PTIPROD.RD190.DEV.CDBALOAD(*) Volume Serial . . . (If not cataloged) |
Note that this utility identifies load modules containing an object module where the RMID was the last RMID applied. In the report below, three load modules have the fix.
LINE-# SOURCE SECTION SRCH DSN: PTIPROD.RD190.DEV.CDBALOAD PDTDIIC0 --------- STRING(S) FOUND ------------------- 19 µ µ µ µ ¬#MID¬ ç y ÌDT$DI9C0 CPDTJ00 ~RMID(TR95149)~ 20170321 17.20 CA Database Management R 22 M Ø Ø Ø Ø ö Ü LDLDM Ø Ø Ø PDTDIIC1 --------- STRING(S) FOUND ------------------- 19 gement R19.0 - COPYRIGHT (C) 2014 CA. ALL RIGHTS RESERVED. DT$DIPC1 03/14/17 19.16 22 Ø Ø & Ø LDLDM Ø Ø Ø Ø PDTDIIC2 --------- STRING(S) FOUND ------------------- 19 xÈ ç Ý ñ sKxà ñ sMxM ñ sOxà ñ sQxM T Ø N s¹ xd ¥x4 óN Ý süxd N Ý súxd T E- j §þxd j §þx K ¾+ 22 Ø Ø µ } LDLDM Ø Ø Ø Ø |
ISPF Browse
When the load module name is known, you can browse the member directly and issue the command: FIND RO95038. Here we are looking directly at the CAMODID-enabled content which identifies the:
- Object module name
- SMP/E FMID
- RMID string
- Build date and time
BROWSE PTIPROD.RD190.DEV.CDBALOAD(PDTDIIC0) Command ===> .DT$DIPC0 CPDTJ00 ~RMID(RO95038)~ 20170314 19.16 .......CA Database Management R19.0 ...h...h.............LDLDM.............Ø.....Ø.......Ø.................ý...ý...ý....... ........H..ô...ô.............LDLDM.............Ø.....Ø.......Ø..................^..L... µ....................Ø...Ø.........gö....................Ø...Ø.........g}.............. ........-X.........ãY...................ØX.........¢....................µX.........|... ........-SØ.À.......ï.....ç.............ØSØ.À.......Â.....ç..............SØ.À.......?.. ********************************************************** Bottom of Data ************* |
We can see that PTF RO95038 has been applied.