72
1 May XX, 2008 • 00:00 a.m. – 00:00 a.m. Platform: DB2 for z/OS Joe Goodman DST Systems Inc. Session: To Bind Or Not To Bind – Let Bind Manager Decide IBM’s Bind Manager for DB2 z/OS can save your organization time and money by providing a mechanism for avoiding unnecessary binds. This can result in fewer production outages as well as saving time and effort in the development cycle. This presentation will focus on how it works, how to implement it, and how to measure the benefits.

To Bind Or Not To Bind – Let Bind Manager Decide

  • Upload
    tess98

  • View
    1.148

  • Download
    13

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: To Bind Or Not To Bind – Let Bind Manager Decide

1

May XX, 2008 • 00:00 a.m. – 00:00 a.m.

Platform: DB2 for z/OS

Joe GoodmanDST Systems Inc.

Session:

To Bind Or Not To Bind –Let Bind Manager Decide

IBM’s Bind Manager for DB2 z/OS can save your organization time and money by

providing a mechanism for avoiding unnecessary binds. This can result in fewer

production outages as well as saving time and effort in the development cycle. This

presentation will focus on how it works, how to implement it, and how to measure

the benefits.

Page 2: To Bind Or Not To Bind – Let Bind Manager Decide

2

2

Topics for this presentation

• The Main Functions of Bind Manager

• DB2 program preparation for bind avoidance

• Implementing Bind Avoidance

• Measuring the cost & effect

• Additional utilities

Page 3: To Bind Or Not To Bind – Let Bind Manager Decide

3

3

.

http://www.dstsystems.com

About DST Systems

•Leading provider of computer software solutions and services, NYSE listed – “DST”•Revenue $2.24 billion•110 million+ shareowner accounts

•24,000 MIPS•150 TB DASD•145,000 workstations•462,000 DB2 objects•Non-mainframe: 600 servers (DB2, Oracle, Sybase, SQL Server) with 2.3 million objects

If you have ever invested in a mutual fund, have had a prescription filled, or are a

cable or satellite television subscriber, you may have already had dealings with our

company.

DST Systems, Inc. is a publicly traded company (NYSE: DST) with headquarters in

Kansas City, MO. Founded in 1969, it employs about 12,000 associates

domestically and internationally.

The three operating segments - Financial Services, Output Solutions and Customer

Management - are further enhanced by DST’s advanced technology and e-

commerce solutions.

Page 4: To Bind Or Not To Bind – Let Bind Manager Decide

4

4

Disclaimer

• The details presented in this presentation may not apply to all installations (your mileage may vary)

All installations are different in some respects. The statistics gathered benchmarking the performance of the various products are unique to DST. While effort was made to ensure that the benchmarks taken give a true representation of product performance, it is no guarantee that your results will be similar. Everyone interested is urged to try the product for themselves in their own environment.

Page 5: To Bind Or Not To Bind – Let Bind Manager Decide

5

5

Terms

• For purposes of this discussion, we’ll use a few shortcuts in terminology. Unless explicitly stated otherwise…

• Compile refers to the complete program preparation cycle

• DB2 refers to DB2 for z/OS V7 or later

• Bind Manager refers to DB2 Bind Manager for z/OS V2.3

Page 6: To Bind Or Not To Bind – Let Bind Manager Decide

6

6

Bind Manager – The Main Functions

• Bind Avoidance

• DBRM Library Maintenance

• DB2 Catalog Maintenance

Bind Manager is a set of programs that allow the user to bypass the Bind step when

program changes do not require changes to the SQL

Bind Manager also includes a set of utilities to be used in both batch and online

(ISPF) mode that allow you to –

Browse a DBRM

Cross Reference Load libraries, DBRM libraries, and the DB2 catalog

Generate a DBRM from the DB2 catalog

Cleanup obsolete plans and packages

Page 7: To Bind Or Not To Bind – Let Bind Manager Decide

7

7

Bind Avoidance: Why ?

• Catalog Concurrency Issues

• Access path switches

• Additional time required for program installs

Catalog concurrency issues:

Multiple binds running simultaneously can create deadlocks on the DB2 catalog.

Application deadlocks are a nuisance and sometimes a serious problem.

Catalog deadlocks are always a serious problem and sometimes a disaster.

Access Path Switches:

The DB2 Optimizer isn’t perfect. Unexpected access path switches still occur.

These can play havoc with production cycles when they occur. Avoiding the bind

eliminates the possibility of a switch.

Additional time required for program installs:

Executing binds adds additional time and complexity to the install process.

Page 8: To Bind Or Not To Bind – Let Bind Manager Decide

8

8

Catalog tables effected by binds

• Package Binds:

• SYSPACKAGE

• SYSPACKDEP

• SYSPACKSTMT

• SYSPACKAUTH

• SYSPACKLIST

• Plan Binds

• SYSPLAN

• SYSDBRM

• SYSSTMT

• SYSPLANDEP

• SYSPLANAUTH

Though greatly diminished, catalog contention still occurs in our environment.

SYSPACKSTMT, SYSPACKDEP, SYSSTMT and SYSPLANDEP can have large

numbers of rows added/replaced.

During a large install of new program code, the chances of contention are greatly

increased.

Page 9: To Bind Or Not To Bind – Let Bind Manager Decide

9

9

The old program preparation process

Pre-Compile

Compile

Link-Edit

Bind

Source

ModifiedSource

DBRM

Object

Load

DB2

Catalog

Program Preparation without Bind Manager:

Source Statements input to pre-compiler

Two pre-compile outputs: DBRM and Modified Source (Both

contain contoken)

RC=0 for perfect pre-compile, RC=4 for SQL Warning, RC=8 for

SQL Error

Modified Source input to Compiler

Compiler output: Object

Object input to LKED

LKED Output: Load Module

DBRM input to Bind

Bind output: Updated DB2 Catalog

At execution time: Contokens from load and catalog are matched

DB2 issues SQLCode -805 if mismatch

Page 10: To Bind Or Not To Bind – Let Bind Manager Decide

10

10

What’s a contoken anyway?

• The DB2 consistency token (contoken)

• 8 byte Hexidecimal string

