Why anyone would want to do this, I have no idea.
Extents do not cause problems. Adding to existing data sets
resulting in new extents is what causes problems. That is
why IBM recommends that you allocate your LNKLST PDSs so that
they cannot have secondary extents. That just makes it so
that you get alerted (by a failure) if your addition of a
module would have caused a new extent -- it just indicates
'no room at all'.

If you had asked how to compress, or delete, a data set
that is in the LNKLST, the process is the same, so let's
proceed on that basis.

Start from the realization that it is not OK to compress
or delete a data set that someone has allocated. For those
reasons, the system (in the XCFAS address space, but not
XCF processing itself) allocates each LNKLST data set. And
LLA does the same.

So the key, overall, is to make it so that the system does
not have the data set allocated (at which point you can do
whatever you want with that data set). And the system will
no longer have the data set allocated when that data set
is not in any active LNKLST set and is not being managed
by LLA.

(This procedure, more or less, can be found in the
documentation of the CSVDYNL macro, under the CHECKSYS1=NO
operand)

1.LNKLST DEFINE NAME(PROD01) COPYFROM(CURRENT)
2.LNKLST DELETE NAME(PROD01) DSNAME(MODULE.NAME)
3.LNKLST ACTIVATE NAME(PROD01)
4.LNKLST UPDATE JOB(*)
As always, I add the caution here that any UPDATE is
unpredictably dangerous, but if the alternative is re-IPL,
might be worth it.
After the UPDATE, the only active LNKLST set is PROD01
which does not have MODULE.NAME so LNKLST processing
does not have MODULE.NAME allocated.
Now that only PROD01 is active, the system, knowing that
any other LNKLST sets are inactive can close their DCBs
which frees the DEB. BUT, note that this is not done for
the IPL-time LNKLST set (whose DCB is pointed to by CVTLINK)
for compatibility reasons, protecting against customer or
vendor programs that might be looking at that DCB / DEB.
5.STOP LLA or (in CSVLLAxx) REMOVE(MODULE.NAME) and
MODIFY LLA,UPDATE=xx.
After this, LLA will no longer be managing MODULE.NAME so
LLA will not have that data set allocated
6.Do whatever you want to MODULE.NAME (compress, copy to
"old", allocate a new one with no secondary extents,
copy from "old" back to the "new"
7.LNKLST ACTIVATE NAME(previous)
The previous LNKLST set (the one that was "current" before
you worked with PROD01 is perfectly usable.
8.LNKLST UPDATE JOB(*)
You need this only if existing address spaces need
to use MODULE.NAME. Otherwise, it can be omitted, since
new address spaces will be assigned to the "previous"
LNKLST. Since MODULE.NAME is now in an active LNKLST set,
LNKLST processing will have allocated it.
PROD01, no longer active, has its DCB closed (and as
a result) DEB freed.
9.START LLA or (in CSVLLAxx) LIBRARIES(MODULE.NAME) and
MODIFY LLA,UPDATE=xx
Now LLA is once again managing MODULE.NAME.

Note that it would be wholly incorrect to use the
LNKLST UNALLOCATE function to get LNKLST processing to
release its allocation. That function is intended only
to allow you to manipulate uncataloged data sets of the
same name as a data set in an active LNKLST set.

>If the module is share across several systems do
>F LLA,REFRESH
I did not understand what this is for. If the data set
is shared across several systems, the same process must
be done on all those systems. If you are updating a
data set that is allocated by some system, all bets are off.

Peter Relson
z/OS Core Technology Design

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

Reply via email to