2016-11-08 2 views
1

So habe ich eine materalized Ansicht bekommt (ich weiß ...):Oracle 11g Broken Materiazierte Ansicht: Stoppen Sie aktualisieren, ohne Sicht oder erfrischende Sicht zu verlieren?

CREATE MATERIALIZED VIEW vw_my_view_here 
REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE + 1/24 AS 
/*huge-ass select statement here*/ 
UNION ALL 
/*huge-ass select statement here*/ 
UNION ALL 
/*huge-ass select statement here*/ 
UNION ALL 
/*huge-ass select statement here*/ 

Dies ist seit einiger Zeit in unserem System vorhanden ist, ohne Probleme zu verursachen. Eine dieser Select-Abfragen ist fehlerhaft (irgendwie - vermutlich - Schemaänderungen in den zugrunde liegenden Tabellen) und wurde 24 Stunden lang ausgeführt und verbraucht alle Ressourcen der Box. Dies ist ein Problem für die anderen Dinge auf der Box.

Ich kann die Ansicht nicht löschen oder ändern - da es völlig undokumentiert ist (ich weiß ...) und ich zuerst herausfinden muss, wer es verbraucht, wie es aufgefüllt wird usw.

Ich habe versucht, den Prozess, der die Abfrage behandelt, zu töten, aber es scheint eine andere Abfrage wird sofort danach ausgelöst.

Wie kann ich die materialisierte Ansicht stoppen, ohne 1) die Ansicht zu löschen und (2) ohne die Ansicht zu aktualisieren (weil das 24 Stunden und alle unsere Boxressourcen in Anspruch nimmt).

Ich habe versucht, läuft

alter materialized view view_name refresh on demand; 

aber es scheint, nur ohne Auswirkung auf die ursprüngliche massiven Abfrage endlos zu laufen.

Irgendwelche Ideen?

+2

Haben Sie die aktuellen Aktualisierungsprozesse (nicht sicher, dass das klingt wie eine gute Idee, aber ...) getötet, während die 'alter' läuft? Ich vermute, dass es darauf wartet, dass die aktuelle Aktualisierung beendet wird, bevor es tatsächlich die Aktualisierungszeit ändern kann, anstatt zu versuchen, sich selbst zu aktualisieren. –

+1

Da Sie 'on commit' oder' on demand' nicht angegeben haben (und insbesondere, weil Sie '' start with'' haben), wird Ihr mview auf Wunsch bereits aktualisiert. Ist ein geplanter Job für die Aktualisierung eingerichtet? Wenn ja, versuchen Sie es zu deaktivieren. – Boneist

+0

@AlexPoole Sie haben es in einem geschafft. Den Aktualisierungsprozess während der "Aktualisierung bei Bedarf" abbrechen; Befehl wurde ausgeführt, das Problem wurde behoben. Die Warteschlangenbildung trat nicht einmal auf, so dass das Verhalten so verwirrend schien. Danke für die Hilfe! – Paul

Antwort

2

Die Dokumentation für altering the refresh settings sagt:

Diese Klausel nur legt die Standardaktualisierungsoptionen. Anweisungen zur tatsächlichen Implementierung der Aktualisierung finden Sie in Oracle Database Advanced Replication und Oracle Database Data Warehousing Guide.

Ihre alter materialized view Anweisung führt keine Aktualisierung selbst durch. Es wartet nur darauf, dass die aktuell ausgeführte Aktualisierung abgeschlossen wird, bevor das Datenwörterbuch für diese Ansicht aktualisiert werden kann. Sobald die aktuelle Aktualisierung abgeschlossen ist (oder beendet ist), wird die alter abgeschlossen und verhindert, dass weitere automatische Aktualisierungen gestartet werden.

+0

Die Beendigung des aktuellen Abfrageprozesses * während * der 'Aktualisierung bei Bedarf' ausgeführt wurde (oder genauer gesagt während der Ausführung) - so dass die Aktualisierungseinstellungen aktualisiert wurden, bevor das Update erneut versucht wurde - war die Lösung, für die es arbeitete mich. Sie haben eine sehr gute Nase für diese Dinge! Danke nochmal! – Paul

Verwandte Themen