1 minuto(s) de lectura

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.

Fuente: Listar tablas en Oracle

Categorías:

Actualizado: