it-swarm.com.de

Wie kann ich die Größe des Oracle-Schemas mit einer SQL-Abfrage anzeigen?

Ich habe ein Oracle-Schema mit über 70 Tabellen. Ich möchte eine einfache Seite erstellen, die den von den Tabellen belegten Festplattenspeicherplatz anzeigen kann. Wie kann ich diesen Wert mit einer SQL-Abfrage erhalten?

P.S .__ Und wie kann ich die Oracle-Architekturversion erhalten?

15
Peter Penzov

Du willst wahrscheinlich

SELECT sum(bytes)
  FROM dba_segments
 WHERE owner = <<owner of schema>>

Wenn Sie als Schemabesitzer angemeldet sind, können Sie dies auch tun

SELECT SUM(bytes)
  FROM user_segments

Dadurch erhalten Sie den Speicherplatz, der den Objekten des Benutzers in den Tabellenbereichen zugewiesen ist, in denen sich der Benutzer befindet. Möglicherweise ist den Tabellen ein leerer Speicherplatz zugeordnet, der von diesen Abfragen als zugewiesen gilt.

41
Justin Cave

Wenn Sie nur die Schemagröße ohne freien Speicherbereich und Indizes für den Tabellenbereich berechnen möchten:

select
   sum(bytes)/1024/1024 as size_in_mega,
   segment_type
from
   dba_segments
where
   owner='<schema's owner>'
group by
   segment_type;

Für alle Schemata

select
   sum(bytes)/1024/1024 as size_in_mega, owner
from
   dba_segments
group by
  owner;
6
biology.info
select T.TABLE_NAME, T.TABLESPACE_NAME, t.avg_row_len*t.num_rows from dba_tables t
order by T.TABLE_NAME asc

Siehe z. http://www.dba-Oracle.com/t_script_Oracle_table_size.htm für weitere Optionen

4
Rostislav Matl
SELECT table_name as Table_Name, row_cnt as Row_Count, SUM(mb) as Size_MB
FROM
  (SELECT in_tbl.table_name,   to_number(extractvalue(xmltype(dbms_xmlgen.getxml('select count(*) c from ' ||ut.table_name)),'/ROWSET/ROW/C')) AS row_cnt , mb
FROM
(SELECT CASE WHEN lob_tables IS NULL THEN table_name WHEN lob_tables IS NOT NULL THEN lob_tables END AS table_name , mb
FROM (SELECT ul.table_name AS lob_tables, us.segment_name AS table_name , us.bytes/1024/1024 MB FROM user_segments us
LEFT JOIN user_lobs ul ON us.segment_name = ul.segment_name ) ) in_tbl INNER JOIN user_tables ut ON in_tbl.table_name = ut.table_name ) GROUP BY table_name, row_cnt ORDER BY 3 DESC;``

Die obige Abfrage gibt Table_name, Row_count, Size_in_MB (einschließlich Lob-Spaltengröße) eines bestimmten Benutzers. 

3
Bhaskar
SELECT DS.TABLESPACE_NAME, SEGMENT_NAME, ROUND(SUM(DS.BYTES) / (1024 * 1024)) AS MB
    FROM DBA_SEGMENTS DS
    WHERE SEGMENT_NAME IN (SELECT TABLE_NAME FROM DBA_TABLES) AND SEGMENT_NAME='YOUR_TABLE_NAME'
    GROUP BY DS.TABLESPACE_NAME, SEGMENT_NAME;
0
Dilip Paudel