2009-11-23 4 views
9

Ich habe eine sehr komplexe Oracle-Ansicht auf der Grundlage anderer materialisierter Ansichten, regulärer Ansichten sowie einiger Tabellen (ich kann sie nicht "schnell aktualisieren"). Meistens basieren vorhandene Datensätze in dieser Ansicht auf einem Datum und sind "stabil", wobei neue Datensätze neue Daten enthalten.Ist es möglich, eine materialisierte Ansicht in Oracle teilweise zu aktualisieren?

Gelegentlich erhalte ich Back-Dates. Ich weiß, was das ist und wie ich mit ihnen umgehen soll, wenn ich einen Tisch beibehalte, aber ich möchte dies als "Sicht" betrachten. Eine vollständige Aktualisierung würde ungefähr 30 Minuten dauern, aber es dauert nur 25 Sekunden für ein bestimmtes Datum.

Kann ich angeben, dass nur ein Teil einer materialisierten Ansicht aktualisiert werden soll (d. H. Die betroffenen Daten)?

Muss ich die Ansicht verwerfen und eine Tabelle und eine Prozedur verwenden, um ein bestimmtes Datum in dieser Tabelle aufzufüllen oder zu aktualisieren?

Antwort

2

Nach mehr Lesen und Beurteilen durch das Fehlen von Antworten auf diese Frage komme ich zu der Schlussfolgerung, dass es nicht möglich ist, eine einzelne Partition einer materialisierten Ansicht zu aktualisieren.

Wenn Sie ein Syntaxbeispiel geben können, das das Gegenteil beweist, werde ich Ihre Antwort gern als akzeptiert markieren.

Für andere, die diese Fragen in Zukunft nützlich finden könnten, möchten Sie vielleicht auch wissen, dass in Oracle 10g das Aktualisieren einer Partition (oder eines beliebigen mview) dazu führt, dass Oracle DELETE ausgibt, gefolgt von INSERT.

Wenn dies gibt Ihnen Performance-Probleme (wie mich), gibt es eine Option ist atomic_refresh verwenden => false, die TRUNCATE wird, dann INSERT/+ APPEND/

+0

Warum der Downvote? – Galghamon

1

Sie können materialisierte Ansichten genau wie bei normalen Tabellen partitionieren. Partitionieren Sie Ihre mview nach Datum und aktualisieren Sie dann nur die erforderliche Partition.

+2

tragen Sie daran, dass Die Partitionierung ist ein kostenpflichtiger Zusatz zur Enterprise Edition-Lizenz. Stellen Sie also sicher, dass Sie es lizenziert haben, bevor Sie in Produktion gehen. – APC

+1

Beziehen Sie sich auf die Verfolgung von Partitionsänderungen? Es scheint eine lange Schuß, dass das OP in der Lage sein würde, das zu nutzen, wenn die MV-Abfrage so komplex ist, wie gesagt. –

+0

Ok, aber wie aktualisiere ich eigentlich nur die eine Partition? Ich kann anscheinend keine Syntaxbeispiele dafür finden ... – Galghamon

2

, ich konnte ein auffrischen einzelne Partition einer materialisierten Ansicht mit Partitionsänderungsverfolgung.

Es scheint erforderlich zu sein, dass die Ansicht mit der Option REFRESH FAST WITH ROWID erstellt wird und DBMS_MVIEW.REFRESH mit der Methode 'P' aufgerufen wird.

9

Partition nach dem Datum wie in Antwort 3. Sie könnten die Aktualisierung einer normalen mv nur tun (table_refreshed unten) und als den Austausch Schlüsselwort heißt

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

Art verwenden in Bezug auf

Verwandte Themen