Материализованные представления — Определение последнего обновления

#oracle #materialized-views

#Oracle #материализованные представления

Вопрос:

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

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

Есть ли способ определить, было ли обновлено материализованное представление с использованием системной таблицы Oracle? Если нет, есть ли у кого-нибудь идеи, как я мог бы это сделать без необходимости обращаться к третьей стороне?

Комментарии:

1. Конкретно, какая версия Oracle?

2. dba_mviews…bt вы уверены, что у вас есть доступ к таблицам sys..

3. @doc_180 Я думал, что у меня есть к ним доступ, но я не могу получить доступ к тому, который вы предложили. Я могу получить доступ к all_tables и all_views. Как вы могли догадаться, у меня не так много опыта работы с Oracle.

4. @OMG Ponies Я полагаю, что у нас их 9.

5. проверьте параметры all_mviews. Если вы не смогли увидеть интересующий вас mv .. у вас нет разрешения.

Ответ №1:

Похоже, doc_180 уже ответил на это в комментариях, я не уверен, почему это не было добавлено в качестве ответа

 SELECT owner, mview_name, last_refresh_date
  FROM all_mviews
 WHERE owner = <<user that owns the materialized view>>
   AND mview_name = <<name of the materialized view>>
  

Если у вас есть доступ к таблицам администратора базы данных, вы могли бы заменить DBA_MVIEWS на ALL_MVIEWS . Это позволило бы вам получить доступ к информации о том, когда было обновлено каждое материализованное представление, а не только к подмножеству материализованных представлений, к которым у вас есть доступ. Конечно, это, вероятно, не та разница, которая особенно важна в данном случае.

Ответ №2:

К сожалению, формат даты по умолчанию в oracles — ГГГГ-ММ-ДД. Если вам нужно время, просто используйте что-то вроде этого:

 SELECT owner, mview_name, to_char(LAST_REFRESH_DATE, 'yyyy-mm-dd hh24:mi:ss') last_refresh_date
FROM all_mviews
WHERE owner = 'FOO'
AND mview_name = 'MV_BAR';
  

Комментарии:

1. Мне было интересно, была ли дата длиннее. Спасибо за дополнительный ответ.

Ответ №3:

Лично я использую all_snapshots, и эта информация дополняет информацию DBA_MVIEWS или ALL_MVIEWS

 select owner, name, last_refresh, error, status, refresh_mode  
from  all_snapshots 
where owner = 'owner';
  

Комментарии:

1. где мы можем получить дату создания MV?