Trailing-Edge
-
PDP-10 Archives
-
BB-H506E-SM
-
cobol/documentation/new-isam.mem
There is 1 other file named new-isam.mem in the archive. Click here to see a list.
To: All users of the ISAM utility program.
Re: Recent ISAM changes
The COBOL utility ISAM has had several changes made to it
recently which hopefully will make it's use easier and more efficient.
The changes made are in three general areas:
1. New messages from ISAM
2. New ISAM error checking
3. New switches
1.0 NEW ISAM MESSAGES
The most apparent change to the user will be several new messages
displayed by ISAM at the end of a run. These messages give the user
information concerning the efficiency of the parameters that the user
has given ISAM. These messages give detailed information about the
wasted space in both the data and index blocks. Also, a message is
displayed for both the data and index blocks informing the user about
the amount of disk space required for each logical block in the file.
Another apparent change is the new message displayed when a user
is doing an ISAM build with the /B switch. As seen in the following
example, ISAM now will display a recommended blocking factor for the
index and data files. Please note that this blocking factor is chosen
by ISAM as the most efficient blocking factor as far as disk space
utilization is concerned and ISAM makes no attempt to optimize the
amount of core that will be required by LIBOL when processing this
file.
@ISAM
*=FILE1/B
Mode of input file: S
Mode of data file: S
Maximum record size: 240
Key descriptor: X129.29
Records per input block: 10
Total records per Data block: (Recommended = 53): 25
Empty records per data block:
Total entries per Index block: (Recommended = 18): 18
Empty entries per index block:
Percentage of Data file to leave empty:
Percentage of Index file to leave empty:
Maximum number of records file can become: 10000
Page 2
[ISMLOV 2 Levels of index ]
[ISMNDR 500 Data records ]
[ISMWSD Wasted 127. words of 1152. 11.0% wasted space in the Data file.]
[ISMLDE One logical Data block equals 9. physical disk blocks.]
[ISMWSI Wasted 0. words of 128. in the Index file.]
[ISMLIE One logical Index block equals 1. physical disk block.]
[ISMIBS LIBOL's I/O buffer will require 2816. words (6. Pages) of core.]
*^C
Another change for TOPS10 users , although not apparent, will
make ISAM files much more efficient. ISAM has now been changed to
approximate the disk space that will be required for the index and
data files and asks the monitor for that much in as contiguous a space
as is possible. This will incur considerably less overhead than if
the files were fragmented into many smaller chunks all over the disk.
Also, when the user restores his file from backup tapes he should use
BACKUP since BACKUP does the same disk space allocation that ISAM now
does.
Page 3
2.0 NEW ISAM ERROR CHECKING
In addition the these changes ISAM now checks version numbers
when reading an indexed file ( /P or /M ). If it encounters a
discrepancy, usually indicating file errors caused by system crashes
during file updating, it will print an error message indicating the
blocks involved. These errors are controlled under the /I switch, so
that the combination of /P/I (or /M/I ) will give warnings instead of
errors and attempt to continue the packing (or maintenance) operation.
For the case of a version number error in the index file we have:
@ISAM
*=BADIDX/P
Mode of output file: A
Records per output block: 2
?ISMIVD Index version number discrepancy .
Reading index file DSK:BADFIL.IDX
Index level 2. index block 44. entry 2. version number 2. points to
Index block 10. version number 1. .
while for a similar error occurring within a data file we get:
@ISAM
*=BADIDA/P
Mode of output file: A
Records per output block: 2
?ISMDVD Data version number discrepancy .
Reading data file DSK:BADFIL.IDA from index file DSK:BADFIL.IDX
Index block 32. entry 3. version number 57. points to
Data block 121. version number 9. .
Some of the existing errors will also now give block information:
@ISAM
*=BADREC/P
Mode of output file: A
Records per output block: 2
?ISMKOO keys are out of order
ABCDLKJXYZ000000122ZIF,.$-+CD
is after
ABCDLKJXYZ111111121ZIF,.$-+CD
Page 4
Data block 122. version number 58. .
The terms level, block , entry and version are as described in
section 8.6 in the COBOL Language Manuals . Block numbers refer to
128 word disk blocks numbered starting with block 1, which has file
address 0.
Page 5
3.0 NEW ISAM SWITCHES
3.1 The /Statistics Switch
A new switch is included to provide the user with statistics when
doing the initial build of a file so that the user may choose the most
efficient blocking factor for the file if ISAM's recommended blocking
factor is unreasonable because of core usage or some other
consideration. The user must attempt to balance both core usage and
disk space in choosing a blocking factor. As an aid in doing this
ISAM will display the total amount of core that LIBOL will require to
process the file at the end of it's run. If this figure is very high
or seems unreasonable then the user should rebuild his file with the
/S switch in an effort to choose more appropriate blocking factors for
his file. The statistics include the blocking factor, percentage of
wasted space in the file if that blocking factor is chosen along with
both the disk space needed and the size of the logical block in words
of core. They are given for both the data and index files.
Following is an example of an ISAM build illustrating the use of
the /S switch to provide statistics while building.
@ ISAM
@ISAM
*=FILE1/B/S
Mode of input file: S
Mode of data file: S
Maximum record size: 240
Key descriptor: X129.29
Records per input block: 10
Total records per Data block:
Records Disk Wasted Core
/block Blocks space (wds)
3 1 3.9% 128
6 2 3.9% 256
9 3 3.9% 384
12 4 3.9% 512
15 5 3.9% 640
18 6 3.9% 768
21 7 3.9% 896
24 8 3.9% 1024
28 9 0.3% 1152
31 10 0.7% 1280
34 11 1.0% 1408
37 12 1.2% 1536
40 13 1.4% 1664
43 14 1.6% 1792
46 15 1.8% 1920
49 16 1.9% 2048
53 17 0.1% 2176
Page 6
56 18 0.3% 2304
59 19 0.5% 2432
62 20 0.7% 2560
65 21 0.9% 2688
68 22 1.0% 2816
71 23 1.1% 2944
74 24 1.2% 3072
78 25 0.1% 3200
81 26 0.2% 3328
84 27 0.3% 3456
87 28 0.5% 3584
90 29 0.6% 3712
93 30 0.7% 3840
96 31 0.8% 3968
99 32 0.9% 4096
(Recommended = 53): 25
Empty records per data block:
Total entries per Index block:
Records Disk Wasted Core
/block Blocks space (wds)
18 1 0.0% 128
(Recommended = 18): 18
Empty entries per index block:
Percentage of Data file to leave empty:
Percentage of Index file to leave empty:
Maximum number of records file can become: 10000
[ISMLOV 2 Levels of index ]
[ISMNDR 500 Data records ]
[ISMWSD Wasted 127. words of 1152. 11.0% wasted space in the Data file.]
[ISMLDE One logical Data block equals 9. physical disk blocks.]
[ISMWSI Wasted 0. words of 128. in the Index file.]
[ISMLIE One logical Index block equals 1. physical disk block.]
[ISMIBS LIBOL's I/O buffer will require 2816. words (6. Pages) of core.]
Page 7
3.2 The /Check Switch
As an aid to checking ISAM files that may be suspect because of
system crashes, the /C switch has been added to check the ISAM file
for any normally detectable errors (version,record length, key order,
duplicate keys, etc). In the manner of /I, /C will issue the errors
as warnings (% instead of ? ) and will continue the scan until EOF./C
uses the same syntax and file name defaults as /P except that it
produces no file output and thus requires no output file
specifications.
As an example of /C terminal output we have:
@ISAM
*BADFIL/C
%ISMKOO keys are out of order
ABCDLKJXYZ000000000000,.$-+CD
is after
ABCDLKJXYZ000000006ZIF,.$-+CD
Data block 7. version number 7. .
%ISMIVD Index version number discrepancy .
Reading index file DSK:BADFIL.IDX
Index level 2. index block 44. entry 2. version number 2. points to
Index block 10. version number 1. .
%ISMRTS record too short to contain key field
Data block 89. version number 25. .
%ISMDPK two keys with equal value = ABCDLKJXYZ000000088ZIF,.$-+CD
Data block 89. version number 25. .
%ISMIVD Index version number discrepancy .
Reading index file DSK:BADFIL.IDX
Index level 2. index block 67. entry 3. version number 13. points to
Index block 32. version number 219. .
%ISMDVD Data version number discrepancy .
Reading data file DSK:BADFIL.IDA from index file DSK:BADFIL.IDX
Index block 32. entry 3. version number 57. points to
Data block 121. version number 9. .
%ISMKOO keys are out of order
ABCDLKJXYZ000000122ZIF,.$-+CD
is after
ABCDLKJXYZ111111121ZIF,.$-+CD
Data block 122. version number 58. .
*^C
Page 8
3.3 The /Rename Switch
The current ISAM facility within LIBOL obtains the name of data
file portion of the ISAM file (usually an .IDA file ) from the name as
it is saved in the statistics portion of the index file ( usually .IDX
file ). For this reason the normal monitor RENAME commands will not
correctly rename the ISAM file pair. To make the RENAME possible, the
/R switch has been added to ISAM. It uses standard ISAM syntax and
defaults , as in:
new-index-file,new-data-file=old-file/R
As an example we have:
@DIRECTORY (OF FILES) *.I*
CBL20:<HAM-TST>
BADFIL.IDA.1
.IDX.1
Total of 2 files
@ISAM
*GOODFIL=BADFIL/R
*^C
@DIRECTORY (OF FILES) *.I*
CBL20:<HAM-TST>
GOODFI.IDA.1
.IDX.1
Total of 2 files
@;NOTE THAT ISAM TRUNCATES NAMES TO SIX CHARACTERS!!!
@ISAM
*BADFIL.IX1,BADFIL.IX2=GOODFI/R
*^C
@DIRECTORY (OF FILES) *.I*
CBL20:<HAM-TST>
BADFIL.IX1.1
.IX2.1
Total of 2 files
@ISAM
*BADFIL=BADFIL.IX1/R
*^C
@DIRECTORY (OF FILES) *.I*
Page 9
CBL20:<HAM-TST>
BADFIL.IDA.1
.IDX.1
Total of 2 files
Page 10
3.4 The /ADVancing Switch
The /ADV switch may be used to specify the advancing mode when
outputing ASCII sequential files. The switch, which may be
abbreviated /A or /AD, has the following syntax:
sequential-file/ADV:mode = index-file/P
where mode = 6[8] - use COBOL-68 default (BEFORE)
7[4] - use COBOL-74 default (AFTER)
A[FTER] - AFTER ADVANCING 1 LINE
B[EFORE] - BEFORE ADVANCING 1 LINE
When not specified with the /ADV switch, ADVANCING will default
to COBOL-68 (BEFORE) mode.