Hello,
comment déterminer la taille d'une table?
Hello,
comment déterminer la taille d'une table?
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![]()
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
Je n'est rien inventé, juste trouvé et un peux modifier à ma sauce.
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;
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.
ta table est remplie ?
tu veux quelle taille ? le nb de bloc qu'elle utilise (ou son nb de byte ) ?
Cela marche si tes stats sont à jour bien jour...
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'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2analyze table MA_TABLE compute statistics
Je pensais que tu parlais de connaitre a l'avance la taille d'une table que tu veux crezr, dsl
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.
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 show parameter block
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'
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!
Cela ne te ramenera toujours qu'un enreg, tu peux donc inclure le tout
Code : Sélectionner tout - Visualiser dans une fenêtre à part select value from v$parameter where name='db_block_size'
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'
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
quid des db avec plusieurs block sizes ???Envoyé par SFAUVEL
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';
merci à tous, cela fonctionne super!
Partager