Tablespaces infos

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Script SQL*Plus de diagnostic (Tablespaces)
Voir aussi Tablespace size · Tablespace extract sql

Tablespaces infos donne une vue d'ensemble détaillée de tous les tablespaces d'une base : Mo alloués, Mo libres, Mo utilisés, pourcentages, taille des extents (initial/next/min/max) et nombre de segments/extents par tablespace. Contrairement à Tablespace size qui ne renvoie qu'un total global, ce script permet d'identifier quel tablespace approche de la saturation.

Une seconde requête complémentaire liste les disk groups ASM (v$asm_diskgroup / v$asm_disk) avec leur taille et espace libre en Go, utile lorsque le stockage est en ASM plutôt qu'en fichiers système classiques.

Script

-- Vue d'ensemble détaillée de tous les tablespaces : espace alloué,
-- libre, utilisé, et taille des extents par tablespace.

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 ------------------------------

COLUMN tablespace_name HEADING 'Tablespace'
COLUMN megs_alloc      HEADING 'Mo alloues'
COLUMN megs_free       HEADING 'Mo libres'
COLUMN megs_used       HEADING 'Mo utilises'
COLUMN pct_free        HEADING 'Pct Free'
COLUMN pct_used        HEADING 'Pct Used'
COLUMN init_ext        HEADING 'Init Ext'
COLUMN next_ext        HEADING 'Next Ext'
COLUMN min_ext         HEADING 'Min Ext'
COLUMN max_ext         HEADING 'Max Ext'
COLUMN num_segs        HEADING 'Nbre Segments'
COLUMN 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(bytes) bytes
           , MIN(bytes) minbytes
           , MAX(bytes) maxbytes
      FROM   dba_data_files
      GROUP BY tablespace_name
    ) a
  , ( SELECT a.tablespace_name
           , NVL(SUM(b.bytes),0) bytes
      FROM   dba_data_files a
           , dba_free_space b
      WHERE  a.tablespace_name = b.tablespace_name (+)
      AND    a.file_id         = b.file_id (+)
      GROUP BY a.tablespace_name
    ) b
  , dba_tablespaces c
  , ( SELECT tablespace_name
           , COUNT(DISTINCT segment_name) num_segs
           , COUNT(extent_id)             num_exts
      FROM   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;

Disk groups ASM (complément stockage ASM)

SELECT
    g.group_number
  , g.name
  , d.name
  , d.disk_number
  , d.total_mb / 1024 taille_go
  , d.free_mb  / 1024 libre_go
FROM
    v$asm_diskgroup g
  , v$asm_disk      d
WHERE
    g.group_number = d.group_number
ORDER BY
    g.group_number;

Voir aussi