2010-02-05 10 views
7

मुझे ओरेकल में सच टेबलस्पेस आकार जानने की आवश्यकता है। मेरे पास कुछ टेबलस्पेस है और मुझे यह जानने की जरूरत है कि अब कितनी जगह इसका उपयोग करती है और कितनी जगह खाली है (और शायद खाली स्थान का प्रतिशत)। मैंने कुछ एसक्यूएल में वेब पाया लेकिन उनमें से सभी ने पानी के निशान के आधार पर आकार दिखाया ... जो अब आवंटित सही जगह नहीं है, लेकिन जहां तक ​​मुझे उच्चतम मूल्य पता चला है जो कभी भी पहुंचा है ... तो मेरी असली ज़रूरत है पता है कि मेरे पास मेरे डेटा के लिए पर्याप्त जगह है जो लगातार लिखी जाती है और मुझे पता होना चाहिए कि उनमें से कुछ को हटाने से पहले मैं कितना स्टोर कर सकता हूं।ऑरैकल में सही टेबलस्पेस आकार

धन्यवाद

उत्तर

19

इस प्रयास करें:

-- Available space, by tablespace 

SELECT * FROM 
    (SELECT tablespace_name FROM dba_tablespaces) 
LEFT OUTER JOIN 
    (SELECT tablespace_name, SUM(bytes) AS total_bytes 
    FROM dba_data_files 
    GROUP BY tablespace_name) 
    USING (tablespace_name) 
LEFT OUTER JOIN 
    (SELECT tablespace_name, sum(bytes) AS used_bytes 
    from dba_segments 
    GROUP BY tablespace_name) 
    USING (tablespace_name) 
LEFT OUTER JOIN 
    (SELECT tablespace_name, SUM(bytes) AS free_bytes 
    FROM dba_free_space 
    GROUP BY tablespace_name) 
    USING (tablespace_name); 
+0

बहुत बहुत धन्यवाद !!! मैं पुष्टि कर सकता हूं कि यह काम करता है :) शायद मुझे पंजीकरण करना चाहिए और आपके उत्तर के लिए वोट देना चाहिए क्योंकि यह समस्या हल करती है जिसे मैंने कई लोगों के लिए बहुत कठिन पाया है और जिनके पास वेब में अच्छा जवाब नहीं है ... अब यह है :) – miki

4

आप तो कोशिश उन फ़ाइलों कि ऑटो विस्तार कर सकते हैं सहित डेटा फ़ाइल आकार की एक विचार प्राप्त करना चाहते हैं:

SELECT DISTINCT a.tablespace_name, 
      sum(a.bytes)/1024/1024 CurMb, 
      sum(decode(b.maxextend, null, a.bytes/1024/1024, b.maxextend*(SELECT value FROM v$parameter WHERE name='db_block_size')/1024/1024)) MaxMb, 
      round(100*(sum(a.bytes)/1024/1024 - round(c.free/1024/1024))/(sum(decode(b.maxextend, null, a.bytes/1024/1024, b.maxextend*(SELECT value FROM v$parameter WHERE name='db_block_size')/1024/1024)))) UPercent, 
      (sum(a.bytes)/1024/1024 - round(c.free/1024/1024)) TotalUsed, 
      (sum(decode(b.maxextend, null, a.bytes/1024/1024, b.maxextend*(SELECT value FROM v$parameter WHERE name='db_block_size')/1024/1024)) - (sum(a.bytes)/1024/1024 - round(c.Free/1024/1024))) TotalFree 
FROM dba_data_files a, 
    sys.filext$ b, 
    (SELECT d.tablespace_name , sum(nvl(c.bytes,0)) free 
    FROM dba_tablespaces d,dba_free_space c 
    WHERE d.tablespace_name = c.tablespace_name(+) 
    GROUP BY d.tablespace_name) c 
WHERE a.file_id = b.file#(+) 
    AND a.tablespace_name = c.tablespace_name 
GROUP BY a.tablespace_name, 
     c.free/1024 
0

उम्मीद है कि इस, आपकी सहायता करेगा,

SELECT a.tablespace_name, a.file_name, a.bytes allocated_bytes,b.free_bytes FROM dba_data_files a, 
(SELECT file_id, SUM(bytes) free_bytes FROM dba_free_space b GROUP BY file_id) b WHERE a.file_id=b.file_id 
ORDER BY a.tablespace_name; 
संबंधित मुद्दे