IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

taille d'une table


Sujet :

Oracle

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 379
    Points : 376
    Points
    376
    Par défaut taille d'une table
    Hello,

    comment déterminer la taille d'une table?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 75
    Points : 63
    Points
    63
    Par défaut
    En multipliant par le nombre d'enregistrement la taille de chaque champs (cad une ligne)

    C'est à la fois très simple mais très long

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 379
    Points : 376
    Points
    376
    Par défaut
    Il n'y a donc pas de formule magique?! Par exemple, j'ai trouvé une formule qui précise les tablespaces, leurs tailles et occupations, donc voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
       SELECT
         a.tablespace_name                                           as nom  , 
         lpad(substr(round(a.bytes / (1024*1024) ,1),1,10)||' M',10) as total, 
         lpad(substr(round(b.bytes / (1024*1024) ,1),1,10)||' M',10) as free , 
         lpad(substr(round(b.bytes / a.bytes * 100,1),1,8)||' %',12) as percent_free 
       FROM ( SELECT tablespace_name, sum(bytes) bytes
              from sys.dba_data_files 
              group by tablespace_name
            ) a
       JOIN ( SELECT tablespace_name, sum(bytes) bytes
              from sys.dba_free_space 
              group by tablespace_name
            ) b ON b.tablespace_name = a.tablespace_name;
    Je n'est rien inventé, juste trouvé et un peux modifier à ma sauce.

    Maintenant, je cherche donc une formule du genre qui permet de déterminer la taille d'une table, ce qui permettra de connaître son occupation dans le tablespace et ainsi de prendre éventuellement la décision de la déplacer de tablespace ou d'en créer un nouveau.

    Merci de votre aide.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Points : 35
    Points
    35
    Par défaut
    ta table est remplie ?
    tu veux quelle taille ? le nb de bloc qu'elle utilise (ou son nb de byte ) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select bytes/1024/1024 as "Taille en Mo" from user_tables where table_name='MA_TABLE'
    Cela marche si tes stats sont à jour bien jour...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    analyze table MA_TABLE compute statistics

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 75
    Points : 63
    Points
    63
    Par défaut
    Je pensais que tu parlais de connaitre a l'avance la taille d'une table que tu veux crezr, dsl

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 379
    Points : 376
    Points
    376
    Par défaut
    ta formule me plaît beaucoup, sauf que le champ "bytes" n'existe pas dans "user_tables" !

    remarque que ce champ lui existe dans d'autres tables.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Points : 35
    Points
    35
    Par défaut
    excuses moi.

    Utilise les chamsp BLOCKS à sa place, mais obtient ton db_block_size

    et remplace le ci dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select (blocks*DB_BLOCK_SIZE)/1024/1024 as "Taille en Mo" from user_tables where table_name='MA_TABLE'

  8. #8
    Membre averti

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 379
    Points : 376
    Points
    376
    Par défaut
    cool! cela fonctionne.

    maintenant la question subsidiaire: comment remplacer "show parameter block"
    par un select, histoire d'obtenir le tout en un coup.

    l'idée finale étant d'incorporer la formule dans celle des tablespaces et hop, d'un coup, toutes les infos!

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Points : 35
    Points
    35
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select value from v$parameter where name='db_block_size'
    Cela ne te ramenera toujours qu'un enreg, tu peux donc inclure le tout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select (t.blocks*v.value)/1024/1024 as "Taille en Mo" 
    from 
    user_tables t,v$parameter v
    where 
    upper(v.name)=upper('db_block_size')
    and
    t.table_name='MA_TABLE'

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Dans l'idée voila une de mes requêtes que j'utilise beaucoup et qui réponds à votre question

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select owner, segment_name, max(segment_type) segment_type, max(tablespace_name)  tablespace_name,  max(extent_id)+1  nbr_extents, count(distinct(file_id)) nbr_fichiers,
    sum(bytes)/(1024*1024) taille_Mo, sum(blocks) nbr_blocs 
    from dba_extents 
    group by owner, segment_name 
    order by 1,7 desc

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    Citation Envoyé par SFAUVEL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select value from v$parameter where name='db_block_size'
    Cela ne te ramenera toujours qu'un enreg, tu peux donc inclure le tout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select (t.blocks*v.value)/1024/1024 as "Taille en Mo" 
    from 
    user_tables t,v$parameter v
    where 
    upper(v.name)=upper('db_block_size')
    and
    t.table_name='MA_TABLE'
    quid des db avec plusieurs block sizes ???

    mieux vaut utiliser l'info présentes dans la vue DBA_TABLESPACES (block_size)

    ou sans trop se fatiguer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT segment_name, bytes/1024 size_kb
    FROM dba_segments
    WHERE segment_name ='MA_TABLE';

  12. #12
    Membre averti

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 379
    Points : 376
    Points
    376
    Par défaut
    merci à tous, cela fonctionne super!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. taille d'une table access dans la base
    Par chris401 dans le forum Access
    Réponses: 6
    Dernier message: 13/09/2006, 16h56
  2. Taille d'une table MySQL
    Par chnain dans le forum Requêtes
    Réponses: 6
    Dernier message: 23/08/2006, 18h43
  3. augmenter la taille pour une table mysql
    Par zidenne dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 21/08/2006, 15h01
  4. [MySQL] Taille d'une table/base
    Par Indyana dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 21/10/2005, 11h24
  5. taille d'une table + que 4 Go
    Par amika dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 12/08/2005, 18h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo