вторник, 12 октября 2010 г.

Как восстановить старую статистику.

При использовании DBMS_STATS для сбора статистики, Oracle бэкапит старую перед тем как она изменится.

Следующий пример показывает как работает dbms_stats.gather_*_stats и как восстановить статистику

Пример:

– собираем для таблицы статистику

SQL> exec dbms_Stats.gather_table_stats('SCOTT', 'TEST');
PL/SQL procedure successfully completed.

–  проверяем last_analyzed дату сбора статистики

SQL> select to_char(last_analyzed, 'DD-MON-YYYY HH24:MI:SS') from user_tables where table_name = 'TEST';

TO_CHAR(LAST_ANALYZE
——————–
06-OCT-2010 00:08:05

– Произошли инсерты, апдейты, делиты из таблицы, сново соберём статистику

SQL> exec dbms_Stats.gather_table_stats('SCOTT', 'TEST');

–Смотрим последнюю дату анализа

SQL> select to_char(last_analyzed, 'DD-MON-YYYY HH24:MI:SS') from user_tables where table_name = 'TEST';

TO_CHAR(LAST_ANALYZE
——————–
06-OCT-2010 00:08:48

– Смотрим на время когда статистика собиралась ранее

SQL> select table_name, to_char(stats_update_time, 'DD-MON-YYYY HH24:MI:SS') from dba_tab_stats_history where owner = 'SCOTT';

TABLE_NAME TO_CHAR(STATS_UPDATE
—————————— ——————–
TEST 06-OCT-2010 00:08:05
TEST 06-OCT-2010 00:08:48

– восстанавливаем статистику на нужный момент времени

SQL> exec DBMS_STATS.RESTORE_TABLE_STATS (ownname=>'SCOTT', tabname=>'TEST', as_of_timestamp=>TO_DATE('06-OCT-2010 00:08:48', 'DD-MON-YYYY HH24:MI:SS'));

PL/SQL procedure successfully completed.

– проверяем что статистика восстановлена на нужное время

SQL> select to_char(last_analyzed, 'DD-MON-YYYY HH24:MI:SS') from user_tables where table_name = 'TEST';

TO_CHAR(LAST_ANALYZE
——————–
06-OCT-2010 00:08:05

Комментариев нет:

Отправить комментарий