Surveillance de l'usage de l'espace de table dans Oracle Xe
-
12-11-2019 - |
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?
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;