Dba row size
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Type | Script SQL*Plus de diagnostic |
| Domaine | Administration (dimensionnement) |
| Voir aussi | Dba table info · Dba tables query user |
Dba row size calcule, colonne par colonne, la taille maximale théorique d'une ligne pour toutes les tables d'un schéma donné. Utile pour estimer le nombre de lignes par bloc, dimensionner un PCTFREE/PCTUSED ou anticiper un chaînage de lignes (row chaining) sur des tables larges.
Script
-- Calcule la taille (en octets) de chaque colonne pour toutes les tables
-- d'un schéma, avec un total par table.
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 : Calculate Row Size for Tables in a Specified Schema |
PROMPT | Instance : ¤t_instance |
PROMPT +------------------------------------------------------------------------+
PROMPT
ACCEPT schema PROMPT 'Enter schema name : '
SET ECHO OFF
SET FEEDBACK 6
SET HEADING ON
SET LINESIZE 180
SET PAGESIZE 50000
SET TRIMSPOOL ON
SET VERIFY OFF
CLEAR COLUMNS
CLEAR BREAKS
CLEAR COMPUTES
COLUMN tot_size FORMAT 99,999
COLUMN data_type FORMAT a15
BREAK ON table_name SKIP 2
COMPUTE SUM OF tot_size ON table_name
SELECT
table_name
, column_name
, DECODE( data_type
, 'NUMBER', NVL(data_precision, 38) + NVL(data_scale, 0)
, 'VARCHAR2', data_length
, 'VARCHAR', data_length
, 'CHAR', data_length
, 'DATE', data_length
-- tout autre type (LONG, CLOB, BLOB, RAW,
-- TIMESTAMP...) : on retombe sur data_length
, data_length
) tot_size
, data_type
FROM dba_tab_columns
WHERE owner = UPPER('&schema')
ORDER BY table_name
, column_id
/
Corrections apportées
- La version d'origine ne prévoyait pas de valeur par défaut dans le
DECODE: toute colonne d'un type non explicitement listé (LONG,CLOB,BLOB,RAW,TIMESTAMP...) remontaitNULL, faussant silencieusement le total par table. Un cas par défaut (data_length) a été ajouté. - Pour les colonnes
NUMBERdéclarées sans précision explicite (NUMBERseul),data_precisionetdata_scalesont àNULL: l'additiondata_precision+data_scaled'origine remontait doncNULLau lieu d'une taille. Ajout deNVL(data_precision, 38)(précision maximale d'unNUMBER) etNVL(data_scale, 0). - Le script comportait également un second
COMPUTE SUM OF data_length ON table_nameportant sur une colonne absente duSELECT(seul l'aliastot_sizeest projeté) : cette ligne, sans effet utile, a été supprimée.
Colonnes / sortie
- TOT_SIZE — taille estimée de la colonne (en octets pour les types caractère/date, précision+échelle pour
NUMBER). - Le total par table (
BREAK/COMPUTE) donne une approximation de la taille maximale d'une ligne — approximation seulement, car la plupart des lignes réelles sont plus courtes (colonnesNULL,VARCHAR2non remplis à leur longueur déclarée).
Voir aussi
- Dba table info — détail complet d'une table, y compris ses colonnes et leur type
- Dba tables query user — liste des tables d'un schéma, avec nombre de lignes