Estadísticas y Tablas Externas (II)

En un reciente artículo, “Estadísticas y Tablas Externas“, se apuntaba la circunstancia de que DBMS_STATS.GATHER_SCHEMA_STATS() no recogía las estadísticas para las tablas externas del esquema, las cuales debían ser computadas (no estimadas) con DBMS_STATS.GATHER_TABLE_STATS. El artículo en cuestión estaba escrito tomando como base mis actuales bases de datos (diferentes 10g’s: para Linux y Windows). No obstante, Dani me señaló que él había encontrado errores producidos en un cliente por el uso de DBMS_STATS.GATHER_SCHEMA_STATS() sobre un esquema que tenía tablas externas cuyos ficheros se habían perdido. Yo le contesté con la documentación de Oracle 10g y le advertí de que no disponía de ningún 9i a mano.

Como quiera que estoy de vacaciones y me dispongo a desmantelar un viejo equipo con Windows 2000, recordé que por allí debería de haber una base de datos 9i. Así pues, hice una prueba para verificar las palabras de Dani antes de que dicha base de datos -junto con todo el ‘software’ del equipo, S.O. incluido- pase a dormir definitivamente el sueño de los justos.

Primero creamos un fichero EXT_PRUEBA01.TXT en un directorio ‘utl_file_dir’:

01UNO
02DOS
03TRES

y luego ejecutamos la ‘prueba del algodón’:

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
PL/SQL Release 9.2.0.8.0 - Production
CORE    9.2.0.8.0       Production
TNS for 32-bit Windows: Version 9.2.0.8.0 - Production
NLSRTL Version 9.2.0.8.0 - Production

SQL> CREATE TABLE EXT_PRUEBA01
  2     ( ID_N  NUMBER(3),
  3       C_TXT VARCHAR2(10)
  4     )
  5     ORGANIZATION EXTERNAL
  6     (
  7        TYPE ORACLE_LOADER
  8        DEFAULT DIRECTORY utl_file_dir
  9        ACCESS PARAMETERS
 10        (
 11           RECORDS DELIMITED BY NEWLINE
 12              FIELDS
 13              (
 14                 ID_N POSITION(1:2),
 15                 C_TXT POSITION(3:12)
 16              )
 17        )
 18        LOCATION ('EXT_PRUEBA01.TXT')
 19     )
 20  REJECT LIMIT UNLIMITED;

Tabla creada.

SQL> SELECT * FROM EXT_PRUEBA01;

      ID_N C_TXT
---------- ----------
         1 UNO
         2 DOS
         3 TRES

SQL> SELECT TABLE_NAME,
  2         TABLESPACE_NAME,
  3         STATUS,
  4         NUM_ROWS,
  5         AVG_SPACE,
  6         LAST_ANALYZED
  7    FROM USER_TABLES;
       STATUS,
       *
ERROR en línea 3:
ORA-00904: "STATUS": identificador no válido

¡Ups! ‘STATUS’ no existía en 9i

SQL> ED
Escrito archivo afiedt.buf

  1  SELECT TABLE_NAME,
  2         TABLESPACE_NAME,
  3  --       STATUS,
  4         NUM_ROWS,
  5         AVG_SPACE,
  6         LAST_ANALYZED
  7*   FROM USER_TABLES
SQL> /

TABLE_NAME   TABLESPACE_NAME   NUM_ROWS  AVG_SPACE LAST_ANA
------------ --------------- ---------- ---------- --------
EXT_PRUEBA01 SYSTEM

SQL> EXEC DBMS_STATS.GATHER_SCHEMA_STATS(ownname=>'CARLOS');

Procedimiento PL/SQL terminado correctamente.

SQL> SELECT TABLE_NAME,
  2         TABLESPACE_NAME,
  3  --       STATUS,
  4         NUM_ROWS,
  5         AVG_SPACE,
  6         LAST_ANALYZED
  7    FROM USER_TABLES
  8  /

TABLE_NAME   TABLESPACE_NAME   NUM_ROWS  AVG_SPACE LAST_ANA
------------ --------------- ---------- ---------- --------
EXT_PRUEBA01 SYSTEM                   3          0 28/12/07

Con lo que se demuestra que Dani tenía razón: en las bases de datos 9i DBMS_STATS.GATHER_SCHEMA_STATS() sí recoge estadísticas para las tablas externas de un esquema. En Oracle deben de haber tenido en consideración el tipo de errores referidos por Dani y han cambiado el comportamiento para la versión 10g.

Saludos.

Carlos.

Anuncios

Una respuesta a Estadísticas y Tablas Externas (II)

  1. […] Nota: El funcionamiento de DBMS_STATS.GATHER_SCHEMA_STATS para las bases de datos 9i es diferente, como se puede ver aquí. […]

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: