zOs/REXX/XBSTAFO2
$#:
* elar start force
*
*
*
dbSys = DVBP
paLim = 9e9
stLim = 1e9
saFrom = $''
sleepSt = 200
sleepMin = 30
sleepMax = 60
$#@
call sqlConnect $dbSys
call sql2St "select distinct dbName from sysibm.sysTablespace" ,
"where dbname like 'XB%' and name like '%WWW%'" ,
, sa, ':m.dst'
sz = m.sa.0
say '*'time() sz 'dbs:' 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/
$=aDb=- m.sa.sx
say '*'time() sx'. db' $aDb',',
cDb 'dbs,' cPa 'parts,' cSt 'starts'
call sqlCommit
$;
$<=/sql/
select p.dbName db, p.tsname ts, p.partition pa
from sysibm.sysTablePart p
join sysibm.sysTableSpace s
on p.dbName = s.dbName and p.tsName = s.name
left join sysibm.sysTableSpaceStats r
on p.dbName = r.dbName and p.tsName = r.name
and s.dbid = r.dbid and s.psid = r.psid
and p.partition = r.partition
where p.dbName = '$aDb' and p.tsname like '%WWW%'
$*( and r.totalrows = 0 and s.spacef >= 0 $*)
order by 1, 2, 3
$/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
say 'db' $DB 'ts' $TS 'pa' $PA
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
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 20140208 20:41:33