Можно ли частично обновить материализованное представление в Oracle?

У меня очень сложный вид Oracle, основанный на других материализованных представлениях, регулярных представлениях, а также некоторых таблицах (я не могу "быстро обновить" его). В большинстве случаев существующие записи в этом представлении основаны на дате и являются "стабильными", а новые наборы записей имеют новые даты.

изредка я получаю обратные даты. Я знаю, что это такое и как с ними бороться, если бы я поддерживал таблицу, но я хотел бы сохранить это "представление". Полное обновление займет около 30 минут, но это займет всего 25 секунд для любой заданной даты.

могу ли я указать, что должна обновляться только часть материализованного представления (т. е. затронутые даты)?

должен ли я отказаться от представления и использовать таблицу и процедуру для заполнения или обновления заданной даты в этой таблице?

4 ответов


раздел по дату а в ответ 3 (skaffman).

вы можете просто сделать обновление обычного mv (table_refreshed ниже) и использовать ключевое слово exchange, т. е.

ALTER TABLE all_partitions
  EXCHANGE PARTITION to_calculate
  WITH TABLE table_refreshed
  WITHOUT VALIDATION
  UPDATE GLOBAL INDEXES;

после дополнительного чтения и судя по отсутствию ответов на этот вопрос, я прихожу к выводу, что невозможно обновить ни один раздел материализованного представления.

если вы можете привести пример синтаксиса, который доказывает обратное, я с радостью отмечу Ваш ответ принятым.

для других, кто может найти эти вопросы полезными в будущем: вы также можете знать, что в Oracle 10g обновление раздела (или любого mview) приведет к Oracle выпуск DELETE, следовал по INSERT.

если это дает вам проблемы с производительностью (как я), есть возможность использовать atomic_refresh => false, который TRUNCATE, потом INSERT /*+APPEND*/.


я смог обновить один раздел материализованного представления с отслеживанием изменения раздела.

похоже, требуется, чтобы представление создавалось с помощью и DBMS_MVIEW.REFRESH С 'P' метод.


вы можете разделить материализованных представлений так же, как и с обычными таблицами. Разделите mview по дате, а затем вы можете обновить только необходимый раздел.