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;

 

 

Loading

Leave Your Comment