-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathcalculate_total_size.sql
80 lines (74 loc) · 1.64 KB
/
calculate_total_size.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
-- calculates the sum of the ALLOCATED sizes for the given non partitioned tables
-- and their dependend indexes and lob segments
column mb format 9G999G999D99
column extents format 999G999D99
column blocks format 999G999G999D99
compute sum label total of mb on report
break on report
with my_segments
as
( select
--+ MATERIALIZE
tab.owner table_owner,
tab.table_name,
ind.owner index_owner,
ind.index_name,
lob.segment_name lob_segment,
lob.index_name lob_ind_segment
from
dba_tables tab
left outer join dba_indexes ind
on ( tab.owner = ind.table_owner
and tab.table_name = ind.table_name
)
left outer join dba_lobs lob
on ( tab.owner = lob.owner
and tab.table_name = lob.table_name
)
where
tab.owner = '&owner'
and tab.table_name = '&table_name'
)
select
segment_type,
sum(extents) extents,
sum(blocks) blocks,
sum(bytes)/1024/1024 mb
from
dba_segments dseg
where
(owner,segment_name) in
( select
seg.table_owner,
seg.table_name
from
my_segments seg
)
or (owner,segment_name) in
( select
seg.index_owner,
seg.index_name
from
my_segments seg
)
or (owner, segment_name) in
( select
seg.table_owner,
seg.lob_segment
from
my_segments seg
)
or (owner, segment_name) in
( select
seg.table_owner,
seg.lob_ind_segment
from
my_segments seg
)
group by
segment_type
;
clear computes
clear breaks
undef owner
undef table_name