oracle veri tabanım var. Bazı büyük tablolarımın boyutlarını dump almadan query ile çekip görmek istiyorum.
Nasıl bir komut kullanmalıyım?
oracle veri tabanım var. Bazı büyük tablolarımın boyutlarını dump almadan query ile çekip görmek istiyorum.
Nasıl bir komut kullanmalıyım?
// Comments are closed.
Selam,
Aşağıdaki sql yardımcı olabilir;
select segment_name,
segment_type,
bytes/1024/1024 MB
from dba_segments
where segment_type=’TABLE’ and segment_name=’Tablo Adı’;
dba_segment objesine (tablo/view) yetkiler sınırlandırılmış kullandığım canlı ortam olduğu için. bunu yapmanın başka bir yolu olabilir mi :S
ya yetki almalısınız ya da yetkisi olan birinden (dba’den vs.) istemelisiniz.
tablo’ya ait indexleri, lob alanları, partition’ları, subpartitionları da dahil etmelisiniz. segment_type=’TABLE’ yeterli olmaz. aşağıda bir sorgu paylaştım, sık kullandığım bir scripttir. işinize yarayacaktır.
Aşağıdaki sorgu ile bir şemaya ait tüm tabloların boyutlarını görebilirsiniz.
with IND as (select /* materialize */ table_owner,table_name, s.segment_name ,sum (bytes) ind_bytes from dba_Segments s,dba_indexes x where s.segment_type like 'INDEX%' and s.owner = '&&owner' and s.owner=x.owner and s.segment_name=x.index_name group by table_owner,table_name, s.segment_name), TAB as ( select /* materialize */ owner,segment_name,count(*) adet ,sum(bytes) tab_bytes from dba_segments where segment_type in ('TABLE','TABLE PARTITION','TABLE SUBPARTITION') and owner = '&owner' group by owner,segment_name), SUMS as (select /* materialize*/ sum(bytes) sum_bytes from dba_segments ), LOBS as (select /*+ RULE*/ s.owner,l.table_name, sum(bytes) lob_bytes from dba_lobs L, dba_segments s where l.owner=s.owner and s.segment_name=l.segment_name and l.owner = '&owner' group by s.owner,l.table_name) select owner,segment_name,adet part, round(data_bytes/1024/1024/1024) data_size_GB , round(nvl(index_bytes,0)/1024/1024/1024) index_size_GB, round(nvl(lob_bytes,0)/1024/1024/1024) lob_size_GB, round((data_bytes+nvl(index_bytes,0) +nvl(lob_bytes,0) )/1024/1024/1024) total_GB, round(((data_bytes+nvl(index_bytes,0)+nvl(lob_bytes,0) )/sum_bytes)*100) PCT from (select t.owner,t.segment_name,t.adet,tab_bytes data_bytes, lob_bytes ,sum(ind_bytes) index_bytes from tab t, ind i, lobs b where t.owner=i.table_owner(+) and t.segment_name=i.table_name(+) and t.owner=b.owner(+) and t.segment_name=b.table_name(+) group by t.owner,t.segment_name,t.adet,tab_bytes, lob_bytes order by tab_bytes+nvl(index_bytes,0)+nvl(lob_bytes,0) desc ),sums;