Vi har ofte brug for at finde ud af, hvor stort det pågældende orakelbord er. Antag, at du udførte en enorm databelastning og vil kende den tildelte Oracle-tabelstørrelse.
Vi kan bruge nedenstående forespørgsel til at kontrollere tabelstørrelsen i oracle
Til Oracle-bordstørrelse 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>';
Til Oracle-bordstørrelse 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>';
Hvis du ikke har adgang til dba_segments, kan du også bruge user_segments
For størrelsen 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>’
For størrelsen 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 også bruge denne forespørgsel til at finde de ti største tabeller i et bestemt skema eller tablespace
Top 10 store tabeller i bestemt skema
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 store borde i bestemt tablespace
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;
Vis tabeller større end 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;
Her er forespørgslen, hvis du også vil kende plads forbundet med indekserne på tabellen
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 /
Summen af tabellens størrelse for et bestemt skema
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;
Ovenstående forespørgsler vil give den plads, der er tildelt i databasen. Hvis du er interesseret i rækkeplads, der forbruges af tabellen, kan du bruge nedenstående forespørgsel
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';
Denne forespørgsel skal køres, efter at statistikkerne er genereret for tabellen.
Hvis du er interesseret i tabellens pladsforbrug over en periode eller objektvæksttendens, kan du bruge nedenstående forespørgsel
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
Sådan beregnes størrelsen for tabellen, der indeholder LOB-segmenter
vælg fra kolonnen BYTES i DBA_SEGMENTS for tabellen viser tabelsegmentet, men inkluderer ikke LOB (CLOB eller BLOB) segmentstørrelser.
For at beregne den samlede størrelse for tabellen og de tilknyttede LOBS segmenter skal en sum af følgende forekomme:
bytes for tabellen => fra dba_segments
+
bytes for LOB-segmenterne => fra dba_lobs og dba_segments, hvor segment_type er LOBSEGMENT
+
den bytes for LOB-indekset (Lob Locator) =fra dba_indexes og dba_segments
Vi kan bruge nedenstående forespørgsel til at beregne den samlede størrelse
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;
Håber du kan lide denne artikel om, hvordan du kontrollerer tabelstørrelsen i Oracle-databasen. Vi har stillet forskellige forespørgsler, og du kan bruge dem efter behov. Giv venligst feedback
Relaterede artikler
Sådan tjekker du tablespace i Oracle:Lær om, hvordan du tjekker tablespace i Oracle, tablespace ledig plads, tablespace vækstoplysninger, tablespace størrelse, tilknyttede datafiler, tablespace størrelse
Ændre tabel i Oracle:Ændre tabel i Oracle bruges til at ændre en kolonne, slip og tilføj begrænsninger, skift datatypen for tabelkolonnen, skift tabellagringsparametrene
opret tabel i oracle:Tabeller er den grundlæggende enhed for datalagring i en Oracle-database. vi dækker, hvordan man bruger Oracle create table-kommandoen til at oprette en tabel med fremmednøgle /primærnøgle
alter table add column oracle:Nyttig indsigt i How to change table add column oracle. Detaljer om funktionen til hurtig tilføjelse af kolonne introduceret i oracle 11g
stil spørgsmål
Højvandsmærke i Oracle:Højvandsmærke i Oracle-databasen bruges til at vise de blokke, som nogensinde er blevet brugt i livscyklussen af oracle-tabel
ora-00942:Lær at fejlfinde ORA-00942-tabel eller -visning findes ikke i Oracle-databasen. Nemme måder at løse fejlen på på kortere tid
Anbefalede kurser
Her er det fine Udemy-kursus til Oracle SQL
Oracle-Sql-trin-for-trin :Dette kursus dækker grundlæggende sql, joins, oprettelse af tabeller og ændring af strukturen, Create View, Union, Union -alle og meget andet. . Et godt kursus og must-have kursus for SQL starter
The Complete Oracle SQL Certification Course :Dette er et godt kursus for enhver, der ønsker at være jobklar til SQL-udviklerfærdigheder. Et godt forklaret kursus
Oracle SQL Developer:Essentials, Tips and Tricks :Oracle Sql-udviklerværktøj bliver brugt af mange udviklere. Dette kursus giver os tricks og lektioner til, hvordan man effektivt bruger det og bliver en produktiv sql-udvikler
Oracle SQL Performance Tuning Masterclass 2020 :Ydeevnejustering er en af de kritiske og mest efterspurgte færdigheder. Dette er et godt kursus for at lære om det og begynde at lave sql-ydelsesjustering