Bir şemadaki tüm tabloların gerçek boyutunun hesaplanması
Oracle veritabanındaki bir tablonun boyutu hesaplanırken sadece data boyutuna bakmak hatalı olacaktır. Tabloya ait , indeks , lobsegment ve lobindex nesneleri ile birlikte düşünmek gerekir. Çünkü tabloyu başka bir veritabanına taşıdığımızda bağlı olduğu tüm nesneler de taşınacaktır.
Bir şemadaki tüm tabloların geçek boyutlarını hesaplamak için aşağıdaki sorgu kullanılabilir. Sorgudaki KULLANICI parametresi yerine bilgisi alınan kullanıcıyı yazıp , çalıştırabilirsiniz.
SELECT owner, table_name, TRUNC (SUM (bytes) / 1024 / 1024) MB
FROM (SELECT segment_name table_name, owner, bytes
FROM dba_segments
WHERE segment_type IN
('TABLE', 'TABLE SUBPARTITION', 'TABLE PARTITION')
UNION ALL
SELECT i.table_name, i.owner, s.bytes
FROM dba_indexes i, dba_segments s
WHERE s.segment_name = i.index_name
AND s.owner = i.owner
AND s.segment_type IN
('INDEX', 'INDEX SUBPARTITION', 'INDEX PARTITION')
UNION ALL
SELECT l.table_name, l.owner, s.bytes
FROM dba_lobs l, dba_segments s
WHERE s.segment_name = l.segment_name
AND s.owner = l.owner
AND s.segment_type = 'LOBSEGMENT'
UNION ALL
SELECT l.table_name, l.owner, s.bytes
FROM dba_lobs l, dba_segments s
WHERE s.segment_name = l.index_name
AND s.owner = l.owner
AND s.segment_type = 'LOBINDEX'
UNION ALL
SELECT l.table_name, l.table_owner, s.bytes
FROM dba_lob_partitions l, dba_segments s
WHERE s.partition_name = l.lob_partition_name
AND s.owner = l.table_owner
AND s.segment_type = 'LOB PARTITION'
UNION ALL
SELECT l.table_name, l.table_owner, s.bytes
FROM dba_lob_subpartitions l, dba_segments s
WHERE s.partition_name = l.lob_subpartition_name
AND s.owner = l.table_owner
AND s.segment_type = 'LOB SUBPARTITION'
)
WHERE owner IN UPPER ('KULLANICI')
GROUP BY table_name, owner
ORDER BY SUM (bytes) DESC;