#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?