Customer notices that some of their reports
for billing processes are showing incorrect
ACCTNOx values for some jobs in the step level
files. This can happen if ACCTRTE makes ACCTNOx
assignments based on SYSID value.
The problem can occur because the SMF component
considers an address space to be based on a unique
value of job name (JOB) and Reader Time Stamp (RDRTS).
RDRTS has a granularity of 1/100th of a second.
It is possible for multiple jobs, that have the same
job name to be submitted to JES for execution in
the same 1/100th of a second.
These jobs will have different JES Job Numbers
(JESJOBNO), but the SMF component does not use
JESJOBNO when determining which records are
associated with an address space.
The SMF component account routine (sp.PARMS(ACCTRTE))
is entered one time for each address space.
ACCTRTE assigns ACCTNOx values that are used for
all observations that are written to the various
database files (BATPGM, BAT_TS, BAT_ST, BAT_TP,
BAT_OE, BAT_SA, BATSPL, BATJOB, etc.) for that
When the ACCTRTE uses SYSID to assign one or more
of the ACCTNOx values, and there are multiple
jobs with an identical JOB and RDRTS values,
the ACCTNOx values will be assigned based on the
first record that the ACCTRTE encounters.
This can create some confusion when the two
jobs that have identical JOB and RDRTS values
ran on different systems.
The SMF component has several different
records to examine when it is determing what
value to use for SYSID. The preferred record
is the job end record (SMF type 30 subtype 5).
In the case discussed here, there will be two
or more of these job end records, but only one
of them will be "first"--and the SYSID value
value selected by the code logic will be
incorrect for the step records for one of the
At the point where records are written to the
step level files, the SYSID value assigned to
the step level file is the system where the
step executed. (The logic saves the "address
space level" SYSID value initially determined,
and substitutes the value where the step actually
executed, writes the step level observation, then
restores the job level SYSID that will be used
when the BATJOB file observations is written.
In the case where two jobs have the same JOB
and RDRTS, the step level observations will all
have the correct value for SYSID--showing where
the step executed.
But any ACCTNOx values that were based on the
SYSID value, in the same observations, will
be correct in the step observations for the steps
from one of the jobs, but not for the other.