Spesso abbiamo bisogno di scoprire quanto è grande quel particolare tavolo dell'oracolo. Supponiamo di aver eseguito un enorme carico di dati e di voler conoscere la dimensione della tabella Oracle allocata.
Possiamo utilizzare la query seguente per controllare le dimensioni della tabella in Oracle
Per le dimensioni della tabella Oracle in MB
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>';
Per le dimensioni della tabella Oracle in GB
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>';
Se non hai accesso a dba_segments, puoi utilizzare anche user_segments
Per la dimensione in MB
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>’
Per la dimensione in GB
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>’;
possiamo anche utilizzare questa query per trovare le prime dieci tabelle più grandi in un particolare schema o tablespace
Prime 10 grandi tabelle in particolare schema
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;
I 10 tavoli più grandi in un tablespace particolare
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;
Elenca tabelle più grandi di 10G
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;
Ecco la query se vuoi conoscere anche lo spazio associato agli indici sulla tabella
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 /
Somma delle dimensioni della tabella per uno schema particolare
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;
Le query di cui sopra forniranno lo spazio allocato nel database. Se sei interessato allo spazio di riga consumato dalla tabella, puoi utilizzare la query sottostante
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';
Questa query deve essere eseguita dopo la generazione delle statistiche per la tabella.
Se sei interessato all'utilizzo dello spazio della tabella in un periodo di tempo o al trend di crescita degli oggetti, puoi utilizzare la query seguente
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
Come calcolare la Dimensione per la tabella contenente i segmenti LOB
seleziona dalla colonna BYTES in DBA_SEGMENTS per la tabella mostra il segmento della tabella ma non include le dimensioni dei segmenti LOB (CLOB o BLOB).
Per calcolare la dimensione totale per la tabella e i segmenti LOBS associati è necessario sommare quanto segue si verificano:
i byte per la tabella => da dba_segments
+
i byte per i segmenti LOB => da dba_lobs e dba_segments dove segment_type è LOBSEGMENT
+
il byte per l'indice LOB (Lob Locator) =da dba_indexes e dba_segments
Possiamo utilizzare la query seguente per calcolare la dimensione 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;
Spero che questo articolo su come controllare le dimensioni della tabella nel database Oracle ti sia piaciuto. Abbiamo fornito varie domande e puoi usarle in base alle esigenze. Si prega di fornire il feedback
Articoli correlati
Come controllare il tablespace in Oracle:informazioni su come controllare il tablespace in Oracle, lo spazio libero del tablespace, le informazioni sulla crescita del tablespace, le dimensioni del tablespace, i file di dati associati, le dimensioni del tablespace
Alter Table in Oracle:Alter table in Oracle viene utilizzato per modificare una colonna, eliminare e aggiungere vincoli, modificare il tipo di dati della colonna della tabella, modificare i parametri di archiviazione della tabella
creare una tabella in Oracle:le tabelle sono l'unità di base dell'archiviazione dei dati in un database Oracle. descriviamo come utilizzare il comando Oracle create table per creare una tabella con chiave esterna/chiave primaria
alter table add column oracle:informazioni utili su come modificare table add column oracle. Dettagli sulla funzionalità di aggiunta rapida delle colonne introdotta in Oracle 11g
domanda asktom
High Water Mark in Oracle:High water mark nel database di Oracle viene utilizzato per mostrare i blocchi che sono mai stati utilizzati nel ciclo di vita del tabella oracle
ora-00942:Impara a risolvere i problemi di tabella o vista ORA-00942 non presenti nel database Oracle. Semplici modi per risolvere l'errore in meno tempo
Corsi consigliati
Ecco il bel corso Udemy per Oracle SQL
Oracle-Sql-Step-by-step:questo corso copre SQL di base, join, creazione di tabelle e modifica della sua struttura, creazione di viste, unione, unione, tutto e molto altro . Un ottimo corso e un corso indispensabile per principianti SQL
Il corso completo di certificazione Oracle SQL :Questo è un buon corso per chiunque voglia essere pronto per il lavoro per le competenze di sviluppatore SQL. Un bel corso spiegato
Oracle SQL Developer:Essentials, Tips and Tricks :lo strumento di sviluppo Oracle Sql è utilizzato da molti sviluppatori. Questo corso offre trucchi e lezioni su come utilizzarlo in modo efficace e diventare uno sviluppatore sql produttivo
Oracle SQL Performance Tuning Masterclass 2020 :l'ottimizzazione delle prestazioni è una delle abilità critiche e più ricercate. Questo è un buon corso per conoscerlo e iniziare a ottimizzare le prestazioni di sql