Oracle - что происходит при обновлении представления "REFRESH FORCE ON DEMAND" с помощью СУБД MVIEW.ОБНОВИТЬ


У меня есть следующее материализованное представление -

CREATE MATERIALIZED VIEW TESTRESULT 
ON PREBUILT TABLE WITH REDUCED PRECISION
REFRESH FORCE ON DEMAND
WITH PRIMARY KEY
AS 
SELECT...
FROM...
WHERE...

Этот материализованный вид не имеет журнала материализованного вида подложки. Как видно из приведенного выше предложения, этот MV имеет" по требованию", и согласно документации Oracle,

" [по требованию] указать, что материализованный просмотр будет обновляться по требованию вызов одной из трех СУБД_MVIEW процедуры обновления."

Когда я вызываю DBMS_MVIEW.REFRESH('TESTRESULT'), что происходит? Это вручную проверять каждую запись, чтобы увидеть, если он был обновлен?

Версия Oracle: 10g

1 4

1 ответ:

По умолчанию (и это значение по умолчанию изменяется в разных версиях Oracle), который будет выполнять полное атомарное обновление материализованного представления. Это означает, что данные в материализованном представлении будут удалены, базовый запрос будет выполнен повторно, а результаты будут загружены в материализованное представление. Вы можете сделать обновление более эффективным, передав значение FALSE для параметра ATOMIC_REFRESH, т. е.

dbms_mview.refresh( 'TESTRESULT', atomic_refresh => false );

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