Written JP Vijaykumar
DATE
09-14-2014
I want the tables'(non-partitioned) size, partitioned tables' size,
indexes'(non-partitioned) size, partitioned indexes size,
lob segments size,lob indexes size, total size of all these segments in a schema
.
Grand total of each segment type, mentioned here, for all schemas and sum in a r
eport.
I am presenting four solution to this querion, still there are some more solutio
ns.
--01 USING SUM/DECODE & CONSOLIDATED SUM WITH UNION ALL OPTIONS, GENERATING THE
REPORT
connect veeksha/veeksha
clear compute
clear columns
set linesize 120 timing on
column owner format a10
with t as (
select owner,tab_sz_gb,tab_prt_sz_gb,idx_sz_gb,idx_prt_sz_gb,lob_sz_gb,lob_idx_s
z_gb,
tab_sz_gb+tab_prt_sz_gb+lob_sz_gb+idx_sz_gb +idx_prt_sz_gb+lob_idx_sz_gb sum_seg
_sz_gb
from (
select owner,
round(sum(decode(segment_type,'TABLE',bytes,0))/1024/1024/1024,2) tab_sz
_gb,
round(sum(decode(segment_type,'TABLE PARTITION',bytes,0))/1024/1024/1024
,2) tab_prt_sz_gb,
round(sum(decode(segment_type,'LOBSEGMENT',bytes,0))/1024/1024/1024,2) l
ob_sz_gb,
round(sum(decode(segment_type,'INDEX PARTITION',bytes,0))/1024/1024/1024
,2) idx_prt_sz_gb,
round(sum(decode(segment_type,'INDEX',bytes,0))/1024/1024/1024,2) idx_sz
_gb,
round(sum(decode(segment_type,'LOBINDEX',bytes,0))/1024/1024/1024,2) lob
_idx_sz_gb
from dba_segments
where (segment_type like 'INDEX%' or segment_type like 'TABLE%' or segment_type
like 'LOB%') and owner like 'PRD%'
group by owner)
order by owner)
select owner,tab_sz_gb,tab_prt_sz_gb,idx_sz_gb,idx_prt_sz_gb,lob_sz_gb,lob_idx_s
z_gb,
(tab_sz_gb+tab_prt_sz_gb+lob_sz_gb+idx_sz_gb+idx_prt_sz_gb+lob_idx_sz_gb) sum_
seg_sz_gb from t
union all
select 'SUM',sum(tab_sz_gb),sum(tab_prt_sz_gb),sum(idx_sz_gb),sum(idx_prt_sz_gb)
,sum(lob_sz_gb),sum(lob_idx_sz_gb),
sum(tab_sz_gb+tab_prt_sz_gb+lob_sz_gb+idx_sz_gb+idx_prt_sz_gb+lob_idx_sz_gb) fr
om t;
OWNER
TAB_SZ_GB TAB_PRT_SZ_GB IDX_SZ_GB IDX_PRT_SZ_GB LOB_SZ_GB LOB_IDX_
SZ_GB SUM_SEG_SZ_GB
---------- ---------- ------------- ---------- ------------- ---------- ------------ ------------PRD_DW
414.45
1230.39
55.4
397.53
.45
0
PRD_DS
0
PRD_SG
0
SUM
0
2098.22
20.61
17839.03
0
122.97
435.06
20060.22
7707.7
5.71
10104.81
.2
93.36
6.21
23.4
9031.45
67.32
10525.74
.65
Elapsed: 00:00:07.32
--02 USING SUM/DECODE & COMPUTE OPTIONS, GENERATING THE REPORT
connect veeksha/veeksha
break on report
set linesize 120
column owner format a10
compute sum of tab_sz_gb on report
compute sum of tab_prt_sz_gb on report
compute sum of lob_sz_gb on report
compute sum of idx_sz_gb on report
compute sum of idx_prt_sz_gb on report
compute sum of lob_idx_sz_gb on report
compute sum of sum_seg_sz_gb on report
select owner,tab_sz_gb,tab_prt_sz_gb,idx_sz_gb,idx_prt_sz_gb,lob_sz_gb,lob_idx_s
z_gb,
tab_sz_gb+tab_prt_sz_gb+lob_sz_gb+idx_sz_gb +idx_prt_sz_gb+lob_idx_sz_gb sum_seg
_sz_gb
from (
select owner,
round(sum(decode(segment_type,'TABLE',bytes,0))/1024/1024/1024,2) tab_sz
_gb,
round(sum(decode(segment_type,'TABLE PARTITION',bytes,0))/1024/1024/1024
,2) tab_prt_sz_gb,
round(sum(decode(segment_type,'INDEX',bytes,0))/1024/1024/1024,2) idx_sz
_gb,
round(sum(decode(segment_type,'INDEX PARTITION',bytes,0))/1024/1024/1024
,2) idx_prt_sz_gb,
round(sum(decode(segment_type,'LOBSEGMENT',bytes,0))/1024/1024/1024,2) l
ob_sz_gb,
round(sum(decode(segment_type,'LOBINDEX',bytes,0))/1024/1024/1024,2) lob
_idx_sz_gb
from dba_segments
where (segment_type like 'INDEX%' or segment_type like 'TABLE%' or segment_type
like 'LOB%') and owner like 'PRD%'
group by owner)
order by owner;
OWNER
TAB_SZ_GB TAB_PRT_SZ_GB IDX_SZ_GB IDX_PRT_SZ_GB LOB_SZ_GB LOB_IDX_
SZ_GB SUM_SEG_SZ_GB
---------- ---------- ------------- ---------- ------------- ---------- ------------ ------------PRD_DW
414.45
1230.39
55.4
397.53
.45
0
2098.22
PRD_DS
20.61
7707.7
5.71
10104.81
.2
0
17839.03
PRD_SG
0
93.36
6.21
23.4
0
0
122.97
---------- ------------- ---------- ------------- ---------- ------------ ------------sum
435.06
9031.45
67.32
10525.74
.65
0
20060.22
Elapsed: 00:00:30.51
--03 USING PIVOT & COMPUTE OPTIONS, GENERATING THE REPORT
connect veeksha/veeksha
break on report
set linesize 120
column owner format a10
compute sum of tab_sz_gb on report
compute sum of tab_prt_sz_gb on report
compute sum of lob_sz_gb on report
compute sum of idx_sz_gb on report
compute sum of idx_prt_sz_gb on report
compute sum of lob_idx_sz_gb on report
compute sum of sum_seg_sz_gb on report
with t as (
select * from (
select owner,segment_type,bytes from dba_segments where owner like 'PRD%')
pivot (sum(bytes) as sz for (segment_type) in ('TABLE' as tab,
'TABLE PARTITION' as tab_prt,'INDEX' as idx,'INDEX PARTITION' as idx_prt,
'LOBSEGMENT' as lob,'LOBINDEX' as lob_idx)) order by owner)
select owner,round(tab_sz/1024/1024/1024,2) tab_sz_gb,round(tab_prt_sz/1024/1024
/1024,2) tab_prt_sz_gb,
round(idx_sz/1024/1024/1024,2) idx_sz_gb,round(idx_prt_sz/1024/1024/1024,2) idx_
prt_sz_gb,
round(lob_sz/1024/1024/1024,2) lob_sz_gb,round(lob_idx_sz/1024/1024/1024,2) lob_
idx_sz_gb,
round((tab_sz+tab_prt_sz+idx_sz+idx_prt_sz+lob_sz+lob_idx_sz)/1024/1024/1024,2)
sum_seg_sz_gb from t;
Reference: http://www.oracle-base.com/articles/11g/pivot-and-unpivot-operators-1
1gr1.php
OWNER
TAB_SZ_GB TAB_PRT_SZ_GB IDX_SZ_GB IDX_PRT_SZ_GB LOB_SZ_GB LOB_IDX_
SZ_GB SUM_SEG_SZ_GB
---------- ---------- ------------- ---------- ------------- ---------- ------------ ------------PRD_DW
414.45
1230.39
55.4
397.53
.45
0
2098.21
PRD_DS
20.61
7707.7
5.71
10104.81
.2
0
17839.03
PRD_SG
0
93.36
6.21
23.4
0
0
122.97
---------- ------------- ---------- ------------- ---------- ------------ ------------sum
435.06
9031.45
67.32
10525.74
.65
0
20060.21
Elapsed: 00:00:11.46
break on report
set linesize 120
column owner format a10
compute sum of tab_sz_gb on report
compute sum of tab_prt_sz_gb on report
compute sum of lob_sz_gb on report
compute sum of idx_sz_gb on report
compute sum of idx_prt_sz_gb on report
gb
from dba_segments where owner=c1.owner) loop
dbms_output.put_line(rpad(c1.owner,11)||' '||rpad(c2.tbl_sz_gb,9)||' '||rpad(c2.
tbl_prt_sz_gb,9)||' '||
rpad(c2.idx_sz_gb,9)||' '||rpad(c2.idx_prt_sz_gb,9)||' '||r
pad(c2.lob_sz_gb,9)||' '||rpad(c2.lob_idx_sz_gb,9)||' '||
rpad(c2.tbl_sz_gb+c2.tbl_prt_sz_gb+c2.idx_sz_gb+c2.idx_prt_sz_gb+c2.lob_sz_gb+c2
.lob_idx_sz_gb,9));
v_tbl:=v_tbl+c2.tbl_sz_gb;
v_tpt:=v_tpt+c2.tbl_prt_sz_gb;
v_idx:=v_idx+c2.idx_sz_gb;
v_ipt:=v_ipt+c2.idx_prt_sz_gb;
v_lob:=v_lob+c2.lob_sz_gb;
v_lix:=v_lix+c2.lob_idx_sz_gb;
end loop;
end loop;
dbms_output.put_line(rpad('GRAND TOTAL',11)||' '||rpad(v_tbl,9)||' '||rpad(v_tpt
,9)||' '||
rpad(v_idx,9)||' '||rpad(v_ipt,9)||' '||rpad(v_lob,9)||' '||rpad(v_lix,9) ||' '|
|rpad(v_tbl+v_tpt+v_idx+v_ipt+v_lob+v_lix,9));
end;
/
PRD_DW
414.45
1230.39 55.4
397.53
.45
0
2098.22
PRD_DS
20.61
7707.7
5.71
10104.81 .2
0
17839.03
PRD_SG
0
93.36
6.21
23.4
0
0
122.97
GRAND TOTAL 435.06
9031.45 67.32
10525.74 .65
0
20060.22
PL/SQL procedure successfully completed.
Elapsed: 00:00:14.86
Happy scripting