Oracle - материализованный вид все еще доступен во время полного обновления. Как это работает?

В одном из наших приложений у нас есть массивный материализованный вид, который обновляется три раза в день и занимает семь часов для обновления. (Не знаю, знаю). Это озадачило меня, потому что я уверен, что пользователи и сеансы не смогли получить доступ к этому материализованному представлению, пока он обновляется, но, видимо, они могут!. (Тип обновления - полное обновление)

Во время полного обновления, на мой взгляд, существующий набор данных отбрасывается, и запрос затем повторно выполняется. Если это так, то , как пользователи/другие сеансы могут получить доступ к материализованному представлению при обновлении материализованного представления?

Ответ 1

Существует два разных способа обновления полного обновления: атомное обновление или неатомное обновление. Атомное обновление просто удаляет DELETE для удаления всех строк в материализованном представлении, а затем INSERT вставляет новые данные. Все это в рамках одной транзакции, поэтому стандартная архитектура согласованности чтения в стандарте Oracle позволяет Oracle показывать другим сеансам старые данные до тех пор, пока обновление не завершится. В неатомном обновлении Oracle делает TRUNCATE на материализованном представлении, а затем в INSERT прямого пути для вставки новых данных. Это существенно более эффективно, но поскольку TRUNCATE является DDL, это означает, что старые данные не отображаются другим сеансам во время обновления.