Dba file use

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Script SQL*Plus de diagnostic
Domaine Administration (inventaire fichiers)
Voir aussi Dba file use 7 · Dba files all · Dba controlfiles

Dba_file_use dresse l'inventaire complet des fichiers physiques d'une instance — fichiers de données, fichiers temporaires (tempfiles), membres de redo logs, fichiers de contrôle (jusqu'à 4), fichier IFILE et destination d'archivage — avec pour chacun un statut lisible (Disponible/Invalide, Courant/Inactif/Non utilisé, archivage activé ou non).

Contrairement à Dba file space usage qui se concentre sur le taux de remplissage, ce script répond à la question « où sont physiquement tous les fichiers de cette base, et dans quel état ? ». Cette version cible Oracle8i et plus (gère les vrais tempfiles) ; voir Dba file use 7 pour la variante Oracle7/8.

Script

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 | Rapport   : Inventaire des fichiers (données, redo, contrôle...)       |
PROMPT | Instance  : &current_instance                                         |
PROMPT +------------------------------------------------------------------------+

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

CLEAR COLUMNS
CLEAR BREAKS
CLEAR COMPUTES

COLUMN db NEW_VALUE xdb NOPRINT FORMAT a1

COLUMN type       FORMAT a8                 HEADING 'Type'
COLUMN tablespace FORMAT a30                HEADING 'Tablespace'
COLUMN filename   FORMAT a75                HEADING 'Fichier'
COLUMN filesize   FORMAT 9,999,999,999,999  HEADING 'Taille'
COLUMN stat       FORMAT a10                HEADING 'Statut'
COLUMN seq        FORMAT 9999999            HEADING 'Séquence'
COLUMN arc        FORMAT a4                 HEADING 'Archivé'

SET TERMOUT OFF
SELECT name db FROM v$database;
SET TERMOUT ON

SELECT
    'Data'                        type
  , tablespace_name               tablespace
  , REPLACE(file_name, '?', '&xdb') filename
  , bytes                         filesize
  , DECODE(status, 'AVAILABLE', 'Disponible', 'INVALID', 'Invalide', '****') stat
  , 0                             seq
  , ''                            arc
FROM dba_data_files
UNION
SELECT
    'Redo'
  , 'Grp ' || a.group#
  , member
  , bytes
  , DECODE(b.status, 'CURRENT', 'Courant', 'INACTIVE', 'Inactif', 'UNUSED', 'Non utilisé', '****')
  , sequence#
  , archived
FROM
    v$logfile a
  , v$log     b
WHERE
    a.group# = b.group#
UNION
SELECT
    'Parm'
  , 'Ctrl 1'
  , REPLACE(NVL(LTRIM(SUBSTR(value, 1, INSTR(value || ',', ',', 1, 1) - 1)), '  (aucun)'),
    '?', '&xdb') file_name
  , 0
  , ''
  , 0
  , ''
FROM v$parameter
WHERE name = 'control_files'
UNION
SELECT
    'Parm'
  , 'Ctrl 2'
  , REPLACE(NVL(LTRIM(SUBSTR(value, INSTR(value || ',', ',', 1, 1) + 1,
    INSTR(value || ',', ',', 1, 2) - INSTR(value || ',', ',', 1, 1) - 1)), '  (aucun)'),
    '?', '&xdb') file_name
  , 0
  , ''
  , 0
  , ''
FROM v$parameter
WHERE name = 'control_files'
UNION
SELECT
    'Parm'
  , 'Ctrl 3'
  , REPLACE(NVL(LTRIM(SUBSTR(value, INSTR(value || ',', ',', 1, 2) + 1,
    INSTR(value || ',', ',', 1, 3) - INSTR(value || ',', ',', 1, 2) - 1)), '  (aucun)'),
    '?', '&xdb') file_name
  , 0
  , ''
  , 0
  , ''
FROM v$parameter
WHERE name = 'control_files'
UNION
SELECT
    'Parm'
  , 'Ctrl 4'
  , REPLACE(NVL(LTRIM(SUBSTR(value, INSTR(value || ',', ',', 1, 3) + 1,
    INSTR(value || ',', ',', 1, 4) - INSTR(value || ',', ',', 1, 3) - 1)), '  (aucun)'),
    '?', '&xdb') file_name
  , 0
  , ''
  , 0
  , ''
FROM v$parameter
WHERE name = 'control_files'
UNION
SELECT
    'Parm'
  , 'Ifile'
  , REPLACE(value, '?', '&xdb') file_name
  , 0
  , ''
  , 0
  , ''
FROM v$parameter
WHERE name = 'ifile'
UNION
SELECT
    'Parm'
  , 'Archive'
  , DECODE(d.log_mode, 'ARCHIVELOG',
                       REPLACE(p.value, '?', '&xdb') || ' - ACTIVE',
                       REPLACE(p.value, '?', '&xdb') || ' - Désactivé') file_name
  , 0
  , ''
  , 0
  , ''
FROM
    v$parameter p
  , v$database  d
WHERE
    p.name = 'log_archive_dest'
UNION
SELECT
    'Tempfile' type
  , tablespace_name
  , REPLACE(file_name, '?', '&xdb') tempfile_name
  , bytes
  , DECODE(status, 'AVAILABLE', 'Disponible', 'INVALID', 'Invalide', '****') stat
  , 0
  , ''
FROM dba_temp_files
ORDER BY 1, 2, 3
/

Le script d'origine substituait le nom d'instance dans le chemin du tempfile via un jeton de template non résolu ($input{{Oracle_SID_Name}}) au lieu de la variable SQL*Plus &xdb utilisée partout ailleurs dans le script — corrigé ci-dessus par cohérence.

Colonnes / sortie

  • Type : Data/Tempfile (fichiers physiques), Redo (membres de groupes de journalisation), Parm (fichiers déclarés par paramètre : contrôle, ifile, archivage).
  • Statut : traduit selon le type — disponibilité pour les datafiles, état du groupe de redo (Courant/Inactif/Non utilisé) pour les journaux.
  • Archivé : uniquement pertinent pour les redo logs — indique si le groupe a déjà été archivé.

Voir aussi