J'ai besoin de savoir TRUE em> taille de table à table à Oracle. J'ai quelques espaces de table et j'ai besoin de savoir combien d'espace il utilise maintenant et combien d'espace est gratuit (et peut-être pour cent d'espace libre). J'ai trouvé dans le Web des SQLS mais toutes ont tous montré une taille basée sur la marque de l'eau ... ce qui n'est pas un véritable espace alloué maintenant mais aussi loin que je connais la valeur la plus élevée qui a déjà été atteinte ...
Donc, mon besoin réel est de savoir si j'ai assez d'espace pour mes données qui sont constamment écrites et que je dois savoir à quel point je peux stocker avant de devoir supprimer certains d'entre eux. P>
merci p>
3 Réponses :
Essayez ceci:
-- 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);
Merci beaucoup!!! Je peux confirmer que cela fonctionne :) Peut-être que je devrais vous inscrire et voter pour votre réponse, car il résout un problème que j'ai trouvé très difficile pour beaucoup de gens et qui n'a pas de bonne réponse dans le Web ... Maintenant, il a :)
Notez que si des datafiles sont définis sur Autoextend et que les fichiers ne sont pas à leur taille maximale, cette réponse ne le prend pas. Il rapporte uniquement sur l'espace libre dans l'allocation actuelle uniquement.
Si vous souhaitez avoir une idée de la taille du fichier de données, y compris ces fichiers pouvant accroître automatiquement, essayez:
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
Espérons que cela vous aiderait,
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;