Dba blocks used by table
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Type | Script SQL*Plus de diagnostic |
| Domaine | Tables / stockage |
| Voir aussi | Base infos |
Dba blocks used by table calcule le nombre réel de blocs non vides occupés par une table, à distinguer du high water mark (nombre de blocs déjà utilisés au moins une fois) que renvoie ANALYZE TABLE. La pseudo-colonne ROWID de chaque ligne encode la position physique de la ligne sous la forme bloc.ligne.fichier ; il suffit donc de compter les couples (bloc, fichier) distincts parmi les ROWID de la table pour obtenir le nombre de blocs réellement porteurs de données.
Deux syntaxes sont nécessaires selon la version d'Oracle car le format interne du ROWID a changé entre Oracle 7 et Oracle 8 (passage au ROWID étendu, compatible tablespaces multi-fichiers avec plus de fichiers).
Script
-- Nombre de blocs reellement utilises (non vides) par une table
-- A executer avec &table_name = nom de la table a analyser
-- Oracle 7 (ancien format de ROWID)
SELECT
COUNT(DISTINCT (SUBSTR(rowid, 1, 8) || SUBSTR(rowid, 15, 4)))
FROM
&table_name
/
-- Oracle 8 et superieur (ROWID etendu, via DBMS_ROWID)
SELECT
COUNT(DISTINCT DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid) || DBMS_ROWID.ROWID_RELATIVE_FNO(rowid)) "Used"
FROM
&table_name
/
-- Oracle 8 et superieur - variante equivalente (sous-chaine du ROWID etendu)
SELECT
COUNT(DISTINCT SUBSTR(rowid, 1, 15)) "Used"
FROM
&table_name
/
Colonnes / sortie
- Résultat = nombre de blocs distincts contenant au moins une ligne de la table.
- Différence avec le high water mark d'
ANALYZE TABLE: ce dernier compte tous les blocs déjà alloués/utilisés un jour, y compris ceux redevenus vides après suppression de lignes ; ce script ne compte que les blocs actuellement porteurs de données. - Les deux variantes Oracle 8+ (
DBMS_ROWIDetSUBSTR) sont équivalentes en résultat ; la première est plus lisible, la seconde plus rapide sur de gros volumes.
Voir aussi
- Base infos — informations générales sur la base contenant la table analysée