• Used by DB2 to ensure consistency at execution time

The contoken is created by the SQL pre-compiler and is placed in both the modified

source and the DBRM. After a successful compile it can be found in both the load

module and the DB2 catalog.

At execution time DB2 searches SYSIBM.SYSPACKAGES for a version of the

plan/package which contains a contoken that matches the contoken found in the

load module.

If a match is found, execution continues normally. If not, DB2 returns a -805

SQLCODE and will not execute the program.

Page 11: To Bind Or Not To Bind – Let Bind Manager Decide

11

11

Contoken in the Modified Source

01 SQL-PLIST2.

05 SQL-PLIST-CON PIC S9(9) COMP-4 VALUE +4210688.

05 SQL-CALLTYPE PIC S9(4) COMP-4 VALUE +50.

05 SQL-PROG-NAME PIC X(8) VALUE X'424D414E30312020'.

05 SQL-TIMESTAMP-1 PIC S9(9) COMP-4 VALUE +406568622.

05 SQL-TIMESTAMP-2 PIC S9(9) COMP-4 VALUE +102321767.

Dec 406568622 = X’183BBEAE’

Dec 102321767 = X’06194E67’

This slide shows where to find the contoken in the modified source. The block of

code shown above isn’t coded by the application developer. It’s generated by the

pre-compiler and inserted into the source which is passed on to the compiler.

The values in SQL-TIMESTAMP-1 and SQL-TIMESTAMP-2 are joined together

as a 8 byte HEX string. That string is the contoken.

Page 12: To Bind Or Not To Bind – Let Bind Manager Decide

12

12

Contoken in the DBRM

0 1 1 2 2 3

----5----0----5----0----5----0----

DBRM µUSER PROGNAME ´Þ +Å

CCDD000ACDCC4444CDCDFF4413BA0146

4294000041170000241501008BEE69E7

This slide shows the same contoken in the DBRM. The first record of a DBRM is

the header record. The contoken is located in byte 25 of the DBRM header record.

Notice this is the same Hex string from the previous slide.

Page 13: To Bind Or Not To Bind – Let Bind Manager Decide

13

13

How Compiling differs with Bind Manager

• Old pre-compiler program (DSNHCP) replaced with new program (BNDAVB)

• DBRM is both input and output

• Additional steps in the “Compile” job

• New Return Code checking requirements

Compiling with Bind Manager adds additional complexity to the process.

Program BNDAVB must be implemented in place of the old DSNHCP. (pre-

compiler)

BNDAVB must have access to the old DBRM in order to make it’s comparison, so

the DBRM becomes both an input and an output. Copying the DBRM to a

temporary library for this step is recommended. This will make things much

simpler if something goes wrong downstream in the compile process. It could be

confusing to have the DBRM updated in the pre-compile and then have a syntax

error in the compile step. You’d be left with a DBRM that is out of sync with your

executable module.

BNDAVB return codes

0 Successful pre-compile, no Bind required.

4 Successful pre-compile, Bind required

8 Unsuccessful pre-compile – no DBRM generated

Page 14: To Bind Or Not To Bind – Let Bind Manager Decide

14

14

The new program preparation process

Pre-Compile

Compile

Link-Edit

Bind

Source

ModifiedSource

Temp DBRMObject

Load

DB2Catalog

DBRM Copy

DBRMLIB

DBRM Copy

Pre RC = 0 YES? - STOP

Program Preparation with Bind Manager:

Two inputs to pre-compiler: Source Statements & DBRM

Two pre-compile outputs: DBRM and Modified Source

RC=0 for no SQL changed (contoken from old DBRM added to modified source & New DBRM)

RC=4 for SQL Changes (new contoken generated and added to modified source)

RC=8 for SQL Error

Modified Source input to Compiler

Compiler output: Object

Object input to LKED

LKED Output: Load Module

IF RC from BNDAVB step > 0

DBRM input to Bind

Bind output: DB2 Catalog

IF RC from BNDAVB step = 0

No Bind needed, catalog contoken matches load module

Execution Time: Contokens from load and catalog are matched

DB2 issues SQLCode -805 if mismatch

Page 15: To Bind Or Not To Bind – Let Bind Manager Decide

15

15

Implementing Bind Avoidance: The New program preparation process Sample JCL

• //PRECOPY EXEC PGM=IEBGENER

• //SYSUT1 DD DISP=SHR,DSN=permanent.dbrmlib(dbrmname)

• //SYSUT2 DD DISP=SHR,DSN=temporary.dbrmlib(dbrmname)

• //SYSPRINT DD SYSOUT=*

• //SYSIN DD DUMMY

• //*--------------------------------------------------

• //PC EXEC PGM=BNDAVB,PARM=’HOST(COB2),APOST’

• //STEPLIB DD DISP=SHR,DSN=db2.loadlib

• //SYSLIB DD DISP=SHR,DSN=bndavb.loadlib

• //SYSIN DD DSN=installation.sourcelib(member),DISP=SHR

• //DBRMLIB DD DISP=SHR,DSN=temporary.dbrmlib(dbrmname)

• //SYSCIN DD DISP=(,PASS),DSN=&&SYSCIN,UNIT=SYSALLDA,

• // SPACE=(CYL,(5,5))

• //SYSUT1 DD SPACE=(CYL,(5,5)),UNIT=SYSDA

• //SYSUT2 DD SPACE=(CYL,(5,5)),UNIT=SYSDA

• //SYSPRINT DD SYSOUT=*

• //SYSTERM DD SYSOUT=*

• //SYSUDUMP DD SYSOUT=*

• //*----------------------------------------------------

Step

PRECOPY:

Copy the DBRM from our permanent DBRMLIB to our temporary DBRMLIB

IEBGENER seems to be the most economical means

PC:

BNDAVB to pre-compile your source code and compare it to the existing DBRM

The SYSCIN dataset can be scanned for messages if simple return code processing

does not meet your needs.

Page 16: To Bind Or Not To Bind – Let Bind Manager Decide

16

16

Implementing Bind Avoidance: The New program

preparation process Sample JCL (contd.)

• //COB2 EXEC PGM=IGYCRCTL,COND=(4,GT),PARM=’OBJECT,MAP,APOST’ • //STEPLIB DD DISP=SHR,DSN=cobol2.loadlib• //SYSPRINT DD SYSOUT=* • //SYSIN DD DISP=(OLD,DELETE),DSN=&&SYSCIN • //SYSLIN DD DISP=(MOD,PASS),UNIT=SYSDA,DSN=&&LOADSET, • // SPACE=(TRK,(5,5)) • //SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(5,5)) • //SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(5,5)) • //SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(5,5)) • //SYSUT4 DD UNIT=SYSDA,SPACE=(CYL,(5,5)) • //SYSUT5 DD UNIT=SYSDA,SPACE=(CYL,(5,5)) • //SYSUT6 DD UNIT=SYSDA,SPACE=(CYL,(5,5)) • //SYSUT7 DD UNIT=SYSDA,SPACE=(CYL,(5,5)) • //*-----------------------------------------------------• //LKED EXEC PGM=IEWBLINK,PARM=’LIST,XREF,LET,MAP’,COND=(4,GT,COB2) • //SYSLIN DD DISP=(OLD,DELETE),DSN=&&LOADSET • //SYSLMOD DD DISP=SHR,DSN=loadlib(pgmname) • //SYSLIB DD DISP=SHR,DSN=syslib• //SYSUT1 DD UNIT=SYSALLDA,SPACE=(CYL,(1,1)) • //SYSPRINT DD SYSOUT=* • //*------------------------------------------------------

COB2:

The compiler of your choice here. (this example is COBOL 2)

LKED:

The linkage editor can be used as it was before

Bind Manager does not require any additional code at run time.

Page 17: To Bind Or Not To Bind – Let Bind Manager Decide

17

17

Implementing Bind Avoidance: The New program

preparation process Sample JCL (contd.)

• //BINDDBRM EXEC PGM=IKJEFT01,DYNAMNBR=30,COND=((4,GT,LKED),(4,NE,PC))

• //SYSTSPRT DD SYSOUT=*

• //SYSPRINT DD SYSOUT=*

• //SYSUDUMP DD SYSOUT=*

• //DBRMLIB DD DISP=SHR,DSN=temporary.dbrmlib

• //SYSTSIN DD *

• DSN SYSTEM(dsn)

• BIND control statements

• END

• /*

• //*-----------------------------------------------------

• //POSTCOPY EXEC PGM=IEBGENER,COND=((4,GT,BINDDBRM),(4,NE,PC))

• //SYSUT1 DD DISP=SHR,DSN=temporary.dbrmlib(dbrmname)

• //SYSUT2 DD DISP=SHR,DSN=permanent.dbrmlib(dbrmname)

• //SYSPRINT DD SYSOUT=*

• //SYSIN DD DUMMY

BINDDBRM:

Like the compile and Link, the Bind step requires nothing special.

POSTCOPY:

Copy your temporary DBRM into the permanent library.

Page 18: To Bind Or Not To Bind – Let Bind Manager Decide

18

18

What have we done?(Measuring the cost of Bind Manager)

• Avg. CPU time for various steps: (seconds)

• DSNHCP: 0.024

• BNDAVB No DBRM input 0.042

• BNDAVB with SQL changes 0.060

• BNDAVB with no SQL changes 0.058

• Package Bind 0.050

• DBRM Copy (IEBGENER) 0.010

• DBRM Copy (IDCAMS) 0.020

• BNDA024 0.372

The above timing statistics were gathered by running 50 of each job type and

summing the recorded time statistics.

Note: The numbers shown here for BNDA024 are not truly relevant to the current

topic. They are shown here for comparison and will be explained later in the

presentation.

Page 19: To Bind Or Not To Bind – Let Bind Manager Decide

19

19

Summing up the timings:

Average CPU seconds for Bind related processing:

• DSNHCP + Bind: 0.074

• 2 Copies + BNDAVB + Bind: 0.150

• 1 Copy + BNDAVB (Bind avoided) 0.078

Even when the Bind is avoided, the “old style” compile process uses less CPU.

Page 20: To Bind Or Not To Bind – Let Bind Manager Decide

20

20

Summing up the timings:

• Additional CPU expense

• Longer running compile jobs

• What’s the point?

From the previous slide, it’s apparent that Bind avoidance isn’t without ongoing

CPU cost.

Now we need to see if

1) The savings from implementing Bind avoidance outweigh the

associated costs?”

2) The benefits are seen to outweigh the additional cost

Page 21: To Bind Or Not To Bind – Let Bind Manager Decide

21

21

Additional reasons to avoid binds

• Performance Driven Service Level Agreements

• Multiple production environments

As an application service provider, DST’s environment is a little different than

most.

Our contracts with our client companies are performance driven. Failing to provide

the contracted services results in immediate financial penalties. Predictable

performance is a must.

Page 22: To Bind Or Not To Bind – Let Bind Manager Decide

22

22

DST DB2 Environment

• Each client has its own production system including tables and programs

• Around 40 production systems.

There are several product groups, each one with multiple “platforms”, TEST

through STAGE through PROD. The PROD systems are replications of the same

set of tables and programs. Our largest product group, Mutual Funds, has around 40

identical PROD platforms with over 3,000 tables and 17,000 programs in each

platform.

So, in addition to the other reasons we’ve already discussed to avoid a bind, DST

has multiple (about 40) production instances of any given program.

So when DST avoids a bind, we are really avoiding 40 binds.

Page 23: To Bind Or Not To Bind – Let Bind Manager Decide

23

23

Summing up the timings (again):

Average CPU seconds for Bind related processing:

• DSNHCP + 40 Binds: 2.024

• 2 Copies + BNDAVB + 40 Binds: 2.080

• 1 Copy + BNDAVB (Binds avoided) 0.078

Looking at this slide, we see a significantly different picture that the first set of

numbers showed.

Because the bind is performed so many times in our environment, the cost of Bind

Avoidance can be recouped many times over.

DST has chosen not to implement Bind Manager as part of the daily development

cycle, where a single copy of the program may be compiled several times in the

course of a day.

Bind Manager is used only in the production migration pipeline.

Page 24: To Bind Or Not To Bind – Let Bind Manager Decide

24

24

DST Conclusions on Bind Avoidance

• Bind Manager added some additional CPU cost in daily development work

• Shops with multiple production instances may be able to actually reduce overall CPU usage when deploying the new program code

• Avoiding the production outage or access path switch is the larger issue.

The cost (or savings) in CPU derived from Bind avoidance is not a compelling

reason for most shops to consider Bind Manager.

Production outages and access path switches can be very costly. Avoid the bind and

minimize the risk.

The more plans/packages you support, the more exposure you have to Bind related

outages.

Page 25: To Bind Or Not To Bind – Let Bind Manager Decide

25

25

What have we done? (Part 2)(Measuring the effect of Bind Manager)

• Building a Repository

• Sample repository table

• Sample SQL for mining the repository

• Sample JCL for updating the repository

• EBCDIC vs. UNICODE considerations

• DST Conclusions

Page 26: To Bind Or Not To Bind – Let Bind Manager Decide

26

26

Sample Repository

CREATE TABLE creator.BINDMGR_REPOSITORY

( DB2_SSID CHAR(4) NOT NULL,

COLLID CHAR(8) NOT NULL,

PROG_NAME CHAR(8) NOT NULL,COMPILE_COUNT DECIMAL(7) NOT NULL,

BIND_COUNT DECIMAL(7) NOT NULL)

This is a VERY simple example. Your implementation will likely be more

complex.

Page 27: To Bind Or Not To Bind – Let Bind Manager Decide

27

27

Sample JCL for updating repository

• //LKED EXEC PGM=IEWL,PARM=’LIST,XREF,LET,MAP’,COND=(4,GT,COB2) • //SYSLIN DD DISP=(OLD,DELETE),DSN=&&LOADSET • // DD ddname=SYSIN • //SYSLMOD DD DISP=SHR,DSN=loadlib(pgmname) • //SYSLIB DD DISP=SHR,DSN=syslib• //SYSUT1 DD UNIT=SYSALLDA,SPACE=(CYL,(1,1)) • //SYSPRINT DD SYSOUT=* • //*------------------------------------------------------• //TBLUPDT1 EXEC PGM=????????,COND=(4,GT,LKED)• // PARM=‘pgmname,COMPILE’• //SYSPRINT DD SYSOUT=*• //SYSUDUMP DD SYSOUT=*• //*------------------------------------------------------• //BINDDBRM EXEC PGM=IKJEFT01,DYNAMNBR=30,COND=((4,GT,LKED),(4,GT,PC)) • //SYSTSPRT DD SYSOUT=* • //SYSPRINT DD SYSOUT=* • //SYSUDUMP DD SYSOUT=* • //DBRMLIB DD DISP=SHR,DSN=temporary.dbrmlib• //SYSTSIN DD * • DSN SYSTEM(dsn) • BIND control statements • END • /* • //*-----------------------------------------------------• //TBLUPDT2 EXEC PGM=????????,COND=(4,GT,BINDDBRM)• // PARM=‘pgmname,BIND’• //SYSPRINT DD SYSOUT=*• //SYSUDUMP DD SYSOUT=*

In this sample JCL we execute our repository update program after the LKED and

BIND steps. The parameters passed to the program tell it what update to perform.

We are simply counting the program as “compiled” after we have successfully

updated the load module. We count another bind after it is successfully bound.

Page 28: To Bind Or Not To Bind – Let Bind Manager Decide

28

28

Sample SQL for mining the repository

SELECT PROG_NAME

,COMPILE_COUNT AS COMPILED

,BIND_COUNT AS BOUND

,COMPILE_COUNT – BIND_COUNT

AS SKIPPED

FROM BINDMGR_REPOSITORY

WHERE DB2_SSID = your_ssid

AND COLLID LIKE ‘collection%’

This is a VERY simple example. Your implementation will likely be more

complex.

Page 29: To Bind Or Not To Bind – Let Bind Manager Decide

29

29

EBCDIC vs Unicode

• DB2 V8 NFM DBRM’s are in UNICODE!

• Bind Manager makes no allowance for these CCSID differences!

• An EBCDIC DBRM as input to a V8 NFM pre-compile will ALWAYS get an RC >=4

• Until the entire DBRM library is converted to UNICODE, bind avoidance is limited.

Page 30: To Bind Or Not To Bind – Let Bind Manager Decide

30

30

DST’s results (so far)

• Number of DB2 programs changed: 411

• Number of Binds Executed: 380

• Number of Binds Avoided: 31

DST still has a large imbedded base of V7 DBRM’s. While we see a measurable

effect we expect to see the numbers increase as time goes by. We expect Bind

Manager to continue to help us shrink install windows and reduce unexpected

results that occasionally occur when binding large numbers of packages.

Page 31: To Bind Or Not To Bind – Let Bind Manager Decide

31

31

Other Bind Manager Features

• DBRM Cross Checker

• Catalog Cross Checker

• DBRM Browser

• DBRM Generator

• Static SQL load module report

• Catalog Cleanup generator

• Index Listing report

These are the other utilities that make up the Bind Manager Suite.

Cross Checkers compare the Catalog or DBRM library to a load library (or set of

load libraries).

A browser that formats the DBRM header record and the individual SQL statements

A utility to recreate a DBRM from the DB2 catalog

A Utility to list all programs in a load library which use static SQL

A Utility to create FREE commands for plans/packages with no corresponding load

module

A Utility to list all the indexes for a specific table

Page 32: To Bind Or Not To Bind – Let Bind Manager Decide

32

32

ISPF Bind Manager Utilities

Bind Manager 2.3.0 COMMAND ===>

Select the desired mode of operation

0 SETTINGS Defaults 1 PLAN Plan mode 2 PKG Package mode 3 BROWSE Browse DBRMs4 GENERATE Rebuild DBRMs5 IXU Index Utility X EXIT End dialog

Options: / Translate DB2 time stamps

Here is the Bind Manager 2.3.0 Utility Main Menu

Turning on the “Translate DB2 time stamps” option causes contokens to be

converted to timestamp external format

We’ll look at each option in detail.

Page 33: To Bind Or Not To Bind – Let Bind Manager Decide

33

33

ISPF Bind Manager Settings Panel

Bind Manager - SETTINGS

COMMAND ===> Scroll ===> PAGE

Default high level qualifier for work files . . . . . . . . tsoid

The only option available is the default HLQ for the work datasets to be allocated

during your session.

The default installation value is your TSO ID.

This is configurable by the Systems Programmer who installs the product.

Page 34: To Bind Or Not To Bind – Let Bind Manager Decide

34

34

Cross Checkers

• Cross reference the DB2 Catalog, DBRM library and Load library

• Report on differences and matches

These tools allow you to quickly see where matched sets of load modules, DBRMs

and bound objects are located.

Page 35: To Bind Or Not To Bind – Let Bind Manager Decide

35

35

Cross Checker Plan Mode Panel

------------------------- DBRM Cross Check --------------------------COMMAND ===>

DBRM Data Set Name . . ‘your.dbrm.dataset' Member . . . . . member

LOAD Data set name . . ‘your.load.library' MODULE Member . . . . . member

DB2 Local . . . . . . ssidSubsys Remote . . . . . ssid

This panel requires fully qualified DSNs for the DBRM and Load module libraries.

If you do not supply a member name, you can browse a list of members and select

one

Wildcards are not supported

Page 36: To Bind Or Not To Bind – Let Bind Manager Decide

36

36

Cross Checker Plan Mode Output

------------------------- DBRM Cross Check --------------------------COMMAND ===>

.------------ DBRM Verification Results ------------. | COMMAND ===> | | | | -- Source -- ------- Time Stamp ------- | | | | DBRM 17BA3AB3 0BF192E5 (hex) | | DB2 Catalog (No match) | | Load Module 17BA3AB3 0BF192E5 (hex) | | | | | | | '---------------------------------------------------' .-----------------------------------------------. | BND366E MEMBER not found in ssid, SQLCODE 100 | '-----------------------------------------------'

The output is ISPF popup panel that overlays the selection panel.

In this example the plan was not found in the DB2 catalog and the Translate DB2

Time Stamps option was off

Page 37: To Bind Or Not To Bind – Let Bind Manager Decide

37

37

Cross Checker Package Mode Panel

------------------------ Package Cross Check ------------------------COMMAND ===> Scroll ===> PAGE

DBRM Data Set Name . . . . ‘your.dbrm.library' Member . . . . . . . . member

PACKAGE Collection . . . . . . ----+----1----+---1 18

Version . . . . . . . ----+----1----+----2----+----3 1 30

LOAD Data set name . . . . ‘your.load.library' MODULE Member . . . . . . . . member

DB2 Local . . . . . . . . ssidSubsys Remote . . . . . . . . ssid

This panel requires fully qualified DSNs for the DBRM and Load module libraries.

If you do not supply a member name, you can browse a list of members and select

one

Wildcards are not supported

In addition to the name and library the user can Collection and Version

Page 38: To Bind Or Not To Bind – Let Bind Manager Decide

38

38

Cross Checker Package Mode Output

----------------------------- Package Cross Check -----------------------------.------------------------- DBRM Verification Results -------------------------.| Row 1 to 2 of 2 || COMMAND ===> Scroll ===> PAGE || || DBRM time stamp . . . . . : 17BA3AB3 0BF192E5 (hex) || Load module time stamp . . : 17BA3AB3 0BF192E5 (hex) || || ------------------- DB2 Subsystem (SYSIBM.SYSPACKAGE) -------------------- || ------- Timestamp -------- --- Collection --- -------- Version --------- || 1 18 1 26 || ----+----1----+--- ----+----1----+----2----+- || 179D4C94 035E80E8 (hex) collection1 || 17BA3AB3 0BF192E5 (hex) collection2 || ***************************** Bottom of data ****************************** || || || |'-----------------------------------------------------------------------------'.---------------------------------------------------------------.| BND375I Warning: multiple instances of MEMBER found in ssid | '---------------------------------------------------------------'

The output screen for package mode is larger and contains more information

The portion of the panel containing collection specific information is scrollable

Note the message at the bottom indicating multiple instances

Page 39: To Bind Or Not To Bind – Let Bind Manager Decide

39

39

DBRM Browser

• Shows a formatted display of the DBRM Contents

Page 40: To Bind Or Not To Bind – Let Bind Manager Decide

40

40

DBRM Browser Panel

--------------------------- Browse DBRM ----------------------------COMMAND ===>

DBRM Data Set Name . . ‘your.dbrm.library' Member . . . . . member

This panel requires a fully qualified DSN

If you do not supply a member name, you can browse a list of members and select

one

Wildcards are not supported

Page 41: To Bind Or Not To Bind – Let Bind Manager Decide

41

41

DBRM Browser Output

Command ===> Scroll ===> CSR ********************************* Top of Data **********************************

-------------DBRM Header

-------------

Record ID (DBRMHID) DBRM Record Length (DBRMHLEN) 160 Precompile User ID (DBRMUSER) useridProgram name (DBRMPROG) member Precompile timestamp (DBRMTIMS) 2005.10.26.19.14.32.299083

( 17BA3AB30BF192E5 hex ) Options (DBRMPOPT) APOST,PERIOD,APOSTSQL,GRAPHIC(NO),

LANG=COBOL II,TIME(LOCAL),DECIMAL(31),FOLD, FLOAT(IEEE),SQL(DB2)

Character set ID (DBRMCCSID) 0000 (hex) Max section number (DBRMMAXS) 0 Entry stmt format (DBRMTYPE) 1 Reserved (DBRMSCC) 0000 (hex) Flags 80 (hex) Dependency marker (DBRMPDRM) N DB2 Version (DBRMMRIC) K (Version 7)

The output from the Browse DBRM function is contained in a temporary dataset.

The user is automatically placed in Browse mode to see the output.

The top of the dataset contains the DBRM header information.

Page 42: To Bind Or Not To Bind – Let Bind Manager Decide

42

42

DBRM Browser Output

Section 3 Statement nbr 236 SQL statement:

SELECT CURRENT TIMESTAMP INTO : H FROM SYSIBM . SYSDUMMY1 Host variables referenced by this statement:

TYPE=Output VARIABLE=WS-WORK-FLDS.WS-CURR-TIMESTAMP

Section 1 Statement nbr 274 SQL statement:

OPEN TBL_CURSOR Host variables referenced by this statement:

TYPE=Undefined VARIABLE=WS-WORK-FLDS.WS-P1-DEC TYPE=Undefined VARIABLE=WS-WORK-FLDS.WS-P2-DEC

Section 4 Statement nbr 298 SQL statement:

SELECT CURRENT TIMESTAMP , CURRENT TIMESTAMP - 15 SECONDS INTO : H , : H FROM SYSIBM . SYSDUMMY1

Host variables referenced by this statement: TYPE=Output VARIABLE=WS-WORK-FLDS.WS-CURR-TIMESTAMP TYPE=Output VARIABLE=WS-WORK-FLDS.WS-COMP-TIMESTAMP

Here are a few SQL statements as shown by the DBRM browser.

Easier to read than the DBRM

Page 43: To Bind Or Not To Bind – Let Bind Manager Decide

43

43

DBRM Rebuilder

• Creates a usable DBRM from the DB2 catalog

This utility could be very useful in shops where there is a large base of legacy code.

You could actually bind a program even if both the Source and DBRM were lost.

Page 44: To Bind Or Not To Bind – Let Bind Manager Decide

44

44

DBRM Rebuilder Menu

--------------------------------------------------------------

DBRM Rebuilder

COMMAND ===>

Select one of the following options:

1 PLAN Plan mode

2 PKG Package mode

X EXIT End dialog

Subsystem ID . . . . . . ssid

Here’s the sub-menu for the DBRM rebuilder

Page 45: To Bind Or Not To Bind – Let Bind Manager Decide

45

45

DBRM Rebuilder – Package mode

DBRM RebuilderCommand ===>

Specify collection and package names

Collection . . . . . . . collid----+----1----+---1 18

Package (DBRM) . . . . . member ----+---1 8

Specify the output DBRM library DBRM library . . . . . ‘your.dbrmlib'

This panel requires a fully qualified DSN for the DBRM library.

The collection and package must be supplied completely.

Wildcards or search feature are not supported

Page 46: To Bind Or Not To Bind – Let Bind Manager Decide

46

46

DBRM Rebuilder – Package mode

Collection . . . . : collidPackage . . . . . : member

Select the desired version

1 64 ----+----1----+----2----+----3----+----4----+---

. 2005-10-07-19.44.06.405120

. 2005-10-21-19.31.54.724012

. 2007-04-12-15.02.15.350200

. 2007-04-16-19.20.45.773532

. 2007-05-07-19.10.02.623747

. 2007-05-12-12.48.38.155840

. 2007-05-19-19.26.29.013473

. 2007-06-09-13.09.23.673500 '

If multiple version are found, this panel will be displayed

Select a version and press enter to continue

Page 47: To Bind Or Not To Bind – Let Bind Manager Decide

47

47

DBRM Rebuilder – Package mode

.-------------------------------------------------.| Confirm Update || COMMAND ===> || || The DBRM library already contains a member || named MEMBER. || || If you continue, the existing member will be || replaced (overwritten) by the new (rebuilt) || DBRM. || || Press ENTER to continue (replace the existing || member). || || Press END to cancel the operation (do not || overwrite the member). |'-------------------------------------------------'

This warning message is issued if you attempt to rebuild a DBRM that already

exists.

Page 48: To Bind Or Not To Bind – Let Bind Manager Decide

48

48

DBRM Rebuilder – Package mode

DBRM Rebuilder DBRM CREATED Command ===>

Specify collection and package names

Collection . . . . . . . collid----+----1----+---1 18

Package (DBRM) . . . . . member ----+---1 8

Specify the output DBRM library DBRM library . . . . . ‘your.dbrmlib'

After successful creation you wind up back at the start screen with the DBRM

CREATED message in the upper right corner.

Page 49: To Bind Or Not To Bind – Let Bind Manager Decide

49

49

DBRM Rebuilder – Package mode

DBRM µ$REBUILTmember ¼ p 2 2005-10-07-19.44.06.405120

DBRM K bDECLARE D73_CURSOR CURSOR FOR SELECT D73 . TO_DBON FROM D73_A999 AS D73 WHERE D73 . FROM_DB2_LOCATION = : H FOR READ ONL

D MFS-D73-A999.FROM-DB2-LOCATION DBRM ´ ¸ ÑINSERT INTO HT6_A999 ( OPERATOR_ID , LAST_MNT_DA, LAST_MNT_OPID , ORN_CHG_DB2_LOC , ORN_LOC_CHG_DT_TM , OPR_PSW_TX , OPR_DT , OPR_LAS_LOGON_DT , OPR_LOGON_ATP_CT , OPR_DISABLED_CD , OPR_MUL_LO, OPR_NM , OPR_PSW_CHG_ALW_CD , PSW_EXPR_DAY_CT , OPR_EXPT_STR_DT , OPR_RS_DT , OPR_ENCR_PSW_1_TX , OPR_ENCR_PSW_2_TX , OPR_ENCR_PSW_3_TX , OPR__4_TX , OPR_ENCR_PSW_5_TX , OPR_ENCR_PSW_6_TX , PEOPLESOFT_ID ) VALUES (URRENT TIMESTAMP , : H , : H , : H , : H , : H , : H : H , : H , : H , :, : H , : H : H , : H , : H : H , : H , : H , : H , : H , : H , : H , :

D MFS-HT6-A999.OPERATOR-ID D -A999.LAST-MNT-OPID D MFS-HT6-A999.ORN-CHG-DB2-LOC

D MFS-HT6-A999.ORN-LOC-CHG-DT-TM D MFS-HT6-A

Here’s a look at the DBRM. Notice the text $REBUILT on the header record?

Page 50: To Bind Or Not To Bind – Let Bind Manager Decide

50

50

Index Utility

• Creates a list of indexes for a specific table

This feature is included in most vendor DBA toolsets.

I’m not sure how it fits with the rest of the Bind Manager toolset.

Page 51: To Bind Or Not To Bind – Let Bind Manager Decide

51

51

Index Utility Panel

Bind Manager Index Utility

COMMAND ===>

Specify the table whose indexes are to be displayed:

Subsystem ID ssid

Table name creator.table

----+----1----+----2----+--

Just specify the DB2 subsystem and qualified table name

Remote tables (3 part name) are not supported

Wildcards in the table name are not supported

Page 52: To Bind Or Not To Bind – Let Bind Manager Decide

52

52

Index Utility Output

.---------------------------- Available Indexes -----------------------------.| Row 1 to 1 of 1 || COMMAND ===> Scroll ===> PAGE || || || || ------- Index Name -------- ---------- Index Key Columns ----------- || . Creator.index DB2_SYSTEM (A), IXCREATOR (A), IXNAME (+ || ***************************** Bottom of data ***************************** || || || || || || || || || || |'----------------------------------------------------------------------------'

The output is a scrollable ISPF panel showing all indexes for the table entered

Page 53: To Bind Or Not To Bind – Let Bind Manager Decide

53

53

Batch Bind Manager Utilities

• Static SQL load module report

• Catalog Cleanup utility

• DBRM Generator utility

• Timestamp list utility

Most of the same capabilities (and a few new ones) are available as batch jobs.

Page 54: To Bind Or Not To Bind – Let Bind Manager Decide

54

54

Static SQL load module report

• Runs Batch only

• Specify

• Load Library

• Report shows

• List of all modules and if they contain static SQL

This is a handy way see which programs use static SQL (and which do not). There

are other ways to do this, but not one as easy.

Page 55: To Bind Or Not To Bind – Let Bind Manager Decide

55

55

Static SQL load module report : JCL

//*

//* CREATE A REPORT OF LOAD MODULES CONTAINING STATIC SQL:

//*

//BNDA007 EXEC PGM=BNDA007

//STEPLIB DD DSN=bind.manager.loadlib,DISP=SHR

//SYSUDUMP DD SYSOUT=*

//SYSPRINT DD SYSOUT=*

//SYSOUT DD SYSOUT=*

//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(10,10))

//LOADLIB DD DSN=your.installation.loadlib,DISP=SHR

//

STEPLIB: the library where the Bind Manager routines reside

LOADLIB: the load library you wish to report on

SYSPRINT: the report dataset

Page 56: To Bind Or Not To Bind – Let Bind Manager Decide

56

56

Static SQL load module report : Output

Load Library: large.production.loadlib

--LMOD-- CSECT SQL?

AA0001 AA0001 Yes AA0002 AA0002 Yes AA0003 AA0003 Yes AA0004 AA0004 Yes B01150 No B01540 B01540 Yes B01540X B01540 Yes B01541 B01541 Yes B02232 No B02233 DB2NTRY Yes B02234 B02234 Yes B02235 No B02235A No B02236 B02236 Yes B02238 B02238 Yes B02239 B02239 Yes

The report shows ALL modules in the specified load library

The SQL? Column indicates if SQL is present in the program

Page 57: To Bind Or Not To Bind – Let Bind Manager Decide

57

57

Catalog Cleanup utility

• Runs Batch only

• Specify

• DB2 SSID

• Load Library(s)

• Member name(s) (wildcards OK)

• Output

• FREE plan/package statements generated for plans/packages with no matching load module

Page 58: To Bind Or Not To Bind – Let Bind Manager Decide

58

58

Catalog Cleanup utility : JCL

//BNDA020 EXEC PGM=BNDA020

//STEPLIB DD DSN=bind.manager.loadlib,DISP=SHR

// DD DSN=db2.loadlib,DISP=SHR

//SYSUDUMP DD SYSOUT=*

//SYSPRINT DD SYSOUT=*

//SYSOUT DD SYSOUT=*

//*BRMOUT DD SYSOUT=*

//BNDFCMD DD SYSOUT=*

//SYS001 DD DSN=application.loadlib,DISP=SHR

//BNDIN DD *

DSN(ssid)

/*

STEPLIB: the library where the Bind Manager routines reside

SYS###: the load library (libraries) you wish to search

SYSPRINT: the report dataset

BNDFCMD: generated FREE package/plan commands

Page 59: To Bind Or Not To Bind – Let Bind Manager Decide

59

59

Catalog Cleanup Utility : SYSPRINT

BND601I Begin Program at Wed Feb 27 14:51:39 2008PK41941

BND623I BNDIN found BND605I Connect to SSID DBA0 requested BND637I This is a V8 (or later) system BND603I 25166 SYSIBM.SYSPACKAGE entries BND604I 24606 working package data entries BND636I BNDA021 return = 0 BND602I End Program at Wed Feb 27 17:11:51 2008

Page 60: To Bind Or Not To Bind – Let Bind Manager Decide

60

60

Catalog Cleanup Utility : SYSPRINT

BND601I Begin Program at Mon Feb 11 09:06:46 2008

PK41941

BND623I BNDIN found

BND690I The follow are the SQLCA Fields:

DSNT408I SQLCODE = -991, ERROR: CALL ATTACH WAS UNABLE TO ESTABLISH AN IMPLICIT CONNECT OR OPEN TO DB2.

RC1=000C RC2=00F30006

DSNT418I SQLSTATE = 57015 SQLSTATE RETURN CODE

DSNT415I SQLERRP = DSNACA00 SQL PROCEDURE DETECTING ERROR

DSNT416I SQLERRD = 0 0 0 -1 0 0 SQL DIAGNOSTIC INFORMATION

DSNT416I SQLERRD = X'00000000' X'00000000'

X'00000000' X'FFFFFFFF’

An error in the format of the SSID parameter (omitting the parenthesis) produced

this message.

Page 61: To Bind Or Not To Bind – Let Bind Manager Decide

61

61

Catalog Cleanup Utility : BNDFCMD

** FREE PACKAGE (ACS911_D_MAIN.ACSBQLU.(ACS_0911))

** FREE PACKAGE (ACS911_D_MAIN.ACSBQOS.(ACS_0911))

** FREE PACKAGE (ACS911_D_MAIN.ACSBQPA.(ACS_0911))

** FREE PACKAGE (ACS911_D_MAIN.ACSBQPD.(ACS_0911))

** FREE PACKAGE (ACS911_D_MAIN.ACSBQPG.(ACS_0911))

** FREE PACKAGE (ACS911_D_MAIN.ACSBQPI.(ACS_0911))

** FREE PACKAGE (ACS911_D_MAIN.ACSBQPL.(ACS_0911))

** FREE PACKAGE (ACS911_D_MAIN.ACSBQPP.(ACS_0911))

** FREE PACKAGE (ACS911_D_MAIN.ACSBQPS.(ACS_0911))

** FREE PACKAGE (ACS911_D_MAIN.ACSBQPX.(ACS_0911))

This is just a sample of some of the FREE commands that were generated

Page 62: To Bind Or Not To Bind – Let Bind Manager Decide

62

62

DBRM Generator

• Runs Batch or Online

• Rebuilds a usable DBRM from the DB2 catalog

• Bytes 10-17 of DBRM header contain “$REBUILT”

This utility is also available from the ISPF menu.

Page 63: To Bind Or Not To Bind – Let Bind Manager Decide

63

63

DBRM Generator – JCL

//BINDMGR EXEC PGM=BNDA024 //STEPLIB DD DSN=bind.manager.loadlib,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(10,10)) //DBRMLIB DD DSN=installation.dbrmlib(member),DISP=SHR //SYSIN DD *

SSID ssidPACKAGE collection.name.(version)

/*

Page 64: To Bind Or Not To Bind – Let Bind Manager Decide

64

64

DBRM Generator – Output

DBRM µ$REBUILTmember ¼ p 2 2005-10-07-19.44.06.405120

DBRM K bDECLARE D73_CURSOR CURSOR FOR SELECT D73 . TO_DBON FROM D73_A999 AS D73 WHERE D73 . FROM_DB2_LOCATION = : H FOR READ ONL

D MFS-D73-A999.FROM-DB2-LOCATION DBRM ´ ¸ ÑINSERT INTO HT6_A999 ( OPERATOR_ID , LAST_MNT_DA, LAST_MNT_OPID , ORN_CHG_DB2_LOC , ORN_LOC_CHG_DT_TM , OPR_PSW_TX , OPR_DT , OPR_LAS_LOGON_DT , OPR_LOGON_ATP_CT , OPR_DISABLED_CD , OPR_MUL_LO, OPR_NM , OPR_PSW_CHG_ALW_CD , PSW_EXPR_DAY_CT , OPR_EXPT_STR_DT , OPR_RS_DT , OPR_ENCR_PSW_1_TX , OPR_ENCR_PSW_2_TX , OPR_ENCR_PSW_3_TX , OPR__4_TX , OPR_ENCR_PSW_5_TX , OPR_ENCR_PSW_6_TX , PEOPLESOFT_ID ) VALUES (URRENT TIMESTAMP , : H , : H , : H , : H , : H , : H : H , : H , : H , :, : H , : H : H , : H , : H : H , : H , : H , : H , : H , : H , : H , :

D MFS-HT6-A999.OPERATOR-ID D -A999.LAST-MNT-OPID D MFS-HT6-A999.ORN-CHG-DB2-LOC

D MFS-HT6-A999.ORN-LOC-CHG-DT-TM D MFS-HT6-A

Here’s a look at the DBRM. Notice the text $REBUILT on the header record?

Page 65: To Bind Or Not To Bind – Let Bind Manager Decide

65

65

DBRM/Catalog Cross Checker

• Runs Batch Only

• Specify

• DB2 SSID

• DBRM member name (wildcards OK)

• Report shows

• All matching occurrences of the specified DBRM in the DB2 catalog

• Contoken values are expressed in external Timestamp format

Page 66: To Bind Or Not To Bind – Let Bind Manager Decide

66

66

DBRM Cross Checker – JCL

//BNDA030 EXEC PGM=BNDA030 //STEPLIB DD DSN=bind.manager.loadlib,DISP=SHR//SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //DBRMLIB DD DSN=installation.dbrmlib,DISP=SHR //SYSIN DD *

SSID ssid DBRM member

/*

Page 67: To Bind Or Not To Bind – Let Bind Manager Decide

67

67

DBRM Cross Checker – Output

Target DBRM . . . . . . member Target Timestamp . . . 2006.04.19.12.18.38.372010 Target Version . . . .

---------------------------------------------------------Location: Collection: collid1 Version: Timestamp: 2008.01.28.14.33.09.723109 ---------------------------------------------------------Location: Collection: collid2 Version: Timestamp: 2005.04.21.15.59.15.318892 ---------------------------------------------------------Location: Collection: collid3 Version: Timestamp: 2006.04.19.12.18.38.372010 *** MATCH ***

Here’s a look at the DBRM. Notice the word REBUILT on the header record?

Page 68: To Bind Or Not To Bind – Let Bind Manager Decide

68

68

Conclusions on the tools

• A useful set of tools for automating some repetitive processes.

• Some inconsistencies in syntax with existing DB2 products

• An “interesting” error generated by faulty syntax

Page 69: To Bind Or Not To Bind – Let Bind Manager Decide

69

69

More Info.

• Product Overview:

• http://www-306.ibm.com/software/data/db2imstools/db2tools/db2bindmngr.html

• IBM Publications Library for Bind Manager:

• http://www-306.ibm.com/software/data/db2imstools/db2tools-library.html#bindmgr-lib

Page 70: To Bind Or Not To Bind – Let Bind Manager Decide

70

70

Known Bugs & fixes

• APAR PK56186

• PTF UK31795

• Desc: Program BNDA024 produces incorrect statement numbers for new DBRMs

Under V8 NFM the statement number column is increased in size. The rebuilt

DBRM contains a space X’40’ embedded in the statement number. (causes

statement numbers to appear well out of “normal” range.

Page 71: To Bind Or Not To Bind – Let Bind Manager Decide

71

71

Questions?

Page 72: To Bind Or Not To Bind – Let Bind Manager Decide

72

72

Joe GoodmanDST Systems Inc.

[email protected]

Session #####

To Bind Or Not To Bind –Let Bind Manager Decide