zOs/REXX/XBSTAFOR
$#:
* elar start force
*
*
*
dbSys = DVBP
paLim = 9e9
stLim = 1e9
saFrom = $''
sleepSt = 200
sleepMin = 30
sleepMax = 60
$#@
call sqlConnect $dbSys
call sql2St "select distinct STORAGEAREA from BUA.TXBI003" ,
"where storageArea >= '"$saFrom"' order by 1" ,
, sa, ':m.dst'
sz = m.sa.0
say '*'time() sz 'storageAreas:' m.sa.1 '-' m.sa.sz
cDb = 0
cPa = 0
cSt = 0
$do sx=1 to m.sa.0 until cPa > $paLim | cSt > $stLim $@/sa/
$=stAr=- m.sa.sx
say '*'time() sx'. storageArea' $stAr',',
cDb 'dbs,' cPa 'parts,' cSt 'starts'
call sqlCommit
$;
$<=/sql/
with p as
( select t.creator cr, t.name tb, t.dbName db, t.tsName ts
, r.partNumber pa, r.stage, r.status
,'XB' || R.STORAGEAREA || R.SEGMENT seg
, R.objectFamily family
, R.STORAGEAREA
FROM sysibm.systables t
join BUA.TXBI003 R
on t.creator = 'BUA'
and left(t.name, 8) = 'XB'||STORAGEAREA||SEGMENT
)
, u as
(
select t.*
from BUA.TXBC021s t
where EYRESS = 5000
and ESRESS = 0
union all select t.*
from BUA.TXBC021 t
where EYRESS = 5000
and ESRESS = 0
)
select db, ts, pa, earess unl, cr, tb
from p
join u
on u.eadba = p.seg
and u.PARTNUMBER = p.pa
and locate('.' || strip(db) || '.' || strip(ts) || '.'
, u.eaRess) > 0
where storageArea = '$stAr'
and status = 1 and stage = 'UL'
order by db, ts, pa
with ur
$*( old ----------------------------------------------------
with e as
( select
'BUA' cr
,'XB'||R.STORAGEAREA||R.SEGMENT||
X.EYKNGKLASS||X.EYKNGOCC||X.ENZEILE||X.ENSPALTE tb
, partNumber pa
,R.*
FROM
BUA.TXBI003 R
INNER JOIN
BUA.TXBC091 X
ON EYPREF = 'XB'
AND ENSTORAR = R.STORAGEAREA
where storageArea = '$stAr'
and status = 1 and stage = 'UL'
)
, t as
( select dbName db, tsName ts, e.*
from e left join sysibm.sysTables t
on t.creator = e.cr and t.name = e.tb
)
, v as
(
select * from BUA.TXBC021S
union all select * from BUA.TXBC021
)
, u as
(
select v.eaREss Unl, t.*
FROM t left join v
on v.EADBA = left(t.tb, 8)
WHERE EYRESS = 5000
AND ESRESS = 0
and v.partNumber = t.pa+0
and locate(strip(db) || '.' || strip(ts), v.eaRess) > 0
)
select db, ts, pa, unl, cr, tb from u
order by db, ts, pa
with ur -end old ------------------------ $*)
$/sql/
call sqlSel
$| $forWith f $@/pa/
if laDb \= $DB then do
cDb = cDb + 1
laDb = $DB
call sqlDsn dh, $dbSys, '-dis db('$DB') sp(*)' ,
'restrict limit(*)'
m.di.0 = 0
call sqlDisDb di, dh
say '*'time() cDb'. db' $DB',' cPa 'parts,' cSt 'starts,' ,
'disInfo' m.di.0'/'m.dh.0
end
cPa = cPa + 1
ix = sqlDisDbIndex(di, $DB, $TS, $PA)
if ix < 1 | pos('COPY', m.di.ix.sta) < 1 then
iterate
if pos('WWW', $TS) > 0 then do
$*(
call csiOpen cc, $UNL' '
if \ csiNext(cc, cr) then
say '|||not exists unl' $UNL 'for' $DB'.'$TS':'$PA
else if $UNL \= m.cr then
say '|||unl' $UNL '<>' m.cr 'for' $DB'.'$TS':'$PA
else do $*)
if cSt // $sleepSt = 0 then do
say '---' cSt time() cmd
if cSt > 0 then
call sleep trunc(max($sleepMax ,
- time('e') + sleepLast , $sleepMin)), 1
sleepLast = time('e')
end
cSt = cSt + 1
say '-sta force' $DB'.'$TS':'$PA 'unl' $UNL
cmd = '-sta db('$DB') sp('$TS') part('$PA') acc(force)'
$** call sqlDsn cc, $dbSys, cmd
end
$/pa/
$/sa/
say '*'time() 'end' cDb 'dbs,' cPa 'parts,' cSt 'starts'
call sqlDisConnect
$#out 20131224 16:46:06