systemadmin.es > DBA > Listar todas las tablas en Oracle

Listar todas las tablas en Oracle

La gestión de las tablas en Oracle resulta diferente a como lo hace MySQL, pero resulta mucho más flexible una vez acostumbrados a ella. Vamos a ver como realizar listados de tablas por tablespace o por usuario.

Para poder realizar listados de tablas podemos consultar varias tablas del data dictionary:

  • DBA_TABLES: Contiene todas las tablas de la base de datos
  • ALL_TABLES: Contiene todas las tablas accesibles por el usuario (las propias más las que tiene permisos sobre ellas)
  • USER_TABLES: Contiene totas las tablas del usuario
  • DBA_SEGMENTS: Contiene todos los segmentos de la base de datos, esto incluye tablas, indices y segmentos de rollback entre otros:
    SQL> select distinct SEGMENT_TYPE from DBA_SEGMENTS;
    
    SEGMENT_TYPE
    ------------------
    LOBINDEX
    INDEX PARTITION
    TABLE PARTITION
    NESTED TABLE
    ROLLBACK
    LOB PARTITION
    LOBSEGMENT
    INDEX
    TABLE
    CLUSTER
    TYPE2 UNDO
    
    11 filas seleccionadas.
    

    Así, la tabla DBA_SEGMENTS contiene la tabla DBA_TABLES más el resto de segmentos de la base de datos:

    SQL> select count(*) from DBA_SEGMENTS;
    
      COUNT(*)
    ----------
          5783
    
    SQL> select count(*) from DBA_TABLES;
    
      COUNT(*)
    ----------
          2083
    

Usando la tabla DBA_TABLES tenemos las siguientes columnas:

SQL> desc DBA_TABLES;
 Nombre                                    ?Nulo?   Tipo
 ----------------------------------------- -------- ----------------------------
 OWNER                                     NOT NULL VARCHAR2(30)
 TABLE_NAME                                NOT NULL VARCHAR2(30)
 TABLESPACE_NAME                                    VARCHAR2(30)
 CLUSTER_NAME                                       VARCHAR2(30)
 IOT_NAME                                           VARCHAR2(30)
 STATUS                                             VARCHAR2(8)
 PCT_FREE                                           NUMBER
 PCT_USED                                           NUMBER
 INI_TRANS                                          NUMBER
 MAX_TRANS                                          NUMBER
 INITIAL_EXTENT                                     NUMBER
 NEXT_EXTENT                                        NUMBER
 MIN_EXTENTS                                        NUMBER
 MAX_EXTENTS                                        NUMBER
 PCT_INCREASE                                       NUMBER
 FREELISTS                                          NUMBER
 FREELIST_GROUPS                                    NUMBER
 LOGGING                                            VARCHAR2(3)
 BACKED_UP                                          VARCHAR2(1)
 NUM_ROWS                                           NUMBER
 BLOCKS                                             NUMBER
 EMPTY_BLOCKS                                       NUMBER
 AVG_SPACE                                          NUMBER
 CHAIN_CNT                                          NUMBER
 AVG_ROW_LEN                                        NUMBER
 AVG_SPACE_FREELIST_BLOCKS                          NUMBER
 NUM_FREELIST_BLOCKS                                NUMBER
 DEGREE                                             VARCHAR2(10)
 INSTANCES                                          VARCHAR2(10)
 CACHE                                              VARCHAR2(5)
 TABLE_LOCK                                         VARCHAR2(8)
 SAMPLE_SIZE                                        NUMBER
 LAST_ANALYZED                                      DATE
 PARTITIONED                                        VARCHAR2(3)
 IOT_TYPE                                           VARCHAR2(12)
 TEMPORARY                                          VARCHAR2(1)
 SECONDARY                                          VARCHAR2(1)
 NESTED                                             VARCHAR2(3)
 BUFFER_POOL                                        VARCHAR2(7)
 ROW_MOVEMENT                                       VARCHAR2(8)
 GLOBAL_STATS                                       VARCHAR2(3)
 USER_STATS                                         VARCHAR2(3)
 DURATION                                           VARCHAR2(15)
 SKIP_CORRUPT                                       VARCHAR2(8)
 MONITORING                                         VARCHAR2(3)
 CLUSTER_OWNER                                      VARCHAR2(30)
 DEPENDENCIES                                       VARCHAR2(8)
 COMPRESSION                                        VARCHAR2(8)
 DROPPED                                            VARCHAR2(3)

Los campos que vamos a ver son los siguientes:

  • OWNER: Propietario del segmento
  • SEGMENT_NAME: Nombre del segmento
  • TABLESPACE_NAME: Nombre del tablespace al que pertenece

Mediante simples consultas SQL podemos obtener los datos que queremos. Por ejemplo, para listar el nombre de todas las tablas de la base de datos Oracle haríamos:

SQL> select TABLE_NAME from DBA_TABLES;
TABLE_NAME
------------------------------
OPINIONES
FORM
LOCALIDAD
EXAMENES
(...)

2083 filas seleccionadas.

Este comando sería el equivalente al SHOW TABLES; de MySQL.

Para contar todas las tablas del tablespace UNIT001 haríamos lo siguiente:

SQL> select count(*) from DBA_TABLES where TABLESPACE_NAME='UNIT001';

  COUNT(*)
----------
       117

Y para contar las tablas de cada usuario podríamos hacer lo siguiente:

SQL> select count(*), OWNER from DBA_TABLES group by OWNER;

  COUNT(*) OWNER
---------- ------------------------------
        49 MDSYS
        24 EJEMPLOSCURSO
        14 NURIA
         1 TSMSYS
         2 DMSYS
       160 OING
         3 OUTLN
        37 CTXSYS
       126 OLAPSYS
        35 ENRIC_COLL
         6 NEWS

  COUNT(*) OWNER
---------- ------------------------------
       141 SYSTEM
        68 TESTING
        44 EXFSYS
         4 TIGER
        37 TIENDA
        11 SYSTEMADMIN_ES
        21 DBSNMP
         4 ORDSYS
       337 SYSMAN
        11 XDB
        66 CLAUDATOR

  COUNT(*) OWNER
---------- ------------------------------
        75 XD_TMP
       767 SYS
        40 WMSYS

25 filas seleccionadas.

5 comments to “Listar todas las tablas en Oracle”

  1. Gracias por la ayuda

  2. la dba_objects es mejor y te sirve para todo

  3. dba_objects no lo tienes separado sino todo lo que haya, igual puede resultar algo incomodo en algunas situaciones pero desde luego que puede ser útil

    saludos,

  4. Excelente comando para contar las tablas de cada usuario, y con esa estructura se pueden contar no solo las tablas sino la mayoria de los objetos de la Base de datos. Muy buen aporte que me sirvió mucho ;)

  5. Buen aporte gracias (Y)

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>