понедельник, 8 ноября 2010 г.

Как заблокировать/разблокировать статистику таблицы.

Пример показывает: 
- как заблокировать сбор статистики;
- что происходит когда Вы попытаетесь собрать на такой таблице статистику; 
- как разблокировать сбор статистики на таблицу.
Создаём таблицу

SQL> create table test ( x number );

Table created.

Создаём индекс

SQL> create index test_idx on test(x);

Index created.

Запрос возвращает NULL когда статистика не заблокирована 


SQL> SELECT stattype_locked FROM dba_tab_statistics WHERE table_name = 'TEST' and owner = 'SCOTT';
STATT
—–


Заблокируем сбор статистики на таблице

SQL> exec dbms_stats.lock_table_stats('scott', 'test');

PL/SQL procedure successfully completed.


Запрос возвращает ALL когда статистика заблокирована

SQL> SELECT stattype_locked FROM dba_tab_statistics WHERE table_name = 'TEST' and owner = 'SCOTT';
STATT
—–
ALL


Пробуем собрать статистику на "залоченной" таблице

SQL> exec dbms_stats.gather_index_stats('scott', 'test_idx');

BEGIN dbms_stats.gather_index_stats('scott', 'test_idx'); END;

 *
ERROR at line 1:
ORA-20005: object statistics are locked (stattype = ALL)
ORA-06512: at “SYS.DBMS_STATS”, line 10640
ORA-06512: at “SYS.DBMS_STATS”, line 10664
ORA-06512: at line 1


Пробуем собрать статистику на индексе используя analyze

SQL> analyze index ajaffer.test_idx compute statistics;

analyze index ajaffer.test_idx compute statistics
*
ERROR at line 1:
ORA-38029: object statistics are locked



Разблокируем сбор статистики на таблице

SQL> exec dbms_stats.unlock_table_stats('scott', 'test');

PL/SQL procedure successfully completed.

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

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