índice vistas vista puede porque ningún modificar materializadas materializada indexadas force está esquema enlazada demand crear consulta 12c sql oracle

sql - vistas - Modificar consulta de vista materializada



vistas materializadas oracle 12c (5)

Necesito modificar la consulta de vista materializada. Es posible hacer lo mismo sin soltarlo y recrearlo.


Esta puede ser una nueva característica en una versión posterior de Oracle, pero encontré que esto funciona muy bien:

DROP MATERIALIZED VIEW my_mview PRESERVE TABLE; CREATE MATERIALIZED VIEW my_mview ON PREBUILT TABLE ...


No, no puede alterar la consulta de una vista materializada sin soltarla.

La sintaxis de CREATE MATERIALIZED VIEW no admite esa función.

ALTER MATERIALIZED VIEW se usa para modificar una vista materializada existente en una o más de las siguientes formas:

  • Para cambiar sus características de almacenamiento.
  • Para cambiar su método de actualización, modo o tiempo
  • Alterar su estructura para que sea un tipo diferente de vista materializada.
  • Para habilitar o deshabilitar la reescritura de consultas

Vea el Manual de Oracle 12c Release 1 para:


Para las condiciones en las que no estás seguro de si existe MVIEW o no (que es para lo que es realmente bueno CREAR O REEMPLAZAR), uso;

BEGIN EXECUTE IMMEDIATE ''DROP MATERIALIZED VIEW name_of_mview''; EXCEPTION WHEN OTHERS THEN IF SQLCODE = -12003 THEN dbms_output.put_line(''MVIEW does not exist, which was somewhat expected''); ELSE RAISE; END IF; END; / CREATE MATERIALIZED VIEW name_of_mview ... AS SELECT ...


Puedes dejar la mview en su lugar. Si su preocupación es minimizar el tiempo de inactividad mientras se crea una instancia de la nueva mview (porque no usó una tabla precompilada), puede hacer lo siguiente.

  1. Crea una nueva tabla llamada mview_1 en la tabla precompilada
  2. Una vez creado, puedes soltar el anterior.
  3. crear o reemplazar la vista mview como select * from mview_1

Ahora, cuando necesite reconstruir, podrá hacerlo con poco o ningún tiempo de inactividad, ya que puede simplemente apuntar la vista a la nueva tabla / vista en el futuro.


PODRÍA poder hacer uso del MV existente como fuente de una tabla precompilada para el nuevo MV

Mucho depende de lo que esté haciendo a la consulta, por supuesto. Si está agregando una columna, por ejemplo, necesitará actualizar todo para obtener su nuevo valor.

PD. La forma rápida de convertir el MV existente en una tabla sería el intercambio de particiones, pero tenga cuidado con los gotchas . Luego manipula la tabla para que coincida con el nuevo conjunto de resultados y cree el nuevo MV basado en la tabla manipulada.