sql >> Database teknologi >  >> RDS >> Oracle

Forespørgsel for at kontrollere tabelstørrelsen i Oracle-databasen

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


  1. Er tabelnavne i MySQL store og små bogstaver?

  2. Søg i Microsoft SQL Server-databasen efter lagrede data

  3. Sådan dropper du database ved at bruge TSQL og GUI - SQL Server / TSQL Tutorial Del 25

  4. Hvorfor får jeg PLS-00302:komponent skal erklæres, når den eksisterer?