Oracle материализовал представление обновлений доступности данных - PullRequest
0 голосов
/ 02 марта 2019

В приложении с материализованными представлениями Oracle мне любопытно узнать о доступности данных во время обновления.

Я опишу потенциальный пример.

Создается материализованное представление, которое обновляется каждый час начас.Запрос выполняется в течение 1 минуты, чтобы обновить это представление.В то же время ряд API использует это представление для извлечения данных и может потенциально записывать в базовую таблицу, если это имеет значение.

У меня следующие вопросы:

  1. Что происходитна запросы в течение этого 1-минутного времени обновления, они заблокированы?Получают ли они старую копию данных?
  2. Что происходит с записями в базовые таблицы в течение этого времени, затрагиваются ли они каким-либо образом.
  3. Что если активный запрос поступает в: 59: 59 и выполняется в течение 30 секунд в материализованном представлении, блокирует ли это представление, и обновление не запускается до 3:00:29 или этот запрос прерывается и приостанавливается обновлением?

Если требуется какое-либо разъяснение, пожалуйста, дайте мне знать.

Спасибо!

1 Ответ

0 голосов
/ 02 марта 2019

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

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

  1. Запросы будут видеть данные такими, какими они были, когдазапрос запущен (или когда транзакция началась, если сеанс находится на уровне изоляции сериализуемой транзакции).Таким образом, он будет видеть непротиворечивую картину данных до того, как начнется обновление.
  2. Считыватели не блокируют записи, поэтому не будет никакого влияния на запись в базовую таблицу.
  3. То же, что 1,запрос будет видеть непротиворечивую картину данных в том виде, в каком они существовали, когда запрос начал выполняться (или когда транзакция началась).Обновление будет выполняться одновременно только в отдельной области транзакции.Единственное влияние состоит в том, что запрос потенциально может быть немного медленнее, поскольку, вероятно, потребуется применить некоторое количество UNDO к текущим кэшированным блокам, чтобы вернуть данные в том виде, в каком они существовали на момент начала запроса.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...