zOs/JCL/TECSVXBA
//A540769W JOB (CP00,KE50),'DB2 ADMIN',
// TIME=1440,REGION=0M,CLASS=M1,SCHENV=DB2ALL,
// MSGCLASS=T,NOTIFY=&SYSUID
//* delete old dsn
//DEL EXEC PGM=IEFBR14
//PL DD DSN=A540769.WORK.TECSVXBA.OUT,DISP=(MOD,DELETE)
//*
//P01 EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM(DVBP)
RUN PROGRAM(DSNTIAUL) PARMS('SQL')
END
//SYSPUNCH DD SYSOUT=*
//SYSREC00 DD DSN=*.DEL.PL,
// SPACE=(TRK,(1,1),RLSE),
// MGMTCLAS=COM#A013,
// RECFM=FB,LRECL=80,
// UNIT=DISK,DISP=(NEW,CATLG)
//SYSIN DD *
with a as
( /***** select segment from txba201 */
select enStorAr n , right('000' || enSeg, 3) seg
from bua.txba201 a
group by enStorAr, enSeg
)
, b as
( /***** exclude txbi003 */
select *
from a
where not exists (select 1
from BUA.TXBI003 i
where i.storageArea_N = a.n
and i.segment = a.seg
and i.partNumber = 1
)
)
, c as
( /***** compute alpha storage area from numeric */
select n, seg
, case when n <= 999 then right('000' || n, 3)
when n <= 35657 /* 1296 = 36**2 */
then substr('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
, (n + 10998) / 1296 + 1, 1)
|| substr('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
, mod(n + 10998, 1296) / 36 + 1, 1)
|| substr('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
, mod(n + 10998, 36) + 1, 1)
end stoAr
from b
)
, t as
( /***** join sysTables */
select c.*, t.dbName db, t.tsName ts, t.creator cr, t.name tb
from c join sysibm.sysTables t
on left(t.name, 8) = 'XB' || c.stoAr || c.seg
)
, i0 as
( /***** create include statement and row number */
select ' INCLUDE TABLESPACE '
|| db || '.' || ts || ' PARTLEVEL 1 -- ' || tb li
, row_number() over(order by db, ts) rn
from t
)
, i as
( /***** add group number */
select 1 + floor(rn / 50) gr, rn, li
from i0
)
, g as
( /***** groups only */
select gr from i group by gr
)
, ut (gr, rn, li) as
( /***** union all of utility statements */
select 0 , -5, 'OPTIONS(EVENT ITEMERROR, SKIP)'
from sysibm.sysDummy1
/*ion all select 0 , -4, 'OPTIONS PREVIEW'
from sysibm.sysDummy1 */
union all select gr , -1, 'LISTDEF LIST#' ||gr from g
union all select gr , rn, li from i
union all select gr+1, -9
, 'COPY LIST LIST#' || gr || ' COPYDDN(TCOPYD)' from g
union all select gr+1, -8
, ' FULL YES PARALLEL SHRLEVEL CHANGE' from g
)
select char(value(li, ' -- null'), 80)
from ut
order by gr, rn
;
//COPY EXEC PGM=DSNUTILB,
// PARM='DVBP,A540769W.COPY'
//SYSPRINT DD SYSOUT=*
//UTPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTEMPL DD DSN=DVBP.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN DD DISP=SHR,DSN=*.DEL.PL