Dba tablespaces 7

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Script SQL*Plus de diagnostic
Domaine Administration
Voir aussi Dba tablespaces · Dba tablespaces 8

Dba tablespaces 7 est la variante historique du rapport de tablespaces, conçue pour Oracle7 et Oracle8. Elle reste utilisable sur des versions plus récentes (Oracle8i et au-delà) mais, contrairement à Dba tablespaces, elle ne remonte aucune information sur les vrais tablespaces TEMPORARY basés sur des tempfiles (fonctionnalité qui n'existait pas encore côté dictionnaire à l'époque).

Script

La logique diffère des deux autres variantes : au lieu de s'appuyer sur dba_free_space agrégé par tablespace, elle croise dba_data_files et dba_free_space ligne à ligne en comptant les fichiers/blocs distincts — une approche plus lourde mais qui fonctionnait déjà sur les dictionnaires Oracle7/8.

-- Rapport sur les tablespaces (taille, utilisation, % occupé)
-- Compatible Oracle7 et Oracle8 (fonctionne aussi sur Oracle8i+, mais sans les
-- tablespaces TEMPORARY sur tempfiles : voir Dba tablespaces pour ce cas)

SET TERMOUT OFF
COLUMN current_instance NEW_VALUE current_instance NOPRINT
SELECT rpad(instance_name, 17) current_instance FROM v$instance;
SET TERMOUT ON

PROMPT
PROMPT +------------------------------------------------------------------------+
PROMPT | Report   : Tablespaces                                                 |
PROMPT | Instance : &current_instance                                           |
PROMPT +------------------------------------------------------------------------+

SET ECHO        OFF
SET FEEDBACK    6
SET HEADING     ON
SET LINESIZE    180
SET PAGESIZE    50000
SET TIMING      OFF
SET TRIMOUT     ON
SET TRIMSPOOL   ON
SET VERIFY      OFF

CLEAR COLUMNS
CLEAR BREAKS
CLEAR COMPUTES

COLUMN tablespace  FORMAT a30                HEADING 'Tablespace Name'
COLUMN dummy       NOPRINT
COLUMN bytes       FORMAT 9,999,999,999,999  HEADING 'Tablespace Size'
COLUMN used        FORMAT 9,999,999,999,999  HEADING 'Used (in bytes)'
COLUMN free        FORMAT 9,999,999,999,999  HEADING 'Free (in bytes)'
COLUMN pct_used    FORMAT 999                HEADING 'Pct. Used'

BREAK ON report

COMPUTE avg OF pct_used ON report
COMPUTE sum OF bytes    ON report
COMPUTE sum OF used     ON report
COMPUTE sum OF free     ON report

SELECT
    b.tablespace_name                                             tablespace
  , a.tablespace_name                                              dummy
  , SUM(b.bytes) / COUNT(DISTINCT a.file_id||'.'||a.block_id )    bytes
  , NVL(SUM(b.bytes) / COUNT(DISTINCT a.file_id||'.'||a.block_id ) -
        SUM(a.bytes) / COUNT(DISTINCT b.file_id ),
        SUM(b.bytes) / COUNT(DISTINCT a.file_id||'.'||a.block_id )) used
  , NVL(SUM(a.bytes) / COUNT(DISTINCT b.file_id ), 0)               free
  , NVL(TRUNC(CEIL(100 * ( (SUM(b.bytes) / COUNT(DISTINCT a.file_id||'.'||a.block_id )) -
                (SUM(a.bytes) / COUNT(DISTINCT b.file_id ) )) /
                (SUM(b.bytes) / COUNT(DISTINCT a.file_id||'.'||a.block_id )))), 100) pct_used
FROM
    sys.dba_free_space a
  , sys.dba_data_files b
WHERE
    a.tablespace_name (+) = b.tablespace_name
GROUP BY
    a.tablespace_name, b.tablespace_name
/

Voir aussi