2009-11-23 46 views
9

Tengo una vista de Oracle muy compleja basada en otras vistas materializadas, vistas regulares y algunas tablas (no puedo "actualizarla rápidamente"). La mayoría de las veces, los registros existentes en esta vista se basan en una fecha y son "estables", con nuevos conjuntos de registros que tienen nuevas fechas.¿Es posible actualizar parcialmente una vista materializada en Oracle?

Ocasionalmente, recibo fechas retrasdadas. Sé lo que son y cómo tratar con ellos si estuviera manteniendo una mesa, pero me gustaría mantener esto como una "vista". Una actualización completa demoraría unos 30 minutos, pero solo demoraría 25 segundos para una fecha determinada.

¿Puedo especificar que solo se actualice una parte de una vista materializada (es decir, las fechas afectadas)?

¿Tengo que eliminar la vista y usar una tabla y un procedimiento para rellenar o actualizar una fecha determinada en esa tabla?

Respuesta

2

Después de leer más y juzgar por la falta de respuestas a esta pregunta, llego a la conclusión de que no es posible actualizar una única partición de una vista materializada.

Si puede dar un ejemplo de sintaxis que demuestre lo contrario, con gusto marcaré su respuesta como aceptada.

Para otros que puedan encontrar útiles estas preguntas en el futuro: es posible que también desee saber que en Oracle 10g, actualizar una partición (o cualquier mview) hará que Oracle emita DELETE, seguido de INSERT.

Si esto le está dando problemas de rendimiento (como yo), hay una opción para utilizar atomic_refresh => false, lo que truncará, a continuación, insertar/+ APPEND/

+0

¿Por qué el voto a favor? – Galghamon

1

Puede dividir las vistas materializadas de la misma manera que con las tablas normales. Particiona tu mview por fecha, y luego puedes actualizar solo la partición requerida.

+2

Sólo tener en cuenta que El particionamiento es un cargo adicional a la licencia de Enterprise Edition. Así que asegúrese de tener una licencia antes de entrar en producción. – APC

+1

¿Te refieres al seguimiento de cambio de partición? Parece una posibilidad remota que el OP pueda aprovechar eso si la consulta MV es tan compleja como se dijo. –

+0

Bien, pero ¿cómo puedo actualizar solo la partición? Parece que no puedo encontrar ningún ejemplo de sintaxis de esto ... – Galghamon

2

he podido actualizar una única partición de una vista materializada con seguimiento de cambio de partición.

Parece requerir que la vista se cree con la opción REFRESH RÁPIDO CON ROWID y se llama a DBMS_MVIEW.REFRESH con el método 'P'.

9

de reparto por fecha como en respuesta 3. Sólo se podía hacer la actualización de un mv normal (table_refreshed abajo) y que utilice la palabra clave es decir, el intercambio

ALTER TABLE all_partitions 
    EXCHANGE PARTITION to_calculate 
    WITH TABLE table_refreshed 
    WITHOUT VALIDATION 
    UPDATE GLOBAL INDEXES; 

Saludos cordiales

Cuestiones relacionadas