[Oracle] question sur vues dba_*

[Oracle] question sur vues dba_* - SQL/NoSQL - Programmation

Marsh Posté le 28-08-2007 à 17:26:39    

Je souhaiterais comprendre pourquoi les 3 requêtes suivantes ne renvoient pas le même résultat :
 
select tablespace_name from dba_tablespaces;
select distinct(tablespace_name) from dba_free_space;
select distinct(tablespace_name) from dba_extents;
 
En effet, si la vue dba_tablespaces contient (heureusement ...) la liste complète des tablespaces, il se trouve que pour les 2 autres vues, souvent dans mes instances il manque un tablespace.
Le problème est que j'ai des scripts de supervision (récupérés sur le Net) qui se basent dans leurs jointures sur dba_free_space ou dba_extents pour sortir des états de volumétrie de tablespaces, et du coup un tablespace full s'est retrouvé non détecté.
Y a t'il un moyen pour forcer Oracle à ce que les vues dba_free_space et dba_extents soient complètes au niveau des tablespaces ?


Message édité par ph75 le 28-08-2007 à 17:29:53
Reply

Marsh Posté le 28-08-2007 à 17:26:39   

Reply

Marsh Posté le 29-08-2007 à 08:56:20    

bon pour commencer quand on a un doute sur une vue, on regarde le dictionnaire ;)

Code :
  1. SQL> select * from dictionary where table_name in ('DBA_TABLESPACES', 'DBA_FREE_SPACE', 'DBA_EXTENTS');
  2. TABLE_NAME      COMMENTS
  3. --------------- --------------------------------------------------
  4. DBA_EXTENTS     Extents comprising all segments in the database
  5. DBA_FREE_SPACE  Free extents in all tablespaces
  6. DBA_TABLESPACES Description of all tablespaces


 
pour ce qui est de ton problème, les vues dba_free_space et dba_extents ne prennent pas en compte les tablespaces de type temporaire
L'espace utilisé dedans varie très souvent, donc à moins de vouloir absolument récupérer une alerte toutes les 30 sec parce qu'un gugusse a lancer une requête avec pleins de tris, il n'y a pas d'intérêt à superviser de manière pro-active la taille d'un tablespace temporaire
La seule chose à faire dessus, c'est de dimensionner correctement la taille du tablespace temporaire si trop souvent les requêtes échouent par manque d'espace temporaire...
 
t'utilises quoi comme scripts de supervision ?

Reply

Marsh Posté le 29-08-2007 à 14:09:20    

couak a écrit :

pour ce qui est de ton problème, les vues dba_free_space et dba_extents ne prennent pas en compte les tablespaces de type temporaire

Un des problèmes que j'ai eu était sur un TS   non temporaire et non système, avec une requête utilisant dba_free_space.
L'autre problème était effectivement sur le TS TMP avec une requête utilisant dba_extents -> OK.
 
Pour la requête utilisant dba_free_space (c'est extrait d'un script de supervision Big Brother: bb-moracle.sh) :
 

select TABLESPACE , TAILLE ,TAILLEMAX, 100-((FREE+TAILLEMAX-TAILLE)/TAILLEMAX*100) "USED (%)" from
(
select  TABLESPACE , sum("SIZE (M)" ) "TAILLE", sum("MAXSIZE (M)" ) "TAILLEMAX", "FREE" from
(
select  d.tablespace_name "TABLESPACE",
sum(d.bytes)/1048576 "SIZE (M)",
FREESPCE "FREE",
sum(d.maxbytes)/1048576 "MAXSIZE (M)",
round(((sum(d.bytes)/1048576-FREESPCE)/(sum(d.maxbytes)/1048576)*100),2) "MAXUSED"
FROM dba_data_files  d,
( SELECT
round(sum(f.bytes)/1048576,2) FREESPCE,
f.tablespace_name Tablespc
FROM dba_free_space f
GROUP BY f.tablespace_name)
WHERE d.tablespace_name = Tablespc
and d.autoextensible = 'YES'
group by d.tablespace_name,FREESPCE
union
select  d.tablespace_name,
sum(d.bytes)/1048576,
FREESPCE,
sum(d.bytes)/1048576,
100 -(round((FREESPCE/(sum(d.bytes)/1048576))*100))
FROM dba_data_files  d,
( SELECT
round(sum(f.bytes)/1048576,2) FREESPCE,
f.tablespace_name Tablespc
FROM dba_free_space f
GROUP BY f.tablespace_name)
WHERE d.tablespace_name = Tablespc
and d.autoextensible = 'NO'
group by d.tablespace_name,FREESPCE
order by 1 desc
)
group by tablespace, free
) order by TABLESPACE;
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed