Question

Comme il est indiqué sur le page d'aperçu Oracle XE :

Base de données Oracle XE peut être installé sur n'importe quelle taille machine hôte avec n'importe quel nombre de processeurs (une base de données par machine), mais XE stockera jusqu'à 4 Go de données utilisateur , utilisez jusqu'à 1 Go de mémoire. et utilisez un processeur sur la machine hôte.

Maintenant si je veux surveiller la base de données pour voir la quantité de données utilisateur utilisées ou quelle quantité de mémoire est la base de données en utilisant, comment ferais-je cela? Il est possible de surveiller ces valeurs à partir d'Oracle Application Express, mais je souhaite surveiller la base de données à partir d'un système de surveillance centralisé. Oracle Xe Documentation présente un Requête qui retourne une utilisation de la zone de récupération Flash, donc je suppose qu'il y a une requête similaire pour l'utilisation des données utilisateur également.

SELECT
NAME,
TO_CHAR(SPACE_LIMIT, '999,999,999,999') AS SPACE_LIMIT,
TO_CHAR(SPACE_LIMIT - SPACE_USED + SPACE_RECLAIMABLE,'999,999,999,999')
   AS SPACE_AVAILABLE,
ROUND((SPACE_USED - SPACE_RECLAIMABLE)/SPACE_LIMIT * 100, 1)
   AS PERCENT_FULL
FROM V$RECOVERY_FILE_DEST;

En outre, que se passe-t-il lorsque les données utilisateur sont au-dessus de la limite?

Était-ce utile?

La solution

tiré sans vergogne de la site Web Oracle FAQ , voici une requête qui contrôleEspace utilisé par table à table:

SELECT /* + RULE */  df.tablespace_name "Tablespace",
       df.bytes / (1024 * 1024) "Size (MB)",
       SUM(fs.bytes) / (1024 * 1024) "Free (MB)",
       Nvl(Round(SUM(fs.bytes) * 100 / df.bytes),1) "% Free",
       Round((df.bytes - SUM(fs.bytes)) * 100 / df.bytes) "% Used"
  FROM dba_free_space fs,
       (SELECT tablespace_name,SUM(bytes) bytes
          FROM dba_data_files
         GROUP BY tablespace_name) df
 WHERE fs.tablespace_name (+)  = df.tablespace_name
 GROUP BY df.tablespace_name,df.bytes
UNION ALL
SELECT /* + RULE */ df.tablespace_name tspace,
       fs.bytes / (1024 * 1024),
       SUM(df.bytes_free) / (1024 * 1024),
       Nvl(Round((SUM(fs.bytes) - df.bytes_used) * 100 / fs.bytes), 1),
       Round((SUM(fs.bytes) - df.bytes_free) * 100 / fs.bytes)
  FROM dba_temp_files fs,
       (SELECT tablespace_name,bytes_free,bytes_used
          FROM v$temp_space_header
         GROUP BY tablespace_name,bytes_free,bytes_used) df
 WHERE fs.tablespace_name (+)  = df.tablespace_name
 GROUP BY df.tablespace_name,fs.bytes,df.bytes_free,df.bytes_used
 ORDER BY 4 DESC;

Par défaut, les données utilisateur sont l'espace utilisé dans l'espace de table USERS.

Quant à ce qui se passe lorsque vous êtes à la limite, je ne peux que deviner que:

  • Vous obtiendrez des erreurs hors de l'espace lorsque vous essayez d'insérer des données (un message d'erreur Oracle semble toujours provenir de hors de l'espace de toute façon; -)
  • Vous pouvez être dans le plus grand chèque de votre vie ...

Autres conseils

une matière étroitement liée: utilisation de l'espace de table par utilisateur (pour savoir où se trouve l'espace):

select owner,tablespace_name,
sum(bytes)/1024/1024 as mbytes
from dba_segments
group by owner,tablespace_name
order by mbytes desc;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top