Anda di halaman 1dari 5

ONE QUESTION FOUR SOLUTIONS

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

compute sum of lob_idx_sz_gb on report


compute sum of sum_seg_sz_gb on report
select owner,round(tbl_sz/1024/1024/1024,2) tbl_sz_gb,
round(tbl_prt_sz/1024/1024/1024,2) tbl_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((tbl_sz+tbl_prt_sz+idx_sz+idx_prt_sz+lob_sz+lob_idx_sz)/1024/1024/1024
,2) sum_seg_sz_gb
from (
select owner,segment_type,bytes from dba_segments where owner like 'PRD%') pivot
( sum(bytes) for segment_type in
('TABLE' as tbl_sz ,'TABLE PARTITION' as tbl_prt_sz,'INDEX' as idx_sz,
'INDEX PARTITION' as idx_prt_sz,'LOBSEGMENT' as lob_sz ,'LOBINDEX' as lob_idx_s
z ));
OWNER
TBL_SZ_GB TBL_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
67.32
10525.74
.65
0
20060.21
Elapsed: 00:00:08.21
References:
http://www.oracle-developer.net/display.php?id=506
--04 GENERATING THE REPORT VIA PL/SQL
connect veeksha/veeksha
set serverout on size 1000000 timing on
declare
v_tbl number:=0;
v_tpt number:=0;
v_idx number:=0;
v_ipt number:=0;
v_lob number:=0;
v_lix number:=0;
begin
for c1 in (select distinct owner from dba_segments where owner like 'PRD%' order
by 1) loop
for c2 in (select
round(sum(decode(segment_type,'TABLE',bytes,0))/1024/1024/1024,2) tbl_sz_gb,
round(sum(decode(segment_type,'TABLE PARTITION',bytes,0))/1024/1024/1024,2) tbl_
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) lob_sz_gb
,
round(sum(decode(segment_type,'LOBINDEX',bytes,0))/1024/1024/1024,2) lob_idx_sz_

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

Anda mungkin juga menyukai