Dba tablespace mapper

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Script SQL*Plus de diagnostic
Domaine Administration (fragmentation d'un tablespace)
Voir aussi Dba tablespace to owner · Dba rebuild indexes

Dba tablespace mapper cartographie, pour un tablespace donné, l'ensemble de son espace libre et occupé au niveau des extents : chaque extent occupé (avec son propriétaire et l'objet concerné) et chaque plage d'espace libre, positionnés par fichier et par bloc de départ. Un bon outil pour visualiser la fragmentation d'un tablespace avant de décider d'une réorganisation.

Script

-- Cartographie l'espace libre et occupé (par extent) d'un tablespace donné.

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

PROMPT
PROMPT +------------------------------------------------------------------------+
PROMPT | Report   : Tablespace Mapper                                           |
PROMPT | Instance : &current_instance                                          |
PROMPT +------------------------------------------------------------------------+

PROMPT
ACCEPT tbs_in PROMPT 'Enter tablespace name : '

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

CLEAR COLUMNS
CLEAR BREAKS
CLEAR COMPUTES

DEFINE fileName=tablespace_mapper

SPOOL &fileName._&current_instance_nt._&tbs_in..txt

COLUMN owner   FORMAT a20             HEADING "Owner"
COLUMN object  FORMAT a30             HEADING "Object"
COLUMN file_id                        HEADING "File ID"
COLUMN block_id                       HEADING "Block ID"
COLUMN bytes   FORMAT 999,999,999,999 HEADING "Bytes"

SELECT
    'FREE SPACE' owner
  , ' '          object
  , file_id
  , block_id
  , bytes
FROM
    dba_free_space
WHERE
    tablespace_name = UPPER('&tbs_in')
UNION
SELECT
    SUBSTR(owner, 1, 20)
  , SUBSTR(segment_name, 1, 32)
  , file_id
  , block_id
  , bytes
FROM
    dba_extents
WHERE
    tablespace_name = UPPER('&tbs_in')
ORDER BY
    3
  , 4
/

SPOOL OFF

SET FEEDBACK 6
SET HEADING  ON
SET TERMOUT  ON

PROMPT
PROMPT Report written to &fileName._&current_instance_nt._&tbs_in..txt
PROMPT

Colonnes / sortie

  • Une ligne FREE SPACE par plage d'espace libre (propriétaire fictif) et une ligne par extent occupé, chacune positionnée par File ID/Block ID — le tri par ces deux colonnes permet de lire physiquement l'occupation d'un fichier de données de bout en bout.
  • Une alternance fréquente de courtes plages FREE SPACE entre des extents occupés de tailles variées est le signe classique d'une fragmentation d'espace libre.
  • Le rapport est écrit dans tablespace_mapper_<instance>_<tablespace>.txt.

Voir aussi

  • Dba tablespace to owner — vision synthétique (sans le détail par extent) de l'occupation d'un tablespace
  • Dba rebuild indexes — pour agir sur la fragmentation des index d'un tablespace repéré ici comme fragmenté