2013-10-08 11 views
7

Wie bekomme ich die Informationen über alle Tabellen Speicherplatz in meiner Datenbank im unteren Format.Wie erhält man den Namen eines Tabellenbereichs, Zugewiesene Größe, Freie Größe, Kapazität aus einer einzelnen Abfrage?

TABLESPACE_NAME | FILE_NAME | ALLOCATED_MB | FREE_MB | CAPACITY | 

Gibt es Weise täglich Größe aller Tisch Raum in einer anderen Tabelle automatisch zu speichern?. Eigentlich muss ich täglich eine Checkliste für den Tabellenbereich erstellen. So wan't ich vorderen Ende zu schaffen, die mir die Tabellenbereichsgröße Details automatisch auf der Grundlage dieser Tabelle eine E-Mail, die die Informationen über Tabellenbereichsgröße speichern auf täglicher Basis ..

+0

möglich Duplikat [Wie berechne ich Tabellen Größe in Oracle] (http://StackOverflow.com/Questions/264914/How-Do--Calculate-Tables-Size-in-Oracle) – bgs

+0

Nicht verwirrt sein, ich suche Tabellenbereiche nicht für die Tabellengröße. – Regon

Antwort

17

Versuchen Sie die folgende Abfrage, um alle Tabellendaten in Oracle zu erhalten. Angenommen, Sie verfügen über die erforderlichen Berechtigungen für den Zugriff auf dba-Tabellen.

SELECT a.file_name, 
     substr(A.tablespace_name,1,14) tablespace_name, 
     trunc(decode(A.autoextensible,'YES',A.MAXSIZE-A.bytes+b.free,'NO',b.free)/1024/1024) free_mb, 
     trunc(a.bytes/1024/1024) allocated_mb, 
     trunc(A.MAXSIZE/1024/1024) capacity, 
     a.autoextensible ae 
FROM (
    SELECT file_id, file_name, 
      tablespace_name, 
      autoextensible, 
      bytes, 
      decode(autoextensible,'YES',maxbytes,bytes) maxsize 
    FROM dba_data_files 
    GROUP BY file_id, file_name, 
       tablespace_name, 
       autoextensible, 
       bytes, 
       decode(autoextensible,'YES',maxbytes,bytes) 
    ) a, 
    (SELECT file_id, 
      tablespace_name, 
      sum(bytes) free 
     FROM dba_free_space 
     GROUP BY file_id, 
       tablespace_name 
    ) b 
WHERE a.file_id=b.file_id(+) 
AND A.tablespace_name=b.tablespace_name(+) 
ORDER BY A.tablespace_name ASC; 
+0

Mit einigen Änderungen funktioniert diese Abfrage einwandfrei, aber gibt es eine Möglichkeit, diese Informationen in einer anderen Tabelle automatisch zu speichern, anstatt die Abfrage täglich einzufügen. – Regon

+0

Derzeit glaube ich nicht, dass es eine Option zum automatischen Speichern der Informationen gibt. – Dba

+0

Stattdessen können Sie eine Prozedur erstellen, um den Unterschied in der Tabellenbereichsgröße zu vergleichen und täglich mit 'dbms_scheduler' zu laufen. – Dba

1

In Oracle siehe unten Link:

How do I calculate tables size in Oracle

https://forums.oracle.com/thread/2160787

COLUMN TABLE_NAME FORMAT A32 
COLUMN OBJECT_NAME FORMAT A32 
COLUMN OWNER FORMAT A10 

SELECT 
    owner, table_name, TRUNC(sum(bytes)/1024/1024) Meg 
FROM 
(SELECT segment_name table_name, owner, bytes 
FROM dba_segments 
WHERE segment_type = 'TABLE' 
UNION ALL 
SELECT i.table_name, i.owner, s.bytes 
FROM dba_indexes i, dba_segments s 
WHERE s.segment_name = i.index_name 
AND s.owner = i.owner 
AND s.segment_type = 'INDEX' 
UNION ALL 
SELECT l.table_name, l.owner, s.bytes 
FROM dba_lobs l, dba_segments s 
WHERE s.segment_name = l.segment_name 
AND s.owner = l.owner 
AND s.segment_type = 'LOBSEGMENT' 
UNION ALL 
SELECT l.table_name, l.owner, s.bytes 
FROM dba_lobs l, dba_segments s 
WHERE s.segment_name = l.index_name 
AND s.owner = l.owner 
AND s.segment_type = 'LOBINDEX') 
WHERE owner in UPPER('&owner') 
GROUP BY table_name, owner 
HAVING SUM(bytes)/1024/1024 > 10 /* Ignore really small tables */ 
ORDER BY SUM(bytes) desc 
; 

In SQL unter

siehe

Get size of all tables in database

+0

Danke, Das genau suche ich, aber ich möchte alle Tablespaces nicht Platz von Tabellen auflisten. – Regon

0
Select a.tablespace_name,a.file_name,a.bytes/1024/1024 TABLESPACE_SIZE_MB, 
Sum(b.bytes)/1024/1024 FREE_IN_MB from dba_free_space b,dba_data_files a 
Where a.tablespace_name = b.tablespace_name 
AND a.file_id = b.file_id 
GROUP by a.tablespace_name, a.file_name,a.bytes/1024/1024 
Order by a.tablespace_name, a.file_name; 

können Sie diese Abfrage ausführen dies helfen kann.

0

Oben sind nützlich. Hoffe, dass dies kann auch hier hilfreich:

https://ora-data.blogspot.in/2016/12/how-to-find-details-of-tablespace.html

Überprüfen Sie die Tabellen Details mit anderen Befehl, obigen Befehl kann nicht funktionieren:

SQL>select round((bytes/1024)/1024,0) "Used Space(MB)", 
round(total,0) "Allocated size(MB)", 
round(max,0) "Maximum allowable(MB)", 
round(max-(BYTES/1024)/1024,0) "Effective free(MB)", 
round(((max-(BYTES/1024)/1024)/max)*100,2) "FREE(%)" 
from SYS.SM$TS_USED, 
(select sum((BYTES/1024)/1024) total, sum((decode(MAXBYTES,0,bytes,maxbytes)/1024)/1024) max 
from dba_data_files where tablespace_name='&1') where tablespace_name='&1'; 
Verwandte Themen