Oracle espacio ocupado por tabla y objetos relacionados

En ocasiones debemos obtener un detalle suficiente del espacio ocupado por un tabla de la BD y sus objetos relacionados.Database_Icon_256

Para conocer el espacio ocupado por una tabla debemos acceder básicamente a:

  • dba_indexes, para obtener los nombres de los índices relacionados con la tabla.
  • dba_logs, aquí podemos conocer si existe algún segmento de tipo lob relacionado con la tabla.
  • dba_segments, finalmente obtenemos cada uno de los tamaños utilizando los datos anteriores

Por ejemplo, la tabla SCOTT.TABLE_TEST, la consulta sobre dba_indexes:

Source   
SQL> SELECT OWNER,INDEX_NAME,TABLE_OWNER,TABLE_NAME FROM dba_indexes WHERE TABLE_OWNER='SCOTT' AND  TABLE_NAME='TABLE_TEST';
 
OWNER                          INDEX_NAME                     TABLE_OWNER                    TABLE_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------------
SCOTT                          SYS_IL0000130199C00005$$       SCOTT                          TABLE_TEST
SCOTT                          TABLE_TEST_P                   SCOTT                          TABLE_TEST

Tomamos nota de los índices:

  • SYS_IL0000130199C00005$$
  • TABLE_TEST_P

Verificamos la existencia de campos LOB con:

Source   
SQL> SELECT OWNER,TABLE_NAME,COLUMN_NAME,TABLESPACE_NAME, INDEX_NAME, SEGMENT_NAME FROM dba_lobs WHERE OWNER='SCOTT' AND  TABLE_NAME='TABLE_TEST';
 
OWNER                          TABLE_NAME                     COLUMN_NAME                    TABLESPACE_NAME                INDEX_NAME                     SEGMENT_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------
SCOTT                          TABLE_TEST                     DATA                           CABOFFICEDAT                   SYS_IL0000130199C00005$$       SYS_LOB0000130199C00005$$

Nos quedamos con el nombre del segmento:

  • SYS_LOB0000130199C00005$$

Ahora ya podemos hacer la consulta para obtener los espacios utilizando la información obtenida anteriormente:

Source   
SQL> SELECT OWNER,SEGMENT_NAME,SEGMENT_TYPE,BYTES/1024/1024 AS mb,TABLESPACE_NAME FROM DBA_SEGMENTS WHERE OWNER='SCOTT'
AND SEGMENT_NAME IN ('SYS_IL0000130199C00005$$','TABLE_TEST_P','SYS_LOB0000130199C00005$$', 'TABLE_TEST')  ORDER BY BYTES DESC;  2
 
OWNER                          SEGMENT_NAME                                                                      SEGMENT_TYPE               MB TABLESPACE_NAME
------------------------------ --------------------------------------------------------------------------------- ------------------ ---------- ------------------------------
SCOTT                          SYS_LOB0000130199C00005$$                                                         LOBSEGMENT              26547 CABOFFICEDAT
SCOTT                          TABLE_TEST                                                                        TABLE                     953 CABOFFICEDAT
SCOTT                          TABLE_TEST_P                                                                      INDEX                      23 CABOFFICEIDX
SCOTT                          SYS_IL0000130199C00005$$                                                          LOBINDEX                   10 CABOFFICEDAT

De esta forma obtenemos todo el detalle relacionado con la tabla.

Espero os sirva de utilidad.

One thought on “Oracle espacio ocupado por tabla y objetos relacionados

Deja un comentario