Para actualizar estadisticas en un oracle 9i pueden utilizar un job que ejecute cada cierto tiempo como una vez al mes el DBMS_STATS.GATHER_TABLE_STATS. por ejemplo: pueden crear el siguiente job que se ejecuta una vez al mes:
exec SYS.DBMS_JOB.SUBMIT(
job => :id
,what => 'CALCULAR_ESTADISTICAS;'
,next_date => TRUNC(LAST_DAY(SYSDATE)) + 1
,interval => 'TRUNC(LAST_DAY(SYSDATE)) + 1'
,no_parse => FALSE
);
Y crean el procedimiento que realiza la actualización:
CREATE OR REPLACE PROCEDURE CALCULAR_ESTADISTICAS
IS
CURSOR C_OBJETOS
IS
SELECT OWNER, TABLE_NAME
FROM ALL_TABLES
WHERE
OWNER = 'dueño_de_tablas_a_actualizar';
nombre_tabla VARCHAR2(100);
propietario VARCHAR2(100);
sql_str VARCHAR2(1000);
BEGIN
OPEN C_OBJETOS;
LOOP
FETCH C_OBJETOS INTO propietario, nombre_tabla;
EXIT WHEN C_OBJETOS%NOTFOUND;
sql_str:= 'BEGIN DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => '''||propietario||''', TABNAME => '''||nombre_tabla||''', ESTIMATE_PERCENT => 100, CASCADE => TRUE); END;';
dbms_output.put_line(sql_str);
EXECUTE IMMEDIATE sql_str;
END LOOP;
CLOSE C_OBJETOS;
END;
/
saludos. Felipe
PD: Siempre que puedan realizen actualización de estadisticas tomando como muestra un 100% de los datos. Saludos.
No comments:
Post a Comment