Можно ли частично обновить материализованное представление в 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 по дате, а затем вы можете обновить только необходимый раздел.