Automatizar el proceso de estadisticas de un esquema
En varias ocaciones me ah sucedido que se debe automatizar el proceso de actualización de estadisticas del motor o bien de un esquema en particular, suponiendo que en dicho esquema estan los datos mas importantes y que mas utiliza el cliente.-
Para esto es posible dejar en un crontab (Unix/Linux) o bien en una tarea programada (Windows) un pequeño script que identidique todas las tablas de un esquema, elimine las estadisticas antiguas y luego las actualice, para esto les dejo el siguiente script que hace ésta labor.-
Por crontab puede quedar programado para alguna hora ya sea en la noche o bien durante el fin de seman…
#!/bin/bash
export NLS_LANG=spanish_spain.WE8ISO8859P1
export PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/oracle/bin::/opt/j2sdk1.4.1/bin:/opt/oracle/product/9.2.0/bin
export ORACLE_HOME=
export ORACLE_SID=
RUTA=
rm -f $RUTA/ejecuta_estadisticas_esquema.sql
#Genera script SQL para estadisticas ...
sqlplus user/pass @$RUTA/estadisticas_esquema.sql
#Ejecuta las estadisticas
sqlplus user/pass @$RUTA/ejecuta_estadisticas_esquema.sql
Detalle script estadisticas_esquema.sql
set pages 0
set feed off
set head off
set lines 90
spool
select rtrim(a.an1||' delete statistics;'),rtrim(b.an1||' compute statistics;')
from (select 'analyze table '|| a.owner ||'.'|| a.table_name as an1 from dba_tables a
where owner ='
) a
,(select 'analyze table '|| b.owner ||'.'|| b.table_name as an1 from dba_tables b
where owner ='
) b
where a.an1 = b.an1
;
select 'exit' from dual
;
spool off
exit









