Oracle
 sql >> Base de données >  >> RDS >> Oracle

Requête pour vérifier la taille de la table dans la base de données Oracle

Nous avons souvent besoin de savoir quelle est la taille de cette table oracle particulière. Supposons que vous ayez effectué une énorme charge de données et que vous souhaitiez connaître la taille de la table oracle allouée.

Nous pouvons utiliser la requête ci-dessous pour vérifier la taille de la table dans Oracle

Pour la taille de la table oracle en Mo

select
owner as "Schema"
, segment_name as "Object Name"
, segment_type as "Object Type"
, round(bytes/1024/1024,2) as "Object Size (Mb)"
, tablespace_name as "Tablespace"
from dba_segments
where segment_name=’<table_name>’
and owner='<Table owner>';

Pour la taille de la table oracle en Go

select
owner as "Schema"
, segment_name as "Object Name"
, segment_type as "Object Type"
, round(bytes/1024/1024/1024,2) as "Object Size (Gb)"
, tablespace_name as "Tablespace"
from dba_segments
where segment_name=’<table_name>’
and owner='<Table owner>'
and owner='<Table owner>';

Si vous n'avez pas accès à dba_segments, vous pouvez également utiliser user_segments

Pour la taille en Mo

select segment_name as "Object Name"
, segment_type as "Object Type"
, round(bytes/1024/1024,2) as "Object Size (Mb)"
, tablespace_name as "Tablespace"
from user_segments
where segment_name=’<table_name>’

Pour la taille en Go

select
segment_name as "Object Name"
, segment_type as "Object Type"
, round(bytes/1024/1024/1024,2) as "Object Size (Gb)"
, tablespace_name as "Tablespace"
from user_segments
where segment_name=’<table_name>’;

nous pouvons également utiliser cette requête pour trouver les dix plus grandes tables d'un schéma ou d'un tablespace particulier

Top 10 des grandes tables dans un schéma particulier

select * from (select
owner as "Schema"
, segment_name as "Object Name"
, segment_type as "Object Type"
, round(bytes/1024/1024/1024,2) as "Object Size (Gb)"
, tablespace_name as "Tablespace"
from dba_segments
where owner=’<schema>’  and segment_type='TABLE' order by 4 desc)  where rownum < 11;

Top 10 des grandes tables dans un tablespace particulier

select * from (select
owner as "Schema"
, segment_name as "Object Name"
, segment_type as "Object Type"
, round(bytes/1024/1024/1024,2) as "Object Size (Gb)"
, tablespace_name as "Tablespace"
from dba_segments
where tablespace_name =’<tablespace name>' and segment_name='TABLE' order by 4 desc ) where rownum <11;

Répertorier les tables supérieures à 10 G

select
owner as "Schema"
, segment_name as "Object Name"
, segment_type as "Object Type"
, round(bytes/1024/1024/1024,2) as "Object Size (Gb)"
, tablespace_name as "Tablespace"
from dba_segments
where segment_type='TABLE' where bytes/1024/1024/1024 >10  order by 4 desc;

Voici la requête si vous souhaitez également connaître l'espace associé aux index sur la table

with tables
as
(
select segment_name tname, to_char(bytes/1024/1024,'999,999.99') table_size
from user_segments
where segment_type = 'TABLE'
and segment_name not like 'BIN%'
),
indexes
as
(
select table_name, index_name, scbp, rn,
(select to_char(bytes/1024/1024,'999,999.99') from user_segments where segment_name = INDEX_NAME and segment_type = 'INDEX') index_size
from (
select table_name, index_name,
substr( max(sys_connect_by_path( column_name, ', ' )), 3) scbp,
row_number() over (partition by table_name order by index_name) rn
from user_ind_columns
start with column_position = 1
connect by prior table_name = table_name
and prior index_name = index_name
and prior column_position+1 = column_position
group by table_name, index_name
)
)
select decode( nvl(rn,1), 1, tables.tname ) tname,
decode( nvl(rn,1), 1, tables.table_size ) table_size,
rn "INDEX#",
indexes.scbp,
indexes.index_name,
indexes.index_size
from tables, indexes
where tables.tname = indexes.table_name(+)
and tables.tname = '&1'
order by tables.tname, indexes.rn
/

Somme de la taille de la table pour un schéma particulier

select owner,sum(bytes)/1024/1024/1024 as "SIZE in GB" from dba_segments where owner='SCHEMA_NAME' and segment_type='TABLE' group by owner;

Les requêtes ci-dessus fourniront l'espace alloué dans la base de données. Si vous êtes intéressé par l'espace ligne consommé par la table, vous pouvez utiliser la requête ci-dessous

select round((num_rows*avg_row_len/1024),2) used_space_bytes from dba_tables where table_name ='<table name>'
and table_owner='<table owner';

Cette requête doit être exécutée après la génération des statistiques pour la table.

Si vous êtes intéressé par l'utilisation de l'espace de la table sur une période de temps ou par la tendance de croissance des objets, vous pouvez utiliser la requête ci-dessous

select * from table(dbms_space.OBJECT_GROWTH_TREND('<table owner>','<table name>','TABLE'));

Example
SQL> select * from table(dbms_space.OBJECT_GROWTH_TREND('SCOTT','EMP_DATA','TABLE'));
TIMEPOINT SPACE_USAGE SPACE_ALLOC QUALITY
---------------------- ---------- ------------ --------
05-JUN-19 08.59.45.214446 AM 210979117 225829120 INTERPOLATED
06-JUN-19 08.59.45.214446 AM 210979117 225829120 INTERPOLATED
07-JUN-19 08.59.45.214446 AM 210979117 225829120 INTERPOLATED

Comment calculer la taille du tableau contenant les segments LOB

sélectionnez dans la colonne BYTES dans DBA_SEGMENTS pour que la table affiche le segment de table mais n'inclut pas les tailles des segments LOB (CLOB ou BLOB).
Pour calculer la taille totale de la table et des segments LOBS associés, une somme des éléments suivants doit se produisent :
les octets pour la table => de dba_segments
+
les octets pour les segments LOB => de dba_lobs et dba_segments où segment_type est LOBSEGMENT
+
le octets pour l'index LOB (Lob Locator) =de dba_indexes et dba_segments

Nous pouvons utiliser la requête ci-dessous pour calculer la taille totale

ACCEPT SCHEMA PROMPT 'Table Owner: '
ACCEPT TABNAME PROMPT 'Table Name: '
SELECT
(SELECT SUM(S.BYTES)
FROM DBA_SEGMENTS S
WHERE S.OWNER = UPPER('&SCHEMA') AND
(S.SEGMENT_NAME = UPPER('&TABNAME'))) +
(SELECT SUM(S.BYTES)
FROM DBA_SEGMENTS S, DBA_LOBS L
WHERE S.OWNER = UPPER('&SCHEMA') AND
(L.SEGMENT_NAME = S.SEGMENT_NAME AND L.TABLE_NAME = UPPER('&TABNAME') AND L.OWNER = UPPER('&SCHEMA'))) +
(SELECT SUM(S.BYTES)
FROM DBA_SEGMENTS S, DBA_INDEXES I
WHERE S.OWNER = UPPER('&SCHEMA') AND
(I.INDEX_NAME = S.SEGMENT_NAME AND I.TABLE_NAME = UPPER('&TABNAME') AND INDEX_TYPE = 'LOB' AND I.OWNER = UPPER('&SCHEMA')))
"TOTAL TABLE SIZE"
FROM DUAL;

J'espère que cet article sur la vérification de la taille d'une table dans la base de données Oracle vous plaira. Nous avons donné diverses requêtes et vous pouvez les utiliser selon les besoins. Merci de nous faire part de vos commentaires

Articles connexes

Comment vérifier l'espace de table dans Oracle :Découvrez comment vérifier l'espace de table dans Oracle, l'espace libre de l'espace de table, les informations de croissance de l'espace de table, la taille de l'espace de table, les fichiers de données associés, la taille de l'espace de table
Alter Table dans Oracle :Alter table dans Oracle est utilisé pour modifier une colonne, supprimez et ajoutez des contraintes, modifiez le type de données de la colonne de la table, modifiez les paramètres de stockage de la table
créer une table dans oracle :les tables sont l'unité de base de stockage de données dans une base de données Oracle. nous expliquons comment utiliser la commande Oracle create table pour créer une table avec une clé étrangère/clé primaire
alter table add column oracle :aperçu utile de la modification de la table add column oracle Détails sur la fonctionnalité d'ajout rapide de colonne introduite dans oracle 11g
question asktom
Limite d'alerte élevée dans Oracle :la limite d'alerte haute dans la base de données Oracle est utilisée pour afficher les blocs qui ont déjà été utilisés dans le cycle de vie de la table oracle
ora-00942 :Apprenez à dépanner la table ou la vue ORA-00942 qui n'existe pas dans la base de données Oracle. Des moyens simples pour résoudre l'erreur en moins de temps

Cours recommandés

Voici le joli cours Udemy pour Oracle SQL
Oracle-Sql-Step-by-step :Ce cours couvre les bases de SQL, les jointures, la création de tables et la modification de sa structure, la création de vues, l'union, l'union -all et bien d'autres choses . Un excellent cours et un cours indispensable pour les débutants SQL
Le cours complet de certification Oracle SQL :C'est un bon cours pour tous ceux qui veulent être prêts à travailler pour les compétences de développeur SQL. Un cours bien expliqué
Oracle SQL Developer :Essentials, Tips and Tricks  :l'outil de développement Oracle SQL est utilisé par de nombreux développeurs. Ce cours nous donne des astuces et des leçons sur la façon de l'utiliser efficacement et de devenir un développeur sql productif
Oracle SQL Performance Tuning Masterclass 2020  :l'optimisation des performances est l'une des compétences essentielles et les plus recherchées. C'est un bon cours pour en savoir plus et commencer à ajuster les performances SQL