При использовании 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
Комментариев нет:
Отправить комментарий