Vi behöver ofta ta reda på hur stort det specifika orakelbordet är. Anta att du gjorde en enorm databelastning och vill veta den tilldelade Oracle-tabellstorleken.
Vi kan använda frågan nedan för att kontrollera tabellstorleken i Oracle
För Oracle-tabellstorlek i 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>';
För Oracle-tabellstorlek i 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>';
Om du inte har tillgång till dba_segments kan du också använda user_segments
För storleken i 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>’
För storleken i 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>’;
vi kan också använda den här frågan för att hitta de tio största tabellerna i ett visst schema eller tabellutrymme
Top 10 stora tabeller i det särskilda schemat
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 stora bord i Speciell bordsyta
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;
Lista tabeller större än 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;
Här är frågan om du vill veta utrymme som är kopplat till indexen i tabellen också
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 /
Summa av storleken på tabellen för ett visst schema
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;
Ovanstående frågor ger det utrymme som tilldelats i databasen. Om du är intresserad av radutrymme som konsumeras av tabellen kan du använda nedanstående fråga
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';
Den här frågan bör köras efter att statistiken har genererats för tabellen.
Om du är intresserad av tabellens utrymmesanvändning under en tidsperiod eller objekttillväxttrend kan du använda frågan nedan
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
Hur man beräknar storleken för tabellen som innehåller LOB-segment
välj från kolumnen BYTES i DBA_SEGMENTS för tabellen visar tabellsegmentet men inkluderar inte LOB (CLOB eller BLOB) segmentstorlekar.
För att beräkna den totala storleken för tabellen och de associerade LOBS-segmenten måste en summa av följande inträffa:
byten för tabellen => från dba_segments
+
byten för LOB-segmenten => från dba_lobs och dba_segments där segment_type är LOBSEGMENT
+
den byte för LOB-indexet (Lob Locator) =från dba_indexes och dba_segments
Vi kan använda frågan nedan för att beräkna den totala storleken
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;
Hoppas du gillar den här artikeln om hur du kontrollerar tabellstorleken i Oracle-databasen. Vi har gett olika frågor och du kan använda dem efter behov. Lämna gärna feedbacken
Relaterade artiklar
Så här kontrollerar du tabellutrymme i Oracle:Lär dig mer om hur du kontrollerar tabellutrymme i Oracle, ledigt utrymme för tabellutrymme, information om tabellutrymmestillväxt, tabellutrymmesstorlek, associerade datafiler, tabellutrymmesstorlek
Ändra tabell i Oracle:Ändra tabell i Oracle används för att modifiera en kolumn, släpp och lägg till begränsningar, ändra datatypen för tabellkolumnen, ändra tabelllagringsparametrarna
skapa tabell i Oracle:Tabeller är den grundläggande enheten för datalagring i en Oracle-databas. vi täcker hur man använder Oracle create table-kommandot för att skapa en tabell med främmande nyckel /primärnyckel
alter table add column oracle:Användbar insikt i How to change table add column oracle. Detaljer om snabb lägga till kolumnfunktion introducerad i Oracle 11g
fråga fråga
Högvattenmärke i Oracle:Högvattenmärke i Oracle-databasen används för att visa de block som någonsin har använts under livscykeln för oracle-tabell
ora-00942:Lär dig att felsöka ORA-00942-tabellen eller -vyn finns inte i Oracle-databasen. Enkla sätt att lösa felet på kortare tid
Rekommenderade kurser
Här är den trevliga Udemy-kursen för Oracle SQL
Oracle-Sql-Steg-för-steg :Den här kursen täcker grundläggande sql, går med, skapar tabeller och ändrar dess struktur, Skapa vy, Union, Union -allt och mycket annat . En bra kurs och måste-kurs för SQL-startare
The Complete Oracle SQL Certification Course :Det här är en bra kurs för alla som vill vara redo för SQL-utvecklare. En trevlig förklarad kurs
Oracle SQL Developer:Essentials, Tips and Tricks :Oracle Sql-utvecklarverktyget används av många utvecklare. Den här kursen ger oss tricks och lektioner om hur man effektivt använder den och blir en produktiv SQL-utvecklare
Oracle SQL Performance Tuning Masterclass 2020 :Prestandajustering är en av de kritiska och mest eftertraktade färdigheterna. Det här är en bra kurs för att lära dig om det och börja göra sql-prestandajustering