29 septembre 2009

Informations sur les tablespaces Oracle en un script

La question du jour est la suivante : comment savoir tout ce qu'il y a à savoir sur les tablespaces d'une base de données Oracle ?

Si comme moi, vous êtes plus MySQL qu'Oracle, plus Linux que Windows, ce script SQL est pour vous !

Vous devez d'abord vous connecter à la base de données Oracle avec sqlplus puis à lancer la requête suivante :

set echo off
set feedback off
set verify off
set linesize 512

set term off
COLUMN block_size NOPRINT new_value block_size
SELECT
   value block_size
FROM
   v$parameter
WHERE
   name='db_block_size';

set term on

prompt ------------------------------
prompt - Infos sur les tablespaces --
prompt ------------------------------

col Tablespace_name Heading 'Tablespace'
col Megs_Alloc      Heading 'Mo alloués'
col Megs_Free       Heading 'Mo libres'
col Megs_Used       Heading 'Mo utilisés'
col Pct_Free        Heading 'Pct Free'
col Pct_Used        Heading 'Pct Used'
col Init_Ext        Heading 'Init Ext'
col Next_Ext        Heading 'Next Ext'
col Min_Ext         Heading 'Min Ext'
col Max_Ext         Heading 'Max Ext'
col Num_Segs        Heading 'Nbre Segments'
col Num_Exts        Heading 'Nbre Extents'


SELECT
   c.tablespace_name,
   round(a.bytes/1048576) Megs_Alloc,
   round(b.bytes/1048576) Megs_Free,
   round((a.bytes-b.bytes)/1048576) Megs_Used,
   round(b.bytes/a.bytes * 100) Pct_Free,
   round((a.bytes-b.bytes)/a.bytes * 100) Pct_Used,
   round(c.initial_extent/1048576) Init_Ext,
   round(c.next_extent/1048576) Next_Ext,
   round(a.minbytes/1048576) Min_Ext,
   round(a.maxbytes/1048576) Max_Ext,
   nvl(d.num_segs,0) Num_segs,
   nvl(d.num_exts,0) Num_Exts
FROM
   ( SELECT
        tablespace_name,
        sum(a.bytes) bytes,
        min(a.bytes) minbytes,
        max(a.bytes) maxbytes
     FROM
        sys.dba_data_files a
     GROUP BY tablespace_name) a,
   ( SELECT
        a.tablespace_name,
        nvl(sum(b.bytes),0) bytes
     FROM
        sys.dba_data_files a,
        sys.dba_free_space b
     WHERE
        a.tablespace_name = b.tablespace_name (+)
     AND
        a.file_id = b.file_id (+)
     GROUP BY
        a.tablespace_name) b,
    sys.dba_tablespaces c,
    ( SELECT
        tablespace_name,
        count(distinct segment_name) num_segs,
        count(extent_id) num_exts
      FROM
        sys.dba_extents
      GROUP BY
      tablespace_name) d
WHERE
   a.tablespace_name = b.tablespace_name(+)
AND
   a.tablespace_name = c.tablespace_name
AND
   a.tablespace_name = d.tablespace_name(+)
ORDER BY
   c.tablespace_name;

Pour avoir quelque chose de plus propre, vous pouvez récupérer le résultat de la requête dans un fichier. Il vous suffit d'ajouter la commande :
spool votreFichier avant la requête SQL
puis :
spool off
exit

après la requête SQL


Merci au site developpez.com.

Posté par fatihaelh à 16:54 - Oracle - Commentaires [2] - Permalien [#]

Commentaires

    interessant

    très interessant ))

    J'ai vu par hasard ton blog ... en navigant dans les échanges des dérouilleurs sur facebook

    Bon courage

    Posté par mous, 07 octobre 2009
  • Merci !

    Posté par fatiha, 07 octobre 2009

Poster un commentaire