2011-04-27 27 views
17

Accedo actualmente a una serie de vistas y vistas materializadas. Las materializadas son mantenidas por un tercero que ofrece poca información con respecto a la frecuencia y el éxito de la materialización. Últimamente las vistas materializadas no se han podido actualizar y he enviado numerosos informes con datos incorrectos/demorados contenidos en el mismo.Vistas materializadas - Identificación de la última actualización

Actualmente estoy consultando cada materializado que pretendo utilizar para establecer cuándo se produjo la última actualización dentro del sistema transaccional, si no se ha actualizado, el resto del código no se ejecuta, sin embargo, este es un gran desperdicio de esfuerzo y a veces puede llevar a una suposición incorrecta (la vista materializada puede haberse actualizado, pero no se realizaron transacciones adicionales, por lo tanto, el resto del código no se ejecuta) y preferiría otro método.

¿Hay alguna forma de identificar si una vista materializada se ha actualizado utilizando una tabla del sistema Oracle? Si no, ¿alguien tiene alguna idea de cómo haría esto sin tener que contactar al tercero?

+0

Específicamente qué versión de Oracle? –

+0

dba_mviews ... bt ¿estás seguro de que tienes acceso a las tablas del sistema ... –

+0

@ doc_180 Pensé que tenía acceso a ellas, pero no puedo acceder a la que has sugerido. Puedo acceder a all_tables y all_views. Como habrás adivinado, no tengo mucha experiencia con Oracle. – Scott

Respuesta

32

Parece que ya ha respondido doc_180 esto en los comentarios, no estoy seguro de por qué no se han agregado como la respuesta

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

Si usted tiene acceso a las tablas de DBA, puede poner DBA_MVIEWS para ALL_MVIEWS. Eso le permitiría obtener acceso a la información sobre cuándo se actualizó cada vista materializada en lugar de solo el subconjunto de vistas materializadas a las que tiene acceso. Por supuesto, esa no es probablemente la diferencia que es particularmente importante en este caso.

5

Lamentablemente, el formato de fecha predeterminado de oráculo es AAAA-MM-DD. Si necesita el tiempo sólo tiene que utilizar algo como esto:

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'; 
+0

Me preguntaba si la fecha era más larga. Gracias por la respuesta adicional. – hot2use

0

Personalmente utilizo el all_snapshots, y esta información es complementaria a la información de la DBA_MVIEWS o ALL_MVIEWS

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