Guardar y restablecer estadísticas de un esquema en Oracle

Algunas veces es necesario guardar las estadísticas de un esquema en Oracle de tal forma que si se recalculan y el resultado es una base de datos más lenta, exista la posibilidad de recuperarlas.

Para el ejemplo vamos a asumir los siguiente:

El proceso es el siguiente:

1. Conectarse como sys y crear una tabla para guardar las estadísticas. Para esto se debe utilizar el procedimiento SYS.DBMS_STATS.CREATE_STAT_TABLE especificandole el en que esquema (ownname) se va a crear la tabla, que nombre tendra la tabla (stattab) y en que tablespace quedará guardada (stattab):


EXECUTE SYS.DBMS_STATS.CREATE_STAT_TABLE(ownname => 'usuario1', stattab => 'estadisticas_usuario2', tblspace => 'ts_datos');

2. Guardar las estadísticas


EXECUTE SYS.DBMS_STATS.EXPORT_SCHEMA_STATS (ownname => 'usuario1', stattab => 'estadisticas_usuario2', statid=> 'ESTADISTICAS_200811', statown => 'usuario2));

ESTADISTICAS_200811 es un identificador único en caso de que se guarden varias estadísticas en esta tabla y como se puede ver estamos guardando las estadísticas de usuario2

3. Recalcular las estadísticas del esquema


EXECUTE SYS.DBMS_STATS.GATHER_SCHEMA_STATS (ownname=>'usuario2');

4. Si algo salió mal o estaba mejor antes de recalcular las estadísticas, restablecer las estadísticas


EXECUTE SYS.DBMS_STATS.IMPORT_SCHEMA_STATS (ownname=>'usuario1', stattab=>'estadisticas_usuario2', statid=>'ESTADISTICAS_200811', statown=> 'USUARIO2');