Oracle - материализованное представление все еще доступно во время полного обновления. Как это работает? - PullRequest
12 голосов
/ 09 августа 2011

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

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

1 Ответ

16 голосов
/ 09 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...