Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

No se refresca vista materializada.

Estas en el tema de No se refresca vista materializada. en el foro de Oracle en Foros del Web. Buenos días a todos, Me gustaría crear una vista materializada la cual almacene los registros de ayer hasta el presente y que se actualice cada ...
  #1 (permalink)  
Antiguo 22/09/2014, 05:14
 
Fecha de Ingreso: abril-2013
Mensajes: 20
Antigüedad: 11 años, 6 meses
Puntos: 1
Pregunta No se refresca vista materializada.

Buenos días a todos,
Me gustaría crear una vista materializada la cual almacene los registros de ayer hasta el presente y que se actualice cada vez que vaya a ser consultada. Esta es la vista que he creado pero que no llega a actualizarse y se queda con los datos que se insertaron en su creación:

Código SQL:
Ver original
  1. CREATE MATERIALIZED VIEW "mv_health_rules" ("period", "id_service", "id_event", "total")
  2. TABLESPACE plat_dat
  3. BUILD IMMEDIATE
  4. USING INDEX
  5. REFRESH COMPLETE ON DEMAND
  6. USING DEFAULT LOCAL ROLLBACK SEGMENT
  7. USING ENFORCED CONSTRAINTS DISABLE QUERY REWRITE
  8. AS
  9. SELECT
  10. to_date(concat(to_char("created_at", 'YYYY-MM-DD HH24'),':00:00'),'YYYY-MM-DD HH24:MI:SS') AS "period"
  11. , "id_service"
  12. , "id_event"
  13. , COUNT(*) AS "total"
  14. FROM "bill_events"
  15. WHERE "created_at" BETWEEN trunc(sysdate)-1 AND sysdate
  16. GROUP BY to_char("created_at", 'YYYY-MM-DD HH24'), "id_service", "id_event"
  17. ORDER BY 1;

¿Alguien que pueda decirme el porque no se refresca la MV con los nuevos registros?

Saludos
Mario

Última edición por gnzsoloyo; 26/09/2014 a las 07:31
  #2 (permalink)  
Antiguo 22/09/2014, 08:43
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: No se refresca vista materializada.

Prueba cambiando esto
REFRESH COMPLETE ON DEMAND
por esto
REFRESH COMPLETE ON COMMIT

Nos cuentas
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 23/09/2014, 05:51
 
Fecha de Ingreso: abril-2013
Mensajes: 20
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: No se refresca vista materializada.

Hola huesos52, probé con el cambio que me dijiste pero me ha saltado este error:

Error que empieza en la línea: 1 del comando -
Código SQL:
Ver original
  1. CREATE MATERIALIZED VIEW "mv_health_rules" ("period", "id_service", "id_event", "total")
  2. TABLESPACE plat_dat
  3. BUILD IMMEDIATE
  4. USING INDEX
  5. REFRESH COMPLETE ON COMMIT
  6. USING DEFAULT LOCAL ROLLBACK SEGMENT
  7. USING ENFORCED CONSTRAINTS DISABLE QUERY REWRITE
  8. AS
  9. SELECT
  10. to_date(concat(to_char("created_at", 'YYYY-MM-DD HH24'),':00:00'),'YYYY-MM-DD HH24:MI:SS') AS "period"
  11. , "id_service"
  12. , "id_event"
  13. , COUNT(*) AS "total"
  14. FROM "bill_events"
  15. WHERE "created_at" BETWEEN trunc(sysdate)-1 AND sysdate
  16. GROUP BY to_char("created_at", 'YYYY-MM-DD HH24'), "id_service", "id_event"
  17. ORDER BY 1
  18. Error en la línea de comandos : 14 Columna : 6
  19. Informe de error -
  20. Error SQL: ORA-12054: no se puede definir el atributo de refrescamiento ON COMMIT para la vista materializada
  21. 12054. 00000 -  "cannot set the ON COMMIT refresh attribute for the materialized view"
  22. *Cause:    The materialized VIEW did NOT satisfy conditions FOR refresh at
  23.            commit TIME.
  24. *Action:   Specify ONLY valid options.


¿Es posible que no le este gustando que le pase una fecha concreta?
Saludos

Última edición por gnzsoloyo; 26/09/2014 a las 07:31
  #4 (permalink)  
Antiguo 23/09/2014, 09:23
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: No se refresca vista materializada.

Efectivamente, buscando un poco el problema, no puedes realizar un refresh on commit cuando haces uso de pseudocolumnas tales como SYSDATE o ROWNUM. Porque esto basicamente requiere de la reescritura de la consulta.

Hice pruebas sin hacer uso de SYSDATE y funciona perfecto.

Debes decirnos si la información requiere ser refrescada cada cambio o puede hacerse cada cierto intervalo de tiempo.

Otra opción es utilizar
REFRESH
START WITH SYSDATE NEXT SYSDATE + (1/60)/24
FORCE
que actualiza la vista cada minuto y si te permite hacer uso de pseudocolumnas como sysdate.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Última edición por huesos52; 23/09/2014 a las 09:30
  #5 (permalink)  
Antiguo 26/09/2014, 07:16
 
Fecha de Ingreso: abril-2013
Mensajes: 20
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: No se refresca vista materializada.

Hola de nuevo huesos52,

Al final la cree con el refresh que me dijistes y parece que funciona correctamente. La he puesto a actualizar cada hora. La idea de esta vista es para monitorear los registros que hubo hoy (desde las 00:00 hasta la hora actual --> sysdate) con el mismo periodo de tiempo del día anterior. Mi idea era que la vista se actualizara cada vez que se llamara a la vista pero este modo tb puede servirme :)

Asi es como ha quedado:

Código SQL:
Ver original
  1. CREATE MATERIALIZED VIEW "mv_health_rules" ("period", "id_service", "id_event", "total")
  2. TABLESPACE plat_dat
  3. BUILD IMMEDIATE
  4. USING INDEX
  5. REFRESH
  6. START WITH SYSDATE NEXT SYSDATE + 1/24
  7. FORCE
  8. USING DEFAULT LOCAL ROLLBACK SEGMENT
  9. USING ENFORCED CONSTRAINTS DISABLE QUERY REWRITE
  10. AS
  11. SELECT
  12.     to_date(concat(to_char("created_at", 'YYYY-MM-DD HH24'),':00:00'),'YYYY-MM-DD HH24:MI:SS') AS "period"
  13.     , "id_service"
  14.     , "id_event"
  15.     , COUNT(*) AS "total"
  16. FROM "bill_events"
  17.     WHERE "created_at" BETWEEN trunc(sysdate)-1 AND sysdate
  18. GROUP BY to_char("created_at", 'YYYY-MM-DD HH24'), "id_service", "id_event"
  19. ORDER BY 1;
Lo unico que me tiene un poco mosca es que cuando miro la vista en el sqldeveloper en la pestaña de Vista Materializadas me sale una x al lado del nombre.

Saludos y muchas gracias

Última edición por gnzsoloyo; 26/09/2014 a las 07:30
  #6 (permalink)  
Antiguo 26/09/2014, 07:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: No se refresca vista materializada.

@mariomario89: Por favor, usa el HIGHLIGHT "SQL" que tienes disponible en el combo de la edicion de mensajes. Permite visualizar el código con más claridad.
Para eso está...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: oracle11g, sql, vista
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:49.