26. August 2009

Wie groß ist eine Tabelle ...? Skript nun auch für Oracle10g verfügbar!

English title: How big is a table in Oracle10g ...?

Vor einiger Zeit (im Januar) hatte ich ein SQL-Skript geposted, mit dem man die Größe einer Tabelle inklusive aller Segemnte (Partitionen, LOB, Index) ermitteln kann. Das Skript hatte für viele Leser nur einen Nachteil: Es läuft nur auf 11g. Dem möchte ich nun Abhilfe schaffen: Hier ist das Skript für Oracle 10g.
Some time ago (January 2009) I posted a SQL script which determines the size of a table - including all segments (LOB, Index, Partitions). For many readers the only disadvantage was that the script was written for Oracle11g and did not run in 10g. So here is the version for Oracle10g:
Ausprobieren ...
Test it ...
SQL> desc dokument_tab
 Name                                      Null?    Typ
 ----------------------------------------- -------- ---------------------
 ID                                        NOT NULL NUMBER(10)
 NAME                                      NOT NULL VARCHAR2(100)
 BESCHREIBUNG                                       VARCHAR2(4000)
 MIMETYPE                                  NOT NULL VARCHAR2(100)
 DOKUMENT                                  NOT NULL BLOB

SQL> select * from table(get_space_info('DOKUMENT_TAB'));

SEGMENT_NAME                COLUMN_NAME        PARTITION_NAME   SEGMENT_TYPE   ALLOC_BYTES FREE_BYTES
--------------------------- ------------------ ---------------- -------------- ----------- ----------
DOKUMENT_TAB                                                    TABLE                65536          0
PK_DOKUMENT_TAB             ID                                  INDEX                65536      32768
SYS_LOB0000153809C00005$$   DOKUMENT                            LOBSEGMENT        10485760     516096
SYS_IL0000153809C00005$$                                        LOBINDEX             65536      32768
Viel Spaß beim Experimentieren mit der Funktion ...
Have fun!

Kommentare:

carsten hat gesagt…

Hallo Carsten,

funktioniert super. Danke!!

Anonym hat gesagt…

Hallo Carsten

funktioniert sehr gut..... vielen dank!
wäre auch nicht schlecht wenn das mit Objekte von andere Schema funktionieren kann.
Etwas wie
select * from table(get_space_info('SCOTT.DOKUMENT_TAB'));

mfg
adrian

Carsten Czarski hat gesagt…

Hallo,

das geht leider nicht so einfach, da es keine ALL_SEGMENTS-View gibt. Was man natürlich machen könnte, wäre eine "DBA"-Variante, die auf den entsprechenden DBA_*-Views arbeitet und dann die Größen der Objekte aller User ermitteln kann. Eine solche Funktion wäre dann aber nur für den DBA zugänglich ...

Grüße

-Carsten

Anonym hat gesagt…

Hallo Carsten

Schreib doch bitte auch eine Version für 9i.

Carsten Czarski hat gesagt…

Hallo "Anonym",

naja ... 9i ist ja nun schon ein wenig aus dem Support gelaufen; muss mal gucken, aber versprechen kann ich nichts ...

Beste Grüße

-Carsten

Beliebte Postings