У меня сложный запрос, который не удовлетворяет условиям для создания материализованного представления с помощью «REFRESH FAST ON COMMIT» или «REFRESH FAST». Я создал материализованное представление с помощью «СТРОИТЬ НЕМЕДЛЕННО». Я создал материализованные журналы просмотра для всех таблиц, используемых в запросе. Мой вопрос: когда я обновляю материализованное представление, будет ли оно использовать журналы материализованного представления для постепенного обновления таблицы без наличия у материализованного представления параметров создания «REFRESH FAST ON COMMIT» или «REFRESH FAST». Будет ли он повторять запрос и создавать все записи с нуля при обновлении.

1
user1609590 6 Янв 2017 в 12:44
1
Думаю, я понимаю ваше недоумение - давайте попробуем. Поскольку ваш MV не соответствует требованиям для refresh fast, ему не нужны журналы MV. Это факт. Теперь, раз уж это факт, нужны ли вам журналы MV? Ответ: журналы существуют не только для ОДНОГО материализованного представления. У вас могут быть разные MV, которые используют одну и ту же базовую таблицу (или таблицы). Некоторые из этих клипов могут быстро обновляться, другие - нет. Журнал MV в базовой таблице - это всего лишь ОДИН журнал - он БУДЕТ использоваться любыми MV, которые быстро обновляются и используют эту таблицу, даже если другие MV в таблице не обновляются быстро.
 – 
user5683823
6 Янв 2017 в 17:20

1 ответ

Лучший ответ

Я не полностью понял ваш вопрос, но вот несколько ответов:

Вы можете установить REFRESH FAST, REFRESH COMPLETE и REFRESH FORCE. REFRESH FORCE означает, что Oracle пытается выполнить БЫСТРОЕ обновление, и если это невозможно, выполните ПОЛНОЕ обновление. REFRESH FORCE используется по умолчанию, если вы опустите предложение.

ПОЛНОЕ обновление не затрагивает какой-либо ЖУРНАЛ МАТЕРИАЛИЗОВАННЫХ ПРОСМОТРОВ, они остаются до тех пор, пока не будут обновлены все БЫСТРЫЕ МАТЕРИАЛИЗИРОВАННЫЕ ВИДЫ, т.е. ПОЛНОЕ обновление повторить запрос и построить все записи с нуля.

По-видимому, вы пытаетесь создать БЫСТРО обновляемый МАТЕРИАЛИЗОВАННЫЙ ВИД, но у вас это не получилось.

Попробуйте процедуру DBMS_MVIEW.EXPLAIN_MVIEW, чтобы проверить, почему БЫСТРОЕ обновление это невозможно. Для этой процедуры требуется таблица MV_CAPABILITIES_TABLE:

CREATE TABLE MV_CAPABILITIES_TABLE
(
  STATEMENT_ID     VARCHAR2(30 BYTE),
  MVOWNER          VARCHAR2(30 BYTE),
  MVNAME           VARCHAR2(30 BYTE),
  CAPABILITY_NAME  VARCHAR2(30 BYTE),
  POSSIBLE         CHAR(1 BYTE),
  RELATED_TEXT     VARCHAR2(2000 BYTE),
  RELATED_NUM      NUMBER,
  MSGNO            INTEGER,
  MSGTXT           VARCHAR2(2000 BYTE),
  SEQ              NUMBER
)
0
Wernfried Domscheit 6 Янв 2017 в 13:38
Ok действительно обновляет, заставляет по умолчанию использовать при обновлении журналы материализованных представлений.
 – 
user1609590
6 Янв 2017 в 16:34
Также должен ли я вообще создавать материализованные журналы просмотра для принудительного обновления?
 – 
user1609590
6 Янв 2017 в 16:34
МАТЕРИАЛИЗОВАННЫЙ ЖУРНАЛ ПРОСМОТРА базовой таблицы является (одним) предварительным условием для быстрого обновления. В чем твоя проблема, соотв. чего вы пытаетесь достичь?
 – 
Wernfried Domscheit
6 Янв 2017 в 16:36
Я хочу знать, будет ли функция обновления по умолчанию использовать материализованный журнал представления для инкрементных обновлений, а не полного повторного выполнения запроса.
 – 
user1609590
6 Янв 2017 в 16:41
Прочтите мой ответ: «force» может выполнять и БЫСТРО, и ПОЛНОЕ обновление. FAST использует материализованные журналы просмотра, а COMPLETE - нет.
 – 
Wernfried Domscheit
6 Янв 2017 в 16:53