Fast Path DB
Fast Path DB
September 1997
IBML
SG24-4301-00
International Technical Support Organization
September 1997
Take Note!
Before using this information and the product it supports, be sure to read the general information in
Appendix D, “Special Notices” on page 145.
This edition applies to Version 5 of IMS/ESA, Program Number 5695-176, for use with the MVS/ESA or OS/390
Operating Systems.
When you send information to IBM, you grant IBM a non-exclusive right to use or distribute the information in any
way it believes appropriate without incurring any obligation to you.
Figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii
Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
The Team That Wrote This Redbook . . . . . . . . . . . . . . . . . . . . . . . . . xi
Comments Welcome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii
Contents v
A.3.3 Price Movement Functions . . . . . . . . . . . . . . . . . . . . . . . . 108
A.3.4 Market Close Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 110
A.3.5 Market Open Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 119
A.3.6 Market Status Change Functions . . . . . . . . . . . . . . . . . . . . . 121
A.3.7 Stock Exchange System . . . . . . . . . . . . . . . . . . . . . . . . . . 122
A.3.8 Testing Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
A.4 Stage One Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
IBM′s Information Management System (IMS) Fast Path provides a rich set of
facilities for applications where performance, capacity and availability are
paramount. This redbook provides an introduction to IMS Fast Path for both the
IMS user and the IMS Database Control user who is using CICS as the
transaction manager.
The diskette accompanying this redbook contains all the source code referenced
in book. An HTML version of this redbook is also available on this diskette, in
the file “a:\HTML\FP.HTM.”
Attila Fogarasi
Specialist for IMS at the Application Development
and Data Management ITSO Center, San Jose
Tom Ramey
Frank Ricchio
Jack Wiedlin
IBM Santa Teresa Lab
Ron Barber
IBM Almaden Research Center
Comments Welcome
Your comments are important to us!
This chapter provides a short description of Fast Path for readers who are
familiar with IMS but not with Fast Path. Readers familiar with Fast Path may
safely skip this chapter. We revisit many of the themes in this chapter in
Chapter 5, “When and How to Use Fast Path” on page 47.
Fast-Path functions fall into two categories, database and expedited message
handling (or EMH). These functions are largely independent of each other so we
deal with them separately.
There are two kinds of Fast Path database: data entry databases (or DEDBs for
short) and main storage databases (or MSDBs for short).
A number of utilities lock at unit of work level, so it is important not to make the
unit of work too large. On the other hand, if your unit of work is too small, the
minimum amount of overflow space (one CI) might be too large a proportion of
the unit of work. There are more details on how to choose the size of a unit of
work in 5.3.3, “Picking a Unit of Work Size” on page 62.
1.2.1.3 Areas
You can divide your DEDB into a number of data sets, called areas . These are
not the same as data set groups, because an area contains all segment types.
Most commands and utilities operate at an area level, rather than on the whole
database. For example you can restore a damaged area of a DEDB while the
rest of it is in use.
You will probably want to write your own randomizer for a DEDB with more than
one area. If you cannot wait to find out why, turn to 5.2.1.1, “Why You Would
Write a DEDB Randomizer” on page 51.
IMS reads from only one area data set at a time, but uses them all in turn, thus
spreading the I/O load across several devices (if that is how you have defined
your data sets). If IMS cannot read a CI from one area data set, it will read the
CI from another area data set. IMS remembers that the read failed and will not
try to read that CI from that area data set. This is called record deactivation .
IMS writes to every area data set, in order to keep them all in line. If IMS cannot
write a CI to one area data set, it deactivates that record. If IMS cannot write a
CI to any of the area data sets, it prevents further access to that CI, but keeps
the area open.
Provided you have at least one good copy of each CI, IMS can always create an
error-free area data set. You can do this while the area is still in use.
IMS can keep track of up to ten bad writes and four bad reads per area data set.
IMS stops using an area data set if it exceeds these limits. This is not a disaster
if you are using MADS. You can defer database recovery until a convenient
time. However, we do not recommend that you run for a long period of time with
bad CIs.
There is a similar feature for full-function databases, but the I/O error tolerance
for DEDBs is much more sophisticated.
There can only be one SDEP segment type in a DEDB and it must be the first
child of the root in the DBD. If you want to process the segments in a different
order, you can change the order of the segments in your PSB.
IMS holds all SDEPs together in a special part of the DEDB. It holds the SDEPs
in the sequence they were inserted, regardless of which root they belong to.
This reduces the number of write I/Os.
SDEPs still exist even if you delete their root. In this case, you cannot retrieve
the SDEPs except by using the utilities.
You cannot use data sharing with SDEP segments in IMS Version 5.
IMS maintains a last-in, first-out (LIFO) pointer chain through the SDEPs of each
root. This is so that IMS can insert the next segment with a minimum of I/O, but
it also means that an SDEP cannot have a sequence field. Although it is
possible to follow the pointer chain to retrieve a given SDEP, doing so is likely to
involve a lot of I/O. The SDEPs of a root will be scattered throughout the DEDB,
so each pointer is likely to point to a different CI.
There is a special DLI call (POS) which finds the position of SDEPs. This is
useful when deciding where one of the batch utilities should start.
Typically you would use a subset pointer to keep your place in a long twin chain,
so that IMS would not have to search through the chain from the beginning.
You set and use subset pointer with special SSA command codes.
We go into more detail about subset pointers in 2.1.3, “Subset Pointers (SSP)”
on page 10 and 5.2.6, “Using Subset Pointers” on page 56.
VSO databases have better locking mechanisms than other DEDBs. IMS locks
VSO data at segment level rather than CI level. IMS releases locks on VSO data
once it has written the data to the data space. This is a faster process than with
other DEDBs, where IMS holds the locks until it has written the data to DASD.
You have the option to open VSO DEDBs or even to load entire VSO DEDBs into
storage when IMS starts.
VSO DEDBs are similar to MSDBs. The IMS developers intend VSO to replace
MSDB (see 1.2.2.4, “Migrating Your MSDBs” on page 7 for more information).
Several of these restrictions apply because HSSP uses its own buffer pool (and
not the common Fast Path database buffer pool).
You can ask HSSP to take an image copy while it is processing. This is a fuzzy
image copy, but it is much faster than running your program with HSSP and then
taking an image copy. This is because HSSP is clever enough not to record a
log entry if it is also creating an image copy.
HSSP also allows you to process some but not all of the areas of a DEDB.
We have more to say about HSSP in 5.2.5, “Using HSSP” on page 55.
This is in contrast with full-function databases, where IMS waits for both the
logging and the database updates before proceeding.
One of the effects of this is that IMS does not remember which CIs are in the
buffer pool unless they are currently being used. This is in contrast to
full-function databases, where IMS will leave CIs in the buffer pool as long as
possible. We have more to say about this in 5.1.2, “Holding Data in Main
Storage” on page 49.
Each region has a number of buffers dedicated to it. A small number of overflow
buffers is also available for all regions to share. If a program exceeds its
allocation (including overflow), IMS backs out all its updates, and abends the
program if it is a message program. We have more to say about this in 5.1.3,
“Fast Path Database Buffers and Output Threads” on page 50.
There are utilities to help you manipulate the DASD copies of MSDBs.
A field call causes IMS to lock a segment for a short time during commit
processing (and not at all when you make your field call). This helps increase
transaction processing, but does mean that the data can have changed between
your call and the commit. One of the field-call options is to verify that other
updates have not invalidated your change.
You would typically use field calls for a rapidly changing field that many
transactions need to access. For example you might use field calls for a process
counter for a transaction designed for parallel processing. We explain this
example in greater detail in 5.1.1.3, “An Example Using Field Calls” on page 48.
If you are already using MSDBs, you should migrate them to VSO DEDBs. There
is a program (called the MSDB-to-DEDB conversion utility ) to help you migrate.
You can migrate without changing your application code.
There are more details on the conversion process in 5.6, “Converting an MSDB
to a DEDB” on page 65.
If you are planning a new application you should not use MSDBs. Later releases
of IMS will not enhance MSDB support and may drop support for MSDBs
altogether.
1.2.3.1 Speed
If you choose to use Fast Path databases for speed, then mixing them with
full-function databases is likely to cause performance bottlenecks. IMS waits
until it has written all full-function database updates and the matching log
records to DASD before completing the commit process. With Fast Path
databases, IMS waits only for the logging to occur. In a very busy system,
another transaction could be wanting to use this region, but it must wait for the
full-function database updates to complete. 1
1.2.3.2 Function
If, on the other hand, you choose Fast Path databases for their function, then
mixing them with full-function databases has no effect.
Please note that you can use the Fast Path databases without using EMH. You
should use EMH only where performance is so critical that even the few I/Os
associated with the IMS message queue are too many. If you use EMH with a
1 This problem does not arise if you only read the full-function databases, as there are no updates to log and so no effect on
performance.
You can also use EMH without using Fast Path databases. This is unlikely to
improve performance unless the processing does not involve any databases at
all.
EMH was written at a time when the usual message-queue handling was less
efficient than it is now. EMH is faster than using the message queue, but the
difference is less than it used to be.
We expand this topic in 5.7, “Using the Expedited Message Handler” on page 65.
You cannot use main storage databases from a CICS application. EMH is not
relevant because CICS has its own scheduling methods.
Fast Path has added many attractive new features since it was first introduced
with IMS/VS 1.3. This chapter summarizes the newer Fast Path features under
the following headings:
• Data entry database (DEDB)
• Main storage data base (MSDB)
• Expedited message handler (EMH)
• Application programming interface (API)
• Utilities
Most of the enhancements have been to provide yet higher performance and
higher availability in both normal and error situations. Even today, DEDB data
availability remains unmatched by other database and file management
products.
2 hierarchical direct
┌─────────┐
│ ROOT │
│ SEGMENT │
└────┬────┘
│
┌───────────────────┼────────//─────────┐
│ │ │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
│SDEP/DDEP│ │ DDEP │ │ DDEP │
│ SEGMENT │ │ SEGMENT │ │ SEGMENT │
└─────────┘ └────┬────┘ └─────────┘
│
.
.
│
┌───────────────────┼────────//─────────┐
│ │ │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
│ DDEP │ │ DDEP │ │ DDEP │
│ SEGMENT │ │ SEGMENT │ │ SEGMENT │
└─────────┘ └─────────┘ └─────────┘
The available copies are used in turn to satisfy read requests, but writes must be
done to all copies. At least one ADS per area is required.
Extra ADS copies may be added dynamically using the Area Create Utility.
See 3.1.2, “Multiple Area Data Sets” on page 20 for further information.
VSO will be attractive to customers with areas that are very heavily used, but in
addition, it is intended to provide a replacement for the main storage database.
For many years, MSDBs have offered exceptionally high performance, including
the ability for multiple applications to update the same data at the same time
with integrity using the field (FLD) call. However, their use was subject to
certain restrictions, such as single segment hierarchy, fixed length segments
only, no database recovery control (DBRC) support, and nonstandard backup and
recovery procedures and utilities. VSO DEDBs can have the full hierarchy, and
use standard DBRC, backup and recovery facilities. To complement the VSO
option, DEDBs have generally been enhanced in other ways. Segments can be
defined as fixed or variable length, and the DL/1 Field Call (FLD) has been
implemented for DEDB. (Note that these apply for all DEDBs, not just for VSO
DEDB.)
Because information about the error is recorded on the ADS itself, there is no
danger of accidentally reading bad data, even after a cold start.
With IMS Version 5, DEDBs with an SDEP segment defined cannot participate in
block-level data sharing. Areas using VSO are also excluded.
The size and maximum number of fast-path buffers was increased in IMS
Version 4. The maximum buffer size (BSIZE) is now 32 KB and the maximum
number of buffers (DBBF) is 99,999.
Prior to IMS Version 3, the image of an entire segment was logged when it was
replaced, even through much of the data might have remained unchanged. IMS
Version 3 introduced log reduction, where only the changed data is logged,
rather than the whole segment.
Since IMS Version2, virtual storage constraint relief has been provided, but also
certain limitations have become apparent.
In the past few years, EMH has received virtual storage constraint relief, and in
IMS Version 4, the management of the terminal buffers was completely revised
to use a dynamic buffer pool.
The INIT call that is relevant here uses the STATUS GROUPA character string in
the I/O area. This form of the INIT call is used to alert IMS that the application
program understands and is prepared to handle the new status codes. The new
status codes are BA and BB:
• BA indicates that required data was not available. Either the database was
not available or the requested block or record was not available. (A record
could be unavailable if the call requests a block-level data sharing lock that
is held by a failed subsystem.) Any updates done by IMS as part of this call
processing have been backed out. The state of the database is the same as
it was before this call was issued.
• BB is the same as BA, except that backout has proceeded as far as the
program′s last commit point. The backout is done for all databases. All
messages, except those issued through an EXPRESS=YES PCB, have been
cancelled. Database position for each PCB is at the start of its database.
This status code is returned for calls to fast-path databases only. If the call
has done no updating before the unavailable data is encountered, a BA is
returned. If updating has been done, the BB is returned.
The INIT STATUS GROUPA call should follow the first get unique (GU) command
to the I/O PCB in message processing programs (MPPs). If the INIT call
precedes the GU, the primary message is lost but is retrieved again when the
GU is issued.
The FLD call has always been available for use with MSDBs. In IMS Version 5,
it became available for use with DEDBs as well.
The FLD call is more fully explained in 4.2.1, “Field (FLD) Call” on page 40.
2.5 Utilities
Eight utilities relevant to Fast Path have been enhanced since IMS Version 1.3:
• Log recovery utility (DFSULTR0)
• Database image copy utility (DFSUDMP0)
• HSSP image copy utility
• CIC enhancement utility
In IMS Version 1.3 and IMS Version 2, if incomplete chains of Fast Path log
records exist in the OLDS, the utility replaces them with padding records (x′48′).
Since IMS Version 3, the log recovery utility does not replace incomplete chains
of Fast Path log record with padding records, because the database recovery
utility applies only complete sets of log records for DEDB recovery. The same is
true for emergency restart.
If the area being initialized is registered with DBRC, then its status must be
unavailable with recovery needed. These flags are the default settings when the
area is registered.
If MADS are to be used, the user may initialize one or more of the ADSs in a
single run of this utility. At the completion of this utility, the recovery-needed
flag is turned off for each area initialized and the available flag is turned on for
each ADS initialized.
Details of this utility can be found in 3.3.1, “DEDB ADS Create Utility
(DFSUMRI0)” on page 27.
IMS Version 5 introduced a replacement utility, called the High Speed DEDB
Reorganization Utility (DBFUHDR0) . While performing the same function, the
new utility runs several times faster than the original, and is described in 3.3.3,
“High Speed DEDB Reorganization Utility (DBFUHDR0)” on page 27.
One of the most valuable benefits of Fast Path is high availability. From its
inception, Fast Path has been designed to provide the most availability possible.
It has implemented several attractive features that contribute to increased
availability and continuous operation. The availability-enhancing features of Fast
Path are summarized under the headings
• DEDB
• Utilities.
AREA3
┌───────────────────┐
│ │
AREA2 │ ┌─────┐ │
┌─────────────────┴─┐ │ R │ │
│ │ └──┬──┘ │
AREA1 │ ┌─────┐ │ │ │
┌─────────────────┴─┐ │ R │ │ ┌───┴───┐ │
│ │ └──┬──┘ │ │ │ │
│ ┌─────┐ │ │ │┌──┴──┐ ┌──┴──┐ │
│ │ R │ │ ┌───┴───┐ ││ D │ │ D │ │
│ └──┬──┘ │ │ │ │└─────┘ └─────┘ │
│ │ │┌──┴──┐ ┌──┴──┐ │ │
│ ┌───┴───┐ ││ D │ │ D │ ├─────────────────┘
│ │ │ │└─────┘ └─────┘ │
│ ┌──┴──┐ ┌──┴──┐ │ │
│ │ D │ │ D │ ├─────────────────┘
│ └─────┘ └─────┘ │
│ │
└───────────────────┘
Write operations are performed to each ADS, but reads are satisfied from one
ADS only. On a read error, an attempt is made to read the data from another
ADS. A read error is thus completely transparent to the application program.
Only in the rare instance where read operations to all the ADSs are unsuccessful
The area is stopped only if all ADSs are stopped. Multiple ADSs of the same
area can be compared and additional ADSs can be built using online utilities.
These utilities are the DEDB area data set create utility and DEDB area data set
compare utility. The DEDB area data set create utility also offers an alternative
to off-line DB recovery since an error-free ADS can be built from multiple input
ADSs, each of which may contain errors, but all of which are on different CIs.
Write Errors: Since IMS/VS 1.3, a write error does not result in the area being
stopped. Instead, the CI in error is said to be deactivated . That is, the
identification of the CI in error is remembered, and further retrieve calls for the
deactivated CI result in an implicit read error (AO status code). This
implementation is referred to as record deactivation and uses an error queue
element (EQE) to keep track of each deactivated CI. As the area is no longer
stopped, a write error does not affect the entire area but only the affected CI.
The data that should have been written out was logged and is therefore fully
recoverable. But until a recovery is performed, the data is not available to
online processing.
Record deactivation is based on error queue elements. EQEs are used to keep
track of the relative byte address (RBA) of CIs with permanent write errors.
These EQEs are maintained in main storage but are also written to the second CI
of the ADS in error. This technique allows EQE information to be available
across all restarts, including cold starts. The recovery operation can be deferred
until the area can be more conveniently removed from the system. The only
time when an area is stopped for a write error is for what is called a severe
error situation. This is described as:
• A write error to the second CI or
• More than ten permanent write errors in an ADS
Since IMS Version 3, read errors on four different CIs in a MADS environment
are treated as a severe error and the affected ADS is stopped. To track these
errors, IMS builds a read error queue element (REQE) for each I/O error. These
REQEs are maintained in main storage and are not written to the second CI of
The number of write EQEs available can be displayed with a /DISPLAY AREA
command. The full capability of record deactivation is achieved in a multiple
area data set (MADS) environment.
┌─────────┐ ┌───────┬───────┬───────┬───────┬──────┐
│ │ │ │ │ │ │ │
│ CICS ├─────────┤ DBCTL │ DL/I │ DBRC │ IRLM │ BMP │
│ │ │ │ SAS │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
└─────────┘ └───────┴───┬───┴───────┴───────┴──────┘
│
│
┌─────┴─────┐
│ │
│ IMS DB │
│ │
└───────────┘
As part of the emergency restart process, the MSDBs are recovered using the
information from two sources:
• One of the MSDB checkpoint data sets (MSDBCP1 or MSDBCP2)
• The log data set
All MSDB updates from the checkpoint corresponding to the selected MSDB
checkpoint data set are applied using the system log.
A useful feature that aids availability is the ability to move an ADS from one disk
to another. An extra copy of the area is defined in DBRC, and then the create
utility is used to build a new ADS on the target volume. When this completes,
the original copy can be stopped and deleted.
BUILD phase: During the BUILD phase, segments are read in hierarchical
order from one data UOW and written into the reorganization UOW. A read or
write error during this phase causes the utility to terminate. However, since the
data UOW has not yet been modified, the area remains usable and available. At
the completion of this phase, the reorganization UOW contains the reorganized
data.
COPY phase: During this phase, the control intervals in the reorganization
UOW are written back to the original data UOW. A read error during this phase
stops the area and sets the recovery-needed flag set on (assuming MADS is not
used). A write error results in the building of an EQE for the ADS suffering the
error. Unless the error is severe, the utility continues and the ADS remains
usable.
For the high-speed DEDB reorganization utility, the input parameter BUFNO
specifies the number of buffer sets, each large enough to hold a full UOW, rather
than the number of buffers. For example, a UOW of 16 CIs would require a buffer
set of 16 buffers, each buffer holding one CI. Buffers are obtained dynamically
from a private buffer pool which is created when the utility begins processing.
This buffer pool can be extended as necessary, up to twice the original size. A
default value of three buffers sets (allowing up to six) is used if no value is
specified on the BUFNO parameter. This default of three allows one buffer set
for the UOW being reorganized, one buffer set for the reorganized output, and
one buffer set for any overflow access. If waits for buffers are experienced, the
buffer pool is extended until the maximum is reached. Thus, the utility
maximizes performance while using the minimum number of buffer sets. The
buffer pool is permanently page-fixed in real storage for performance reasons. If
real storage is limited, then the page-fixing of the buffer pool affects how many
copies of the reorganization utility you run simultaneously. For each area that is
being reorganized, a private buffer pool is created and page-fixed. The amount
of real storage used can be significant. For example, an area with 48 CIs, each
CI being 16 KB in size, using the default BUFNO specification, would require 2.3
MB of real storage before any buffer pool extensions.
Before IMS Version 4, it was recommended that an area be stopped and started
again just before taking a CIC. This minimized the amount of log data that would
have to be input to DB recovery should recovery be required. Clearly, this
interruption was undesirable, especially when aiming for continuous operations.
With an IMS Version 4 enhancement, this interruption is no longer necessary,
and continuous availability can be maintained while the CIC utility is run.
As its name suggests, Fast Path provides the very high performance it was
designed for. This chapter describes some of the features that contribute to its
excellent performance. Also considered are some of the newer features that
have made Fast Path even faster. The information is presented under the
following topics:
• Data entry database (DEDB)
• Main storage database (MSDB)
• Fast Path buffers
• Expedited message handler (EMH)
Because DEDB functions are a subset of the full DL/1 set, Fast Path does not
have to test for all the many options, (such as secondary indexes, logical
relationships, backward pointers, fixed or variable length, or which subpool to
use). This in itself produces a measurable benefit.
DEDB updates are not logged at call time. Instead, Fast Path simply notes what
data was changed. Then, at sync point, the noted information is used to build
the log records, and the IMS logger is called. Thus, the logger is called only
once per transaction, instead of at every update call.
DEDBs do not use buffer lookaside. Because the databases are expected to be
large, it is assumed that the data required by a DL/1 call will not already be in
the buffer pool. So, unlike with full-function, the buffer is not searched.
The DEDB locking strategy also helps to reduce CPU path length. Locks are
generally taken at the CI level, so fewer locks are needed than with full-function
databases. There are only two levels of lock, and they are usually held until
sync point, when appropriate ones are all released together. Again, this strategy
is much simpler than that used by the full-function IMS.
In summary, one would typically expect a DEDB call to use about half the CPU
path length of the same call against a hierarchical data access method (HDAM)
database.
IMS Version 5, eliminates DEDB I/O reads (apart from the first time each CI is
read after an area is opened) as the data is held in memory. Although not all
I/Os can be eliminated, techniques are available for improving or reducing the
impact of the I/Os that remain.
In IMS Version 4, chained writes are introduced, and the output thread
processing is changed to be even more efficient in output thread scheduling.
Consequently, IMS can update DEDBs more efficiently and release the CI lock
sooner, which leads to even better performance. The new output thread
processing has the following characteristics:
We recommend that you set the I/O priority for DEDB processing regions higher
than that for the control region.
MADS also can provide performance benefits. The read I/Os to the area are
spread across all the available ADSs, reducing the I/O load on any one volume.
Once inserted, SDEP segments can never be updated. Delete can only be done
using the DEDB sequential dependent delete utility (mass delete only).
Online retrieval using DL/1 get calls should be kept to a minimum because the
access is likely to be inefficient. A physical input operation is generally needed
for each segment.
Figure 5 shows an example of the same data base with one subset pointer. We
assume that the pointer was set by a previous call to point to segment B4.
Using the subset pointer, two calls are required to retrieve segments B4 and B5
instead of five calls in the previous example.
Subset pointers can only be used with DDEP segments. A maximum of eight
SSPs can be defined for each DDEP segment type. All SSPs are independent, so
multiple SSPs can point at the same segment occurrence.
In all other respects, VSO DEDBs are the same as non-VSO DEDBs. Therefore,
VSO DEDB areas are available for IMS DBCTL and LU6.2 applications, as well as
other IMS transaction manager applications. Use DBRC commands to specify
that you want to use a DEDB as a VSO DEDB.
Customers are expected to convert their MSDBs to VSO DEDBs. This process is
made feasible by providing DEDBs with functions that were previously unique to
MSDBs, namely:
• The field (FLD) call
• Fixed length segments
• The MSDB or DEDB commit view
For each CI update, IMS keeps track of where in the buffer the change starts,
and how long the changed data is. IMS uses the Fast-Path buffer prefix to track
these updates, and multiple slots are provided to store the location and length
information. At sync point time, these slots are read to build the log records.
When a CI update is within 104 bytes of a previous update, the previous slot is
also updated to incorporate the new update.
The number of slots in the buffer prefix is specified by the LGNR IMS execution
parameter. The safest value is calculated by taking the CI size and dividing it by
104. This resulting number of slots is guaranteed to be sufficient to control any
number of updates to the CI. If a smaller number is specified, to save buffer
prefix storage, IMS could run out of slots to save the update location information.
If that happens, IMS recalculates all the slot values based on a combining
constant of 208, rather than 104. If this is still not enough, IMS works with 416.
Should the number of slots still be too small, IMS logs the whole CI instead of
the individual changes.
Both recalculating the slots with a new combining constant and logging whole
CIs are inefficient, and to be avoided if possible. The Fast Path Log Analysis
Utility (DBFULTA0) reports on how often either event has happened.
UOW size is otherwise an arbitrary value. Users often set it, for want of any
better indicator, as one or two tracks worth of data on the DASD (though in fact
there is no link between UOW size and DASD occupancy).
Reports produced by the Fast Path log analysis utility give statistics about CI
contentions.
The Common Pool is defined to contain a certain number of buffers, and these
buffers are allocated in virtual storage at IMS startup time. However, buffers are
not usable until they have been page-fixed. The whole pool is not page-fixed.
Instead, certain events cause a number of buffers to become fixed, and thus
usable:
• A dependent region is given access to Fast Path by including two execution
parameters, namely NBA=m and OBA=n, in the region JCL.
• When the first dependent region with access to Fast Path starts, a
system-defined number (DBFX) of buffers are immediately page-fixed.
• As each dependent region starts, the NBA value determines how many
additional buffers are page-fixed.
• Also, as each region starts, IMS assesses all the current OBA values. If the
OBA of the starting region is greater than any previous OBA, then extra
buffers are page-fixed up to the new OBA. For example, if the previous
largest OBA had been 15 and the new region′s OBA is 25, then 10 more
buffers will be page-fixed.
• When an area is opened for a DEDB that has an SDEP defined in the
hierarchy, then one more buffer is page-fixed.
4.3.4 Sizing the Fast Path Buffer Pool and the Available Pool
It is clearly essential to provide enough buffers (DBBF) to fully meet the system
requirements at all times. However, there is no benefit in making the available
pool larger than necessary, since Fast Path does not exploit buffer lookaside.
The number of buffers allocated by the system at any point in time is given by
the following formula:
However, the real requirement is for sufficient page-fixed buffers. Updated DEDB
CIs, held in Fast Path buffers, are only written out to DASD after the
corresponding log records have been physically written out. These log writes
are not forced (other than by the log timer which fires if log records have
remained unwritten for more than 0.35 second). Consequently, updated DEDB
buffers remain unavailable after sync point time until log I/O and database I/O
have completed. The purpose of DBFX is to create page-fixed buffers specifically
available for holding these pending updates while the currently executing
programs have available their NBAs (and largest OBA).
In reality, at any point in time, it is unlikely that every region will be using its full
allocation of buffers. When a program emerges from sync point, it has no
buffers. Typically, the maximum it needs, reached shortly before sync point, is
less than the NBA. On average, a region uses less than half its NBA at any one
time.
A system with a variety of light update and enquiry transactions would probably
require only a small DBFX. But a system with many heavy update BMPs would
require a large DBFX.
The Fast Path log analysis utility should be run regularly to examine the region′ s
buffer use and to check for buffer shortages.
To ensure that rerequesting can be avoided, Fast Path provides the BMP
processing option, PROCOPT=P.
The PROCOPT=P option is specified during the PCB generation in the PCB
statement or in the SENSEG statement for the root segment. The option takes
effect only if the region type is a non-message-driven BMP. If specified, it offers
the following advantage:
• Whenever an attempt is made to retrieve or insert a DEDB segment that
requires a UOW boundary be crossed, a GC status code is set in the PCB
and no segment is returned or inserted. The calls for which this applies are:
G(H)U, G(H)N, POS, and ISRT. While the crossing of the UOW boundary has
For a BMP that uses PROCOPT=P, the NBA should be set to accommodate a
complete UOW (including typical requirement for updated overflow CIs), together
with the requirements of other Fast Path PCBs. Then add an extra one or two to
the NBA to ensure that the GC status occurs before there is a chance of running
out of NBA buffers.
In general, the performance advantage of using EMH derives from the fact that a
shorter path length is involved with the processing of functions handled by EMH,
as opposed to its full-function counterpart. The simplified approach to
scheduling mentioned above results in a shorter path length, and therefore
contributes to Fast Path′s ability to handle larger volumes of transactions. The
expedited method of handling messages and scheduling was geared toward
applications with simple transactions. The philosophy is to get transactions in
and out as quickly as possible, without requiring any unnecessary frills such as
priority scheduling.
With NFPACK, when Fast Path sends a transaction reply, it requests the SLUP
program in the workstation to acknowledge it with a definite response (DR2).
With FPACK, this System Network Architecture (SNA) acknowledgement is not
requested. Instead, the next input message to IMS is also treated as an
acknowledgement to the previous output.
The preceding chapters deal with the theory of Fast Path, what it can and cannot
do, and some of its restrictions. This chapter deals with the practicalities of
using Fast Path. You need to know the strengths and weaknesses of each
feature of Fast Path in order to make an informed decision about which to use.
Many of the sections in this chapter refer to functions of our sample application.
You might find it useful to refer to the description of this in Chapter 6, “Sample
Application” on page 69.
There are two additional field types you can define in your DBD for use with field
calls. You can use these field types only on a DEDB or an MSDB:
H halfword
F fullword
IMS also supports addition and subtraction with these field types.
You can ask IMS to make your update conditional on the value of this field you
are updating (or on other fields in the same segment).
You make field call requests to IMS by coding Field Search Arguments (FSAs)
which are similar to SSAs, except that you pass them to IMS instead of an I/O
area. You also need SSAs to identify the segment to which the FSAs apply. Full
details of how to code a field call are in the section“FLD call” in the chapter
“Writing DLI Calls for Your Application Program” of IMS/ESA V5 Application
Programming: Database Manager , SC26-8015.
You then make what is called a verify call. If the condition in the verify call is
true, we say the call has succeeded. If the condition is false, we say the verify
call has failed.
IMS intends you to use the verify call to check that a field has not changed value
between reading and updating. You can′t use it in a situation where it would be
normal for the condition to fail. There is an example of such a case in 6.2.3,
“Price Movements” on page 71.
locking, duration A field call never returns data to your program. If you must
know the exact value of a field, you must read it with one of the DLI get calls.
When you are doing this, be careful to use a get-only PCB, otherwise you will
lock the field until you reach a commit point.
From IMS Version 5 you can use field calls with any DEDB. We recommend that
you use fields calls with MSDBs or VSO DEDBs only. This is because non-VSO
DEDB reads usually go to DASD. 4 We assume you are using a field call because
you expect several programs to update the data at once. Although your
programs do not contend with each other for the data, they each must wait for
IMS to read their own copy of the data from DASD. If you have cached DASD
controllers, this overhead might be acceptable.
Process Serially
The simplest way is to process the messages serially and have a flag on the last
message as the trigger to perform the completeness check. This approach has
the advantage of simplicity and may be necessary if you cannot process the
messages in parallel. However, it is not a suitable approach if you need high
performance.
Process in Parallel
Another approach is to process the messages in parallel and have a counter to
say how many messages there are in total. The application decrements this
counter every time it finishes processing a message, and does the completeness
check when the counter reaches zero.
The counter, however, is a bottleneck. If you update the counter in the usual
way (using DLI GHU and REPL calls), your application still processes serially.
This is because each region has to wait for access to the counter in order to
update it. IMS locks the counter from the time your application reads it until the
commit processing has completed.
You need the field call. A field call locks the counter for a short time during
commit processing. The short duration of the lock allows your application to run
in parallel with only a very small chance of contention.
Using the field call by itself will not completely solve the contention problem in
this example. You would have to use an MSDB or a VSO DEDB for the counter
because non-VSO DEDB reads usually go to DASD. 4 You would then find your
programs waiting for DASD rather than access to the data.
You get different benefits from holding data in storage with different types of
database.
Reads benefit from this because there is no need to go to DASD to retrieve data
that is already in the buffer pool. If you find that IMS satisfies at least 97% of
read requests from the buffer pool, then your buffer pool is large enough. Even
if you do not have enough storage to achieve this for all databases, you may be
able to achieve it for a few highly active databases by creating a separate buffer
pool for them. 6 It may be that your truly active records are always in the buffer
pool, but this is difficult to prove.
Writes do not benefit from large buffer pools, because IMS writes updated
full-function buffers to DASD at commit time and waits for the write to complete.
DEDB writes do not benefit from large buffer pools either, but this is less of a
problem because output threads write the updated records to DASD after the
commit process has finished.
6 This is likely to be counterproductive if you create the special pool by taking storage away from an existing DLI buffer pool.
5.1.2.4 MSDBs
IMS holds MSDB records in storage all the time. Therefore, MSDBs are also
read fast and written fast.
Full-function databases are better than non-VSO DEDBs for data you often read
but seldom update, provided the data stays in the buffer pool. You can ensure
this by reading the data frequently enough or by having a large enough buffer
pool. This distinction becomes important only when you cannot use VSO for
some reason.
You define the buffer pool in the FPCTRL stage one macro. You specify the size
of each buffer, the total number of buffers, and the number of buffers that IMS
should page fix.
You also specify the number of output threads on the FPCTRL macro. An output
thread is a separate task that IMS starts. It writes updated DEDB buffers to
DASD once IMS has logged the update. This allows the region continue
processing. You need to specify enough output threads to prevent the Fast Path
database buffer pool from filling with updated CIs.
You may override any of the FPCTRL parameters at IMS start by using the
DFSPBxxx member of PROCLIB.
There is a full description of all these macros and parameters in the IMS/ESA V5
Installation Volume 2: System Definition and Tailoring , SC26-8024..
7 You can ensure that this first read does not affect your application performance by preloading the database. See 5.2.4.2,
“How to Use VSO” on page 55 for details.
8 Except for programs using HSSP, which each has its own buffer pool.
As a program executes, IMS will give it buffers until it tries to exceed the
region′s NBA. At this point, IMS warns the program (if it is a BMP) by returning
an FW status code on the DLI call.
IMS continues to give the program buffers until it tries to exceed the sum of NBA
and OBA. At this point, IMS discards all the program′s updates and abends it
(for message processing programs (MPPs) and interactive fast path programs
(IFPs)) or warns it (with an FR status code) for batch message programs (BMPs).
Most Fast Path commands and utilities operate on an area level, so they do not
affect the whole database at once. For example, you can recover one area of a
DEDB while the rest of it is in use.
Another reason you might want to use areas is to spread the I/O load across
several devices (and hopefully several physical paths in the system I/O
configuration).
For example, you might decide to place all data belonging to a particular branch
office in one area. If you had to stop that area, only users belonging to that
branch would be affected.
IMS will call your randomizer from several tasks at once. You must ensure your
code is reentrant.
Unless you have special requirements, you should write your randomizer to
select the area and call DBFHDC44 to select the RAP within the area. When you
code this logic, you should use the information IMS supplies. One of the things
to consider is the number of root anchor points (RAPs) in each area (areas do
not have to be the same size).
If you must write your own RAP selection logic, take care to avoid synonym
chaining. You are likely to get contention problems if you have a significant
amount of synonym chaining.
When you are writing your area selection logic, the following tips could save you
problems in the future:
Enlarging an Area — You can change the size of an area by modifying the AREA
macro in your DBD. If your randomizer selects the area, but lets DBFHDC44
choose the RAP, you need only unload and reload the area that changed. : You
must use the Database Tools DEDB unload/reload utility or write your own
program to perform the unload and reload.
You need to take an image copy of your area as soon as possible after
unloading and reloading. This is because the IMS log records for this area
cannot be used (they contain RBAs that have now changed).
How to Split an Area — You may find that some areas of your database grow
faster than others. Perhaps you chose to split your data by branch office and
some branches are unexpectedly much busier than others. You might also want
to split a large branch into several smaller ones. In either case you want to split
one area into several. : You need to modify your randomizer logic to take
account of the new areas in such a way that you affect only the area you are
splitting. You then unload and reload that area.
Again you must find a suitable program to do the unload and reload for you, and
you must take an image copy afterwards.
Further Help — If you want more information on how to write your own DEDB
randomizer, refer to the chapter “DEDB Randomizing Routine” in the IMS/ESA
V5 Customization Guide , SC26-8020.
While you can retrieve SDEPs with get next within parent (GNP) calls, it is much
better to retrieve them in batch using the DEDB SDEP scan utility. This utility
reads a range of SDEPs and writes them to a sequential file. You can use this
file in later job steps.
After you have finished with the SDEPs, delete them using the DEDB SDEP delete
utility.
You can find out more about these utilities in IMS/ESA V5 Utilities Reference:
Database Manager , SC26-8034.
A.3.2.2, “Deal Closed Program for IMS” on page 103 inserts SDEPs to the stock
database whenever we deal in a stock. Hopefully, this is a frequent occurrence,
so the insert must be fast. We do not read these segments again until the
market closes.
At the close of business, the DEDB SDEP scan utility extracts the SDEPs for
A.3.4.2, “Market Close Program” on page 111. The sample JCL for this job also
uses the DEDB SDEP delete utility; you can find it in A.3.4.3, “Market Close Job”
on page 119.
Obviously, using MADS is costly because you have several copies of the data.
There is also a cost at execution time because IMS has to update several copies
of the database simultaneously. The transactions using the DEDB do not notice
If you have very valuable data you should be able to justify MADS terms of the
time that it saves if you ever need to repair the database. Without MADS, you
could not use an area while you were recovering it. With MADS you can use the
DEDB area data set create utility to repair an area while it is still in use.
When you add a new area data set to an existing database, you use the DEDB
area data set create utility. The utility runs in parallel with online activity. You
would also use this utility to create an error-free area data set if any or all of
your existing area data sets have errors.
If you suspect differences between your area data sets, you can use the DEDB
area data set compare utility to find out.
It is worth pre-opening the majority of your VSO databases, to take the overhead
of opening the database away from the first application to execute. If a database
is active enough to justify being VSO, is likely to be active enough to justify early
opening.
If you have a database whose reference pattern varies significantly over time,
you may find it useful to free the VSO space that database is using and start
reading again from DASD. You can do this with the /VUNLOAD (virtual unload)
command.
For example, a financial application might need quick access to data entered
today, but not to data entered yesterday. If you issued a /VUNLOAD AREA
Use HSSP for only those programs that conform to its restrictions, because you
get better performance. You also get better performance in IMS Version 5
because of enhancements it has made to HSSP.
Consider using the option to let HSSP take an image copy while it is running.
This will save you time if you would normally take an image copy after your
program finishes. (HSSP is clever enough not to log updates for a database it is
copying).
There are a number of things you must know to get your program to use HSSP.
9 If you did not issue the /START AREA, IMS would not store any data in the data space. The /VUNLOAD disables VSO options
until the next /START AREA or IMS restart.
If you want HSSP to take an image copy for you, your DEDB and the image copy
data sets must be defined to DBRC. As a result, HSSP writes lots of messages
to the master and secondary master terminals when you are using the image
copy option.
You specify the SETR keyword in the DFSCTL file. There is more information
about this keyword in the section “Specifying HSSP Control Statements” in
IMS/ESA V5 Installation Volume 2: System Definition and Tailoring , SC26-8024.
HSSP locks at unit of work level. This can be a problem if it runs when your
database is busy.
Using subset pointers can save a lot of processing and I/O, because the only
other way to reestablish position within a twin chain is to read all the preceding
You use the following SSA command codes to manipulate subset pointers.
Rn Read subset pointer n to establish position.
Zn Set subset pointer n to zero.
Mn Set subset pointer n to the next segment.
Sn Set subset pointer n to the current segment.
Wn Set subset pointer n to the current segment, but only if subset pointer n is
currently zero.
You can use most of these codes in combination. Please refer to the section
“Command Codes” in the chapter “How Your Application Program Works with
the IMS Database Manager” of IMS/ESA V5 Application Programming: Database
Manager , SC26-8015, for further details and examples of use.
5.2.7.1 Reorganization
The high-speed DEDB direct reorganization utility reclaims fragmented DASD
space only. You cannot use the high-speed DEDB direct reorganization utility to
change a DEDB ′ s structure .
If you want to change the structure of a DEDB you must use the Database Tools
DEDB unload/reload utility or write your own program. This makes it more
difficult to add segment compression to a DEDB. If you want segment
compression, add it at the design stage.
The high-speed DEDB direct reorganization utility runs in parallel with online
work and locks at unit of work level. It reorganizes only direct dependent space
(and not SDEP space), hence the word “direct” in the name.
From IMS Version 5, the high-speed DEDB direct reorganization utility uses
HSSP, hence the words “high speed” in the name. If you specify enough buffers,
this utility will read ahead asynchronously. Refer to IMS/ESA V5 Utilities
Reference: Database Manager , SC26-8034 for details.
10 You can easily reestablish position at the end of a twin chain if you use Physical Child Last pointers and your segments are
unkeyed. See 6.3.10, “Long Twin Chains” on page 78 for an example of this.
In fact, DEDBs use PSB PROCOPT=P for something completely different. If you
specify this option for a BMP, IMS will return a GC status code whenever your
program crosses a unit of work boundary. This is a convenient time to take a
checkpoint, because a unit of work comprises a (small) number of database
records.
If you are using HSSP, you must take a commit point when you receive a GC
status.
You can have physical child last pointers (because you do not specify these with
the POINTER= parameter). These are useful for long twin chains, provided IMS
can be sure that you always insert new segments at the end of the chain. Our
sample application uses this type of pointer; see 6.3.10, “Long Twin Chains” on
page 78 for an explanation.
Inquiry applications often make use of a secondary index to retrieve data quickly
without using key sequence. There is a trade-off between the cost of
maintaining the index (when IMS updates the database) and the saving when
IMS reads the database using the index. You can code your application to
maintain its own index, but it is tedious and error prone.
If you cannot code your randomizer in such a way, a HIDAM database is likely to
better suits your needs.
11 Converting to VSO will not help because IMS uses the Fast Path database buffer pool to hold VSO CIs while they are in use.
The main problem arises because non-VSO DEDBs lock at CI level. If you use a
non-VSO DEDB in this case, you face a choice between wasting space and
locking. You waste DASD (and buffer pool) space if you store only one root per
CI. However, if you store many roots in a CI, you lock locking many root
segments together with the one you are accessing, resulting in contention
problems.
You do not avoid the problem by using a VSO DEDB, although VSO DEDBs lock
at segment level, because “segment level locking” is a misnomer. That is, VSO
and full-function databases lock a root segment and all of its children. In the
case of VSO and HDAM, this includes the RAP and all the roots chained from it .
The only solution is to have many anchor points per CI and segment level
locking. This is possible only with a full-function database.
There is a good example of this dilemma in our sample application. See 6.3.1,
“Currency Database” on page 73 for details.
5.2.8.5 Miscellaneous
If you need more than 127 segment types, you must use a full-function database.
DEDBs must be VSAM. If for some reason you cannot use VSAM, you would
have to use an OSAM full-function database.
Mixing both types can slow your application, but you would have to have a high
transaction rate before the slowing would become noticeable.
All IMS database segments have a prefix that contains information IMS needs to
know, but your application doesn′t. In a DEDB, the minimum prefix is 6 bytes:
• For the segment code, 1 byte
• For the segment type, 1 byte
• For the twin forward pointer, 4 bytes. 12
There is also an overhead for each DEDB CI. This is 15 bytes in an SDEP CI and
21 bytes in other CIs. If you want to know the layout of a CI in detail, please
refer to “Parts of a DEDB Area” in the IMS/ESA V5 Administration Guide:
Database Manager , SC26-8012.
We show how we calculated the average database record length for each of our
sample application databases in 6.3, “Databases” on page 73.
12 You cannot suppress this pointer; see 5.2.7.4, “Segment Pointers” on page 58.
13 This is different from a full-function database; see 5.2.7.5, “Fixed-Length Segments” on page 58.
14 Even in a well randomized database, there will be a small amount of synonym chaining, so some CIs will have more than one
root. The point is that most CIs will have only one root.
The following items discuss ways to control the database record length, so that
IMS can use DASD space (and hence buffer pool space) more effectively. These
tricks of the database designer′s trade are outside the scope of this book.
However, you will find more information the IMS/ESA V5 Administration Guide:
Database Manager , SC26-8012 and the IMS/ESA V5 Utilities Reference: Database
Manager , SC26-8034.
Having chosen the CI size, you need to inform IMS of the choice, using the SIZE
parameter of the AREA macro.
The base part contains CIs with root anchor points. IMS uses these CIs to store
root segments and as many of their dependents as will fit. IMS stores SDEP
segments in a different part of the data set.
The dependent overflow part contains CIs that IMS uses when a base CI runs out
of space. IMS assigns one of the dependent-overflow CIs to be a logical
extension of a base CI. If another base CI runs out of space, IMS assigns it a
different dependent-overflow CI (assuming there are any left). You can find out
what happens when the dependent-overflow CIs are all used up by referring to
5.3.4, “Designing an Area” on page 63.
Another way to think of a unit of work is as a number of roots plus all their direct
dependents. Understanding that a root′s dependents belong to the same unit of
work helps you understand why IMS encourages you to checkpoint at the end of
a unit of work.
You should bear the following factors in mind when choosing a unit of work size.
• The high-speed DEDB direct reorganization utility and HSSP programs lock
an entire unit of work at a time. You should therefore choose a smaller
rather than a larger size in order to reduce contention with other
applications.
• Batch programs can ask for notification when they reach the end of a unit of
work, because this is a good time to take a commit point. (See 5.2.7.3, “Path
Calls, Processing Option P, and GC Status” on page 58 for more details.) If
you to choose too small a unit of work size, your BMPs will be forever
checkpointing.
If you still cannot decide on a unit of work size, you won′t go far wrong if you
pick a number around ten.
Once you have decided the size of a unit of work, code it in the UOW parameter
of the AREA macro.
The root addressable part contains UOWs with the layout we describe in 5.3.3,
“Picking a Unit of Work Size” on page 62.
The independent overflow part contains a pool of CIs for use when a UOW has
exhausted its dependent-overflow CIs. IMS assigns the independent overflow
CIs to a base CI on an individual basis. If you fill up your entire independent
overflow part, there is a way to expand it. Please see 2.1.9, “Expansion of DEDB
Areas” on page 12 for details.
The sequential-dependent part comprises the rest of the data set (up to the
amount of space you allocate). IMS uses this to store SDEP segments.
You should allow enough space for reasonable data growth. Use the ROOT
parameter of the AREA macro to define the size of the root-addressable and
independent-overflow parts of the area.
If you define a DEDB to DBRC, you do not need to code DFSMDA macros for it.
DBRC contains all the information IMS needs to allocate the database.
There are some sample definitions in A.2.6, “DBRC Definitions” on page 86.
You can find the full syntax of DBRC commands in the IMS/ESA V5 Utilities
Reference: Database Manager , SC26-8034.
Your DEDB is now ready for you to add the data. You do not need a load mode
PSB to add data to a DEDB.
Typically, you would chose to use an MSDB when one of these advantages is
crucial to the success of your application, and you could not use a VSO DEDB for
some reason.
You can read about the types of MSDB in the section “Main Storage databases”
in the chapter “Designing a Fast Path Database” in the IMS/ESA V5
Administration Guide: Database Manager , SC26-8012.
For example, if your program replaces a segment and then rereads that
segment, your program sees the old field values.
Finally, no enhancements to MSDBs are planned. IBM may drop support for
MSDBs in the future.
You can find full details of these processes in IMS/ESA V5 Utilities Reference:
Database Manager , SC26-8034.
Most other applications won′t notice the difference between EMH and normal
message processing because the number of database I/Os will usually be much
larger than the cost of message handling.
You must also assign a routing code to a Fast Path Application, either explicitly
using the RTCODE macro or implicitly using a TRANSACT macro.
If you want to run a Fast Path potential application in an IFP region, you must
define at least one Fast Path exclusive application. IMS will permit an IFP region
to start only if you have defined its PSB as FPATH=YES.
It is a good idea to generate a Fast Path potential copy of a Fast Path exclusive
application. This allows it to run (without EMH) if there are no IFP regions
available. If you don′t do this, IMS will reject input messages for your
application.
If you have Fast Path potential transactions, you should code the exit to end with
return code 16. This causes IMS to schedule a Fast Path potential transaction in
an IFP region if one is available or, if not, in an MPP region.
For further details, refer to the chapter “Fast Path Input Edit/Routing Exit
(DBFHAGU0)” in the IMS/ESA V5 Customization Guide , SC26-8020.
First, stocks are traded around the globe day and night. Continuous availability
is a must and Fast Path has features to help with this.
6.1 Outline
The sample application helps a broker trade in stocks throughout the world. We
assume that the broker has offices in all the major stock exchanges. To make
the application simpler, however, we have chosen only three exchanges:
London, New York, and Tokyo.
In reality, the communication method between the sample application and the
central stock exchange system would be different in each case. For simplicity,
we assume an asynchronous LU6.2 interface. Although the interface is
asynchronous, it must be fast, because stock prices are only current for a short
time.
6.2 Functions
The sample application has IMS, TSO, and workstation components. The
mainframe components are installed in each broker′s office. The workstation
components are installed in each of the offices and on portable computers for
use outside the office.
If the stock trades on a remote market, the stock inquiry IMS transaction initiates
an APPC conversation with a remote copy of itself to retrieve the data. It
automatically converts stock prices into the local currency. Also, since a stock
may trade on more than one market, it is possible that the stock inquiry will
return more than one set of stock information.
This program emulates a logical relationship from the stock and index databases
to the market and control databases. See 6.3.8.1, “Links for Market Data” on
page 78 for more information on the nature of this link.
The sample code for this application is in A.3.1, “Stock Inquiry Functions” on
page 88.
The sample code for this application is in A.3.2, “Deal Closed Functions” on
page 103.
The application updates the current stock price and amends the history of
today′s movements. If this stock is a member of a stock index, IMS modifies the
index to reflect the new price and the number of shares traded.
This program updates the fields that hold the highest and lowest values.
The sample code for this application is in A.3.3, “Price Movement Functions” on
page 108.
The sample code for this application is in A.3.4.2, “Market Close Program” on
page 111 and the sample job is in A.3.4.3, “Market Close Job” on page 119.
The sample code for this application is in A.3.5, “Market Open Functions” on
page 119.
Some of the VSO databases are small. We preload them because we want all
their records to be in storage all the time.
6.3.1.1 Contents
The currency database contains only fixed-length root segments. There is one
root per currency. You can find the DBD in A.2.4, “Currency Database” on
page 85.
On the other hand, the currency database records are very short. If we choose
VSO, this limits us to one root per CI 16 and wastes a lot of DASD (and buffer
pool) space.
If we choose HDAM for the currency database, we have the problem that IMS
will lock the segments while the Currency Application updates them. This will
degrade our performance.
In the end, we chose VSO because wasted DASD was the lesser of the two evils,
given that this is a small database.
The currency database is small and highly active, so we decided to preload it.
16 To avoid contention problems. See 5.2.8.4, “Short Database Records” on page 60 for an explanation of why this is so.
6.3.2.1 Contents
The control database contains three root segments
• The name of the local market (so we can tell whether a stock or index is
local or not).
• Details of the local stock exchange system. These include LU6.2 parameters.
• The number of days′ that historical data should remain on the stock and
index databases.
You can find the DBD in A.2.5, “Control Database” on page 85.
It has database records so short that the entire database would easily fit into
one CI.
Our programs read the control database frequently but seldom update it, so
seldom that we have not yet coded the update program.
Our programs are careful to read this database once only (and not once per
message) since we do not expect the contents to change.
6.3.3.1 Contents
This is a root-only database with one root per office. It contains LU6.2
parameters and transaction codes. The average database record length is 66,
comprising
• 6 bytes for the fixed part of the segment prefix
• 60 bytes of data.
Again, we chose a small CI size (1 KB, although 0.5 KB would do just as well).
It also has short database records, short enough that the entire database would
fit into one CI.
Our programs read the market database frequently but never update it.
6.3.4.1 Contents
If the index is local, the database contains the current and historical values of
that index. If the index is remote, the database contains the name of the market
where the values are held. In a full-function database, this would be a logical
relationship, see 6.3.8.1, “Links for Market Data” on page 78. You can find the
DBD in A.2.2, “Index Database” on page 83.
Assuming that each index is defined in only one market and that you keep
history for ten days, the average database record length can be calculated as in
Table 2.
Table 2. Calculating the Average Database Record Length of the Index Database
Quantity Segment Name Data Length Prefix Segment Total
per Root Length Length Length
For a local index
1 Index 28 18 46 46
1 Market 8 8 16 16
10 History 24 8 32 320
Total 382
For a remote index
1 Index 10 18 28 28
1 Market 8 8 16 16
Total 44
6.3.5.1 Contents
If the stock trades locally, the database contains the current and historical prices
of that stock as well as a log of all the deals our firm has done in that stock
today. You can find the DBD in A.2.1, “Stock Database” on page 82.
Table 3. Calculating the Average Database Record Length of the Stock Database
Quantity Segment Name Data Length Prefix Segment Total
per Root Length Length Length
For a local stock
1 Stock 34 38 72 72
1 Index 8 8 16 16
1 Market 8 8 16 16
10 History 24 8 32 320
160 Price 12 8 20 3200
Total 3624
For a remote stock
1 Stock 10 38 48 48
1 Market 8 8 16 16
Total 64
If the stock trades abroad, the database contains the market name where the
details can be found. In a full-function database, this would be a logical
relationship, see 6.3.8.1, “Links for Market Data” on page 78.
The stock database would benefit from its own randomizing routine. Ideally this
would place stocks in an area depending on which markets they trade in. This
isn′t easy with the current design because the key does not contain the market
name.
This contrasts with a full-function database, where you can retrieve the details
with a single call using a logical DBD. The actual I/O is the same in both cases,
so the saving is in application logic.
Our sample application has some potentially long twin chains. This topic
discusses the measures we took to limit the impact these would have. During
We do not know how many price segments there will be, because the number
depends on how active a stock is.
We do not know how many history segments there will be, because you can
control the number by altering the retention criterion (the number of days to
retain a segment) in the control database. In our testing, we kept only ten
history segments (one for each of the last ten days), but we took steps to
minimize the impact if the twin chain were long.
17 You can specify a twin backward pointer in a full-function database to help with this step. IMS does not allow such pointers for
DEDBs.
As you read these examples, you will notice some features we introduced so
that the London, New York, and Tokyo copies of the application could run on the
same IMS system and all use the same underlying code. This process is called
cloning and may appear strange if you have not encountered it before.
A.1 Cloning
Cloning is used for database, programs, definitions, and transactions.
This approach has the advantage that you can replace one of the clones with
another program without affecting the others. For example, you might want to
interrupt the application flow with a dummy program, or substitute the A.3.8.2,
“Remove Unwanted IMS Messages” on page 124.
/* */
/* Currency database - London */
/* */
/* */
/* Stock Index database - London */
/* */
/* */
/* Market database - London */
/* */
/* */
/* Stock database - London */
/* The Stock database has three areas, each of which has two copies.*/
/* */
A.3 Programs
This section contains REXX program source and PSBs. The programs are rather
short and intolerant of unexpected conditions (&eg, a database segment being
missing when it should be found). We did this deliberately for two reasons; so
that the examples would be short and uncluttered, and so that we could create
more examples in the time available.
EBCDIC to ASCII
/* */
/* Function to return a translation string for use in conversion */
/* from EBCDIC to ASCII. */
/* */
/* Usage: */
/* ASCII = E2A() */
/* x = TRANSLATE(ebcdic string,ASCII) */
/* */
/* character */
/* EBCDIC ′000102030405060708090A0B0C0D0E0F′ X */
ASCII = ′000102030405060708090A0B0C0D0E0F′ X
/* */
/* character */
/* EBCDIC ′101112131415161718191A1B1C1D1E1F′ X */
ASCII = ASCII || ′101112131415161718191A1B1C1D1E1F′ X
/* */
ASCII to EBCDIC
APPC conversations are between two programs. A program may take part in
more than one conversation, but each conversation involves only two programs.
These programs are called partners in the conversation.
APPC conversations are polite. A partner may not speak if it is listening and
cannot listen when it is speaking. This does not stop a program from speaking
and listening at the same time, provided it does so with different partners.
APPC uses the terms sending and receiving rather than speaking and listening.
APPC programs normally use VTAM for the communications. 18 Some of the
APPC terms you will encounter are really VTAM terms.
18 If you use APPC/MVS to converse with a partner on the same MVS system, APPC/MVS is clever enough not to use VTAM, but
manage the conversation itself.
We recommend that you use sync level confirm. If you do this, IMS asks you to
confirm that you have received its messages. This has implications when you
are coding.
B.2.3.1 CPIC
A variety of platforms support this interface. All our sample code uses CPIC
calls, because this makes it portable between environments. We tested using
TSO and IMS, but the code should work in other environments (for example
OS/2).
CPIC calls can be tedious to program, because you have to set each
conversation attribute with a separate CPIC call. You can see this in our sample
code.
B.2.3.2 APPC/MVS
You can generally write an APPC program with fewer APPC/MVS calls than you
need with CPIC. This is because you can specify conversation attributes on the
APPC/MVS function calls. APPC/MVS also supplies a number of useful calls that
are not part of CPIC.
However, you cannot take APPC/MVS calls to another platform. This might not
be a problem if all the platforms you are interested in run under MVS. On the
other hand, if you want to use workstations, APPC/MVS calls are not for you.
If you use IMS for communication, it handles all the APPC calls and your IMS
program uses the IOPCB in the usual way. This is called the implicit APPC
interface . Most of our examples use the implicit interface because they can
receive messages from non APPC users (for example other programs).
On the other hand, you can use APPC calls within an IMS transaction. In this
case IMS is not involved and you have to code all the APPC calls yourself. This
is called the explicit APPC interface .
There is an example of how to code this in A.3.1.2, “Stock Inquiry Program for
IMS” on page 88.
You will find an example of this using CPIC calls in A.3.1.3, “APPC Driver” on
page 94.
19 Because the IMS transaction has already reached its commit point. If the workstation program needs to communicate it must
start another conversation.
You can send a message from an IMS transaction to any APPC program. You
specify the APPC options on the change call. The APPC program could be
another IMS transaction,perhaps on another IMS system. We have an example
of such a change call in A.3.2.3, “APPC Change Call” on page 105.
There is an IMS service (DFSAPPC) that provides the same facility for a terminal
user.
You can see how we addressed this problem in A.3.1.7, “Conversion between
ASCII and EBCDIC” on page 99.
One way to get this is if you are using a synchronous conversation and have
forgotten to confirm to IMS that you have received its response. The IMS
transaction will wait indefinitely for a response, and will prevent IMS from
shutting down. In this situation you can:
• Resume the conversation and supply the confirmation. To do this you have
to know the conversation ID.
This is the tidiest way to correct the problem. We used A.3.8.1, “Clean Up a
Hanging Conversation” on page 123 for this function.
• If you were using TSO, log off and log on again (if you can).
This ends the hanging conversation.
• Issue a /STOP REGION ... CANCEL command.
This is the last resort, because the IMS control region may abend as a result
of this command.
You can find more about REXX and IMS in the part “IMS Adapter for REXX” in
both IMS/ESA V5 Application Programming: Database Manager , SC26-8015 and
IMS/ESA V5 Application Programming: Transaction Manager , SC26-8017.
20 REXX itself supports only character data. Without the IMS adapter, you would find it difficult to support packed decimal at all.
If you use PCB labels or PCBNAME= parameters, you can reference the PCBs
by name in your REXX source. If you do this, IMS uses the AIB interface for your
calls. This can be important because IMS gives you more information (for
example, the length of a fixed length segment) when you use the AIB interface.
We use this throughout our sample application.
For example, suppose we are using the sample application and we want to read
the stock database. Assume that the PSB looks like this:
STOCK PCB TYPE=DB,NAME=STOCK, ...
SENSEG NAME=STOCK,PARENT=0
..
.
PSBGEN LANG=ASSEM, ...
END
Mapping Facilities There are three REXXIMS commands for manipulating (or
mapping) structured data. REXXIMS recognizes more data types than REXX
itself and handles the conversion for you. These facilities are especially useful
when you process database segments, which are usually highly structured and
often use a variety of data types.
MAPDEF Defines a map. A map has a number of REXX variables defined
over it. You can use a map instead of an I/O area, an SSA or an
FSA.
MAPGET IMS assigns the REXX variables from the map. If you specify a map
name as an output parameter on a DLI call, IMS will update the
REXX variables from the map automatically.
MAPPUT IMS updates the map from the REXX variables. If you specify a
map name as an input parameter on a DLI call, IMS will update the
map from the REXX variables automatically.
Facilities for Explicit APPC Programs: There are two REXXIMS commands and
two DLI calls for use by explicit APPC programs.
APSB Tells IMS what PSB to use. You use this call to allocate a PSB if
you want to access any IMS resources.
WTO Commands: There are three REXXIMS commands for sending messages
and one for eliciting a response from the operator:
WTO Writes a message to the operator.
WTP Writes a message to the program.
WTL Writes a message to the MVS console log.
WTOR Writes a message to the operator and returns the response.
Miscellaneous Facilities: There are two other REXXIMS commands we have not
discussed yet. You will need them only in special circumstances:
SET Sets the AIB function parameter or sets the ZZ field on an output
message (when you don′t want the default value of zero).
STORAGE Obtains or releases storage.
If you prefer, you can create your stub as an alias of DFSREXX0. This has the
advantage of saving DASD space. In our sample application, we created one
copy of DFSREXX0 and made all the stubs aliases of that.
DFSREXX0 loads a much larger module DFSREXX1, which creates the REXX
environment and calls your REXX exec. Your REXX exec should have the same
name as the PSB.
This last point can be quite confusing, as it means there are three things, all with
the same name:
• The PSB
• The REXX exec
• The application stub.
If you compile your REXX exec there is no difference. The compiled program is
still a member of the REXX source library.
In an MPP region you should consider using pseudo WFI as another way of
avoiding REXX initialization.
The trace output goes to SYSTSPRT, the same file as REXX SAY commands.
This means that your program′s messages can be hard to find among the trace
output. You can change the trace level during the course of your program. This
can be useful if you have isolated a problem to a certain part of your code.
We used the highest level of trace during testing, and switched to the lowest
level when we finished testing.
Information in this book was developed in conjunction with use of the equipment
specified, and is limited in application to those specific hardware and software
products and levels.
IBM may have patents or pending patent applications covering subject matter in
this document. The furnishing of this document does not give you any license to
these patents. You can send license inquiries, in writing, to the IBM Director of
Licensing, IBM Corporation, 500 Columbus Avenue, Thornwood, NY 10594 USA.
Licensees of this program who wish to have information about it for the purpose
of enabling: (i) the exchange of information between independently created
programs and other programs (including this one) and (ii) the mutual use of the
information which has been exchanged, should contact IBM Corporation, Dept.
600A, Mail Drop 1329, Somers, NY 10589 USA.
The information contained in this document has not been submitted to any
formal IBM test and is distributed AS IS. The use of this information or the
implementation of any of these techniques is a customer responsibility and
depends on the customer′s ability to evaluate and integrate them into the
customer′s operational environment. While each item may have been reviewed
by IBM for accuracy in a specific situation, there is no guarantee that the same
or similar results will be obtained elsewhere. Customers attempting to adapt
these techniques to their own environments do so at their own risk.
AS/400 BookManager
C/370 CICS
CICS/ESA DB2
DProp IBM
IMS IMS/ESA
MVS/ESA OS/2
OS/390 Parallel Sysplex
RACF SAA
The publications listed in this section are considered particularly suitable for a
more detailed discussion of the topics covered in this redbook.
This information was current at the time of publication, but is continually subject to change. The latest
information may be found at http://www.redbooks.ibm.com.
Redpieces
For information so current it is still in the process of being written, look at ″Redpieces″ on the Redbooks Web
Site ( http://www.redbooks.ibm.com/redpieces.htm). Redpieces are redbooks in progress; not all redbooks
become redpieces, and sometimes just a few chapters will be published this way. The intent is to get the
information out much quicker than the formal publishing process allows.
IBMMAIL Internet
In United States: usib6fpl at ibmmail [email protected]
In Canada: caibmbkz at ibmmail [email protected]
Outside North America: dkibmbsh at ibmmail [email protected]
• Telephone orders
Redpieces
For information so current it is still in the process of being written, look at ″Redpieces″ on the Redbooks Web
Site ( http://www.redbooks.ibm.com/redpieces.htm). Redpieces are redbooks in progress; not all redbooks
become redpieces, and sometimes just a few chapters will be published this way. The intent is to get the
information out much quicker than the formal publishing process allows.
Company
Address
We accept American Express, Diners, Eurocard, Master Card, and Visa. Payment by credit card not
available in all countries. Signature mandatory for credit card payment.
B E
Base part. A part of a DEDB unit of work. It is the Expedited Message Handling (EMH). A special IMS
place where IMS stores root segments and their process for handling messages faster than normal.
direct dependents.
Extended Recovery Facility (XRF). An IMS facility for
high availability using a hot-standby alternate system.
C
Extended Terminal Option (ETO). A function of IMS
Control Interval (CI). A block of data in a VSAM data which allocates terminals as they are needed, rather
set. than requiring you to define them in advance.
Common Programming Interface Communications Full-Function (FF). A collective term for IMS
(CPIC or CPI-C). A programming language for APPC. databases that are neither DEDBs nor MSDBs.
Database Control (DBCTL). One of the execution Hierarchical Indexed Direct Access Method (HIDAM).
modes of IMS. In this mode, IMS manages databases A type of IMS database with immediate space reuse
only. and an index of all root segments. HIDAM stores root
segments in key sequence.
(DMAC). An important DEDB control block.
Main Storage Database (MSDB). A type of IMS Root Addressable part. A part of a DEDB area. It is
database held in main storage. the collective term for the base and dependent
overflow parts of a DEDB.
Mode. A VTAM control block describing the
attributes of a network connection. Root Anchor Point (RAP). A special kind of pointer in
a DEDB or HDAM database. A RAP points to a root
Multiple Area Data Sets (MADS). An option for a
segment. The randomizer decides which RAP points
DEDB to have multiple identical copies of its area
to which root segment.
data sets.
Glossary 155
156 IMS Fast Path Solutions Guide
List of Abbreviations
ACB application control block DASD direct access storage device
ACBGEN application control block DB data base
generation
DB/DC data base/data
ACF advanced communications communications
facility
DBCTL Data Base ControL
ACK acknowledgement Subsystem
ADS area data set DBD data base description
AIB application interface block DBDGEN data base description
generation
API application program interface
DBR data base recovery
APPC advanced
program-to-program DBRC data base recovery control
communication (IMS)
APPC/MVS advanced DD data set definition
program-to-program
DEDB data entry data base
communication/multiple
virtual storage (IBM) DEQ dequeue
JCL job control language (MVS RLDS recovery log data set
and VSE) ROLB an IMS facility to undo the
LIFO last in/first out effect of previous updates
Index 163
insert call 37, 43, 64
F intersystem sharing
Fast Path exclusive 66 See data sharing
Fast Path input edit/routing exit (DBFHAGU0) 8, 33, intrasystem sharing
67 See data sharing
Fast Path log tape analysis utility (DBFULTA0) 38, IRLM 12, 23, 24
40, 43
Fast Path potential 66
FH status code 21, 23 L
field call 6, 11, 13, 14, 16, 37, 40, 47—49, 64, 71 LANG parameter 140
field search arguments latch
See FSA See OBA latch
field-level sensitivity 6 LGNR parameter 38
finance terminals 45 library lookaside 139
fixed length segments 11, 37, 58 local DLI
forward recovery 6 See CICS
FPACK 45 lock class
FPATH parameter 66 See command codes
FPCTRL macro 32, 50 locking
FR status code 51 See also command codes
FSA 47, 141 See also deadlock
fullword fields 47 buffers waiting to be written 43
FW status code 44, 51 CI locks 4, 31, 40, 60
contention 32, 37, 40, 49, 52, 60, 62
DEDB 31, 40
G duration 4, 6, 15, 37, 40, 43, 47, 48, 49
GC status code 15, 39, 43, 44, 55, 58 during APPC call 133
get call 16, 34, 40, 43, 48, 53, 58 field call 6, 40
HSSP 5, 34, 56
reorganization 4, 27, 39
H segment level 4, 54, 60
halfword fields 47
unit of work 2, 4, 5, 34, 39, 56, 57
HDAM database 1, 32
VSO 4, 11, 37, 54, 60
HIDAM database 59
log analysis utility (see Fast Path log tape analysis
high speed DEDB direct reorganization utility
utility (DBFULTA0)
(DBFUHDR0) 18, 27, 57, 62
log data set 25
high speed sequential processing
log recovery utility (DFSULTR0) 17
See HSSP
log reduction 12, 38
HSSP 5, 11, 24, 28, 34, 37, 43, 55 —56, 57, 58, 62, 63
log timer 29, 43
See also SETO parameter
log write ahead 29
See also SETR parameter
logging 5, 7, 31, 32, 38
HSSP image copy 5, 18, 55, 56
logical relationships 2, 6, 59, 71, 77
logical unit name 129
I look ahead buffering 28
I/O contention DASD 33 LU 6.2
I/O error 3, 7, 11, 17, 21 See APPC
I/O priority 33
IC option for HSSP 28
IDCAMS utility 63
M
MADS 3, 10, 11, 17, 18, 20, 27, 33, 53, 63
image copy 11, 13, 22, 25, 26, 28, 52, 64
MADS severe error 21, 27
image copy utility (DFSUDMP0) 17
main storage database
Improved Control Interval Processing (ICIP) 12
See MSDB
IMS Resource Lock Manager
master terminal operator
See IRLM
See MTO
IMSFP procedure 67
media manager 12, 32
independent overflow 12, 22, 39, 43, 60, 62, 63
message queue 7, 44
initialization call 14, 16, 23
migrating MSDBs to VSO
See MSDB, conversion to DEDB VSO
Index 165
recovery 2, 3, 18, 20, 21, 51 status code (continued)
reentrant code 52 FR 51
relative byte address FW 44, 51
See RBA GC 15, 39, 43, 44, 55, 58
reorganization 1, 4, 18, 27, 39, 57, 62 /STOP ADS command 24
replace call 40, 48, 64 /STOP AREA command 22, 24
REQE 21 /STOP DATABASE command 23
response mode 8, 45, 65 /STOP REGION command 137
REXX 15, 70, 81, 87 —123, 137, 139 —143 subset pointer 4, 10, 34, 36, 56
ROOT parameter 63 sync point processing 31, 32, 37, 38, 42, 48
routing code 66 synchronization point call 39, 44
RTCODE macro 66 synonym chains 32, 52, 61
S T
sample application code 81 —128 terminal buffers 14
scheduling 7, 8, 14, 21, 23, 44, 48, 65, 67, 81, 130, TRANSACT macro 66
137 twin chain 1, 4, 10, 34, 56, 58, 78, 80
scratch pad area twin pointers
See SPA See pointers
SDEP two phase commit 37
buffers 41, 42
data sharing 12
description 33, 52 U
insertion 3, 33 utility
overview 3 access method service (IDCAMS) 63
retrieval 3, 33 database image copy utility (DFSUDMP0) 17
sequence field 3 Database Tools DEDB unload/reload 52, 65
size calculations 62 DEDB ADS create utility (DFSUMRI0) 27
storage sequence 33 DEDB area data set compare (DFSUMMH0) 18, 54
with virtual storage option 4 DEDB area data set create utility (DFSUMRI0) 10,
written to DASD 32 18, 24, 54
second CI 11, 17, 18, 20, 21 DEDB direct reorganization utility
secondary indexes 14, 59 (DFSUMDR0) 18, 27, 39
SEGM macro 58 DEDB initialization utility (DFSUMIN0) 18, 63
segment prefix 58 DEDB sequential dependent delete
segment search argument (DBFUMDL0) 34, 53
See SSA DEDB sequential dependent scan
SENSEG macro 43, 57 (DBFUMSC0) 33, 53
sequential dependent segments DL/I test program (DFSDDLT0) 72
See SDEP Fast Path log tape analysis utility (DBFULTA0) 38,
SETO parameter 56 40, 43
SETR parameter 56 high-speed DEDB direct reorganization
severe error (DBFUHDR0) 18
See MADS severe error high-speed DEDB direct reorganization utility
side information 129 (DBFUHDR0) 27, 57, 62
single segment messages 8, 45, 65 HSSP restrictions 5
SIZE parameter 62 log recovery utility (DFSULTR0) 17
SLUP terminals 45 MSDB dump recovery (DBFDBDR0) 65
SPA 8 MSDB maintenance (DBFDBMA0) 25
SSA 4, 6, 14, 15, 35, 47, 57, 141 MSDB-to-DEDB conversion utility (DBFUCDB0) 7,
SSPTR parameter 57 65
/START AREA command 22, 54 online database image copy utility
/START command 13 (DFSUICP0) 17, 28
status code
AO 20, 21
B A 16, 23
V
verify
BB 16
See field call
FH 21, 23
W
WADS 17
wait for input regions 8
warm start 22, 25, 26
write error
See I/O error
X
XRF 25
Index 167
168 IMS Fast Path Solutions Guide
ITSO Redbook Evaluation
IMS Fast Path Solutions Guide
SG24-4301-00
Your feedback is very important to help us maintain the quality of ITSO redbooks. Please complete this
questionnaire and return it using one of the following methods:
• Use the online evaluation form found at http://www.redbooks.com
• Fax this form to: USA International Access Code + 1 914 432 8264
• Send your comments in an Internet note to [email protected]
Please rate your overall satisfaction with this book using the scale:
(1 = very good, 2 = good, 3 = average, 4 = poor, 5 = very poor)
Was this redbook published in time for your needs? Yes____ No____
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
_____________________________________________________________________________________________________
Printed in U.S.A.
SG24-4301-00