Вы не можете сказать GATHER_SCHEMA_STATS
об исключении определенных объектов. Вы можете сделать GATHER STALE
для сбора статистики только по объектам, где статистика устарела, но вполне возможно, что это будет включать ваши материализованные представления. Несколько способов обойти это
1) Используйте процедуру LOCK_TABLE_STATS
для блокировки статистики ваших материализованных представлений. Это не позволит GATHER_SCHEMA_STATS
собирать статистику по этим объектам, пока вы не вызовете процедуру UNLOCK_TABLE_STATS
(предположительно, как часть процесса, который периодически обновляет статистику материализованного представления).
2) Используйте процедуру EXPORT_TABLE_STATS
, чтобы сохранить статистику для материализованных представлений перед сбором статистики схемы, а затем вызвать RESTORE_TABLE_STATS
после завершения вызова GATHER_SCHEMA_STATS
, чтобы вернуть статистику материализованного представления.
3) Не используйте GATHER_SCHEMA_STATS
. Вызовите GATHER_TABLE_STATS
в цикле, где вы исключаете любые объекты, которые хотите. Что-то вроде
BEGIN
FOR x IN (SELECT *
FROM dba_tables
WHERE owner = 'SOME_SCHEMA'
AND table_name NOT IN (<<list of MVs>>))
LOOP
dbms_stats.gather_table_stats( x.owner, x.table_name, ... );
END LOOP;
END;