Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Abfrage zur Überprüfung der Tabellengröße in der Oracle-Datenbank

Wir müssen oft herausfinden, wie groß dieser bestimmte Orakeltisch ist. Angenommen, Sie haben eine große Datenmenge geladen und möchten die zugewiesene Oracle-Tabellengröße wissen.

Wir können die folgende Abfrage verwenden, um die Tabellengröße in Oracle

zu überprüfen

Für Oracle-Tabellengröße 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>';

Für Oracle-Tabellengröße 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>';

Wenn Sie keinen Zugriff auf dba_segments haben, können Sie auch user_segments verwenden

Für die Größe 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>’

Für die Größe 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>’;

wir können diese Abfrage auch verwenden, um die zehn größten Tabellen in einem bestimmten Schema oder Tablespace zu finden

Top 10 der großen Tabellen in einem bestimmten 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;

Top 10 der großen Tische in einem bestimmten 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;

Tabellen auflisten, die größer als 10 GB sind

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;

Hier ist die Abfrage, ob Sie auch den mit den Indizes in der Tabelle verknüpften Speicherplatz wissen möchten

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
/

Summe der Tabellengröße für ein bestimmtes 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;

Die obigen Abfragen liefern den in der Datenbank zugewiesenen Speicherplatz. Wenn Sie am von der Tabelle verbrauchten Zeilenspeicherplatz interessiert sind, können Sie die folgende Abfrage verwenden

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';

Diese Abfrage sollte ausgeführt werden, nachdem die Statistiken für die Tabelle generiert wurden.

Wenn Sie an der Speicherplatzbelegung der Tabelle über einen bestimmten Zeitraum oder am Objektwachstumstrend interessiert sind, können Sie die folgende Abfrage

verwenden
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

So berechnen Sie die Größe für die Tabelle mit LOB-Segmenten

Aus der Spalte BYTES in DBA_SEGMENTS auswählen, damit die Tabelle das Tabellensegment anzeigt, aber keine LOB-Segmentgrößen (CLOB oder BLOB) enthält.
Um die Gesamtgröße für die Tabelle und die zugehörigen LOBS-Segmente zu berechnen, muss eine Summe der folgenden Werte verwendet werden auftreten:
die Bytes für die Tabelle => von dba_segments
+
die Bytes für die LOB-Segmente => von dba_lobs und dba_segments wobei segment_type LOBSEGMENT ist
+
the Bytes für den LOB Index (Lob Locator) =aus dba_indexes und dba_segments

Wir können die folgende Abfrage verwenden, um die Gesamtgröße zu berechnen

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;

Ich hoffe, Ihnen gefällt dieser Artikel zum Überprüfen der Tabellengröße in der Oracle-Datenbank. Wir haben verschiedene Abfragen angegeben, die Sie je nach Anforderung verwenden können. Bitte geben Sie Feedback

Verwandte Artikel

So überprüfen Sie den Tablespace in Oracle:Erfahren Sie, wie Sie den Tablespace in Oracle überprüfen, den freien Speicherplatz des Tablespace, die Informationen zum Tablespace-Wachstum, die Tablespace-Größe, die zugehörigen Datendateien, die Tablespace-Größe eine Spalte, Löschen und Hinzufügen von Einschränkungen, Ändern des Datentyps der Tabellenspalte, Ändern der Tabellenspeicherparameter
Erstellen einer Tabelle in Oracle:Tabellen sind die Grundeinheit der Datenspeicherung in einer Oracle-Datenbank. Wir behandeln, wie Sie den Oracle-Befehl „Tabelle erstellen“ verwenden, um eine Tabelle mit dem Fremdschlüssel /Primärschlüssel zu erstellen. Details zur Funktion zum schnellen Hinzufügen von Spalten, die in Oracle 11g eingeführt wurden
Frage von Asktom
High Water Mark in Oracle:Die High Water Mark in der Oracle-Datenbank wird verwendet, um die Blöcke anzuzeigen, die jemals im Lebenszyklus der verwendet wurden Oracle-Tabelle
ora-00942:Erfahren Sie, wie Sie ORA-00942-Tabelle oder -Ansicht in Oracle-Datenbank beheben

Empfohlene Kurse

Hier ist der nette Udemy-Kurs für Oracle SQL
Oracle-Sql-Schritt-für-Schritt :Dieser Kurs behandelt grundlegendes SQL, Joins, Erstellen von Tabellen und Ändern ihrer Struktur, Erstellen von Ansichten, Union, Union -all und vieles mehr . Ein großartiger Kurs und ein Muss für SQL-Einsteiger
Der vollständige Oracle SQL-Zertifizierungskurs :Dies ist ein guter Kurs für alle, die für SQL-Entwicklerfähigkeiten einsatzbereit werden möchten. Ein gut erklärter Kurs
Oracle SQL Developer:Grundlagen, Tipps und Tricks :Das Oracle Sql-Entwicklertool wird von vielen Entwicklern verwendet. Dieser Kurs gibt uns Tricks und Lektionen, wie man es effektiv nutzt und ein produktiver SQL-Entwickler wird
Oracle SQL Performance Tuning Masterclass 2020 :Leistungsoptimierung ist eine der kritischsten und gefragtesten Fähigkeiten. Dies ist ein guter Kurs, um mehr darüber zu erfahren und mit der Optimierung der SQL-Leistung zu beginnen