Materialisierte Ansichten: Fehlgeschlagene Aktualisierung macht eine materialisierte Ansicht ungültig

Achtung

Diese Verhaltensänderung ist in Bundle 2023_05 enthalten.

Den aktuellen Status des Bundles finden Sie unter Bundle-Verlauf.

Materialisierte Ansichten werden regelmäßig automatisch durch einen Hintergrundprozess aktualisiert.

Wenn die Aktualisierung einer materialisierten Ansicht fehlschlägt, werden derzeit die Daten der materialisierten Ansicht nicht aktualisiert und der Hintergrundprozess versucht weiterhin, die materialisierte Ansicht regelmäßig zu aktualisieren.

Wenn der Fehler auf ein Problem zurückzuführen ist, das weiterhin auftritt (z. B. ein Fehler aufgrund einer Division durch Null, die durch die Definition der materialisierten Ansicht oder durch die Daten verursacht wird), kann der Hintergrundprozess die materialisierte Ansicht nicht mehr aktualisieren und die Daten der materialisierten Ansicht werden nicht aktualisiert.

Mit dem aktuellen Release wird bei bestimmten Fehlertypen des Aktualisierungsprozesses die materialisierte Ansicht ungültig gemacht. Darüber hinaus gilt:

  • Wenn Sie die materialisierte Ansicht abfragen, enthält die Ausgabe den Grund für die Ungültigmachung.

  • Die Ausgabe des Befehls SHOW MATERIALIZED VIEWS enthält den Grund, warum die materialisierte Ansicht ungültig gemacht wurde.

Verwenden Sie die Informationen aus der Ausgabe dieser Befehle, um das Problem mit der materialisierten Ansicht zu beheben, und führen Sie den Befehl ALTER MATERIALIZED VIEW … RESUME aus, um die materialisierte Ansicht fortzusetzen.

Zusammenfassend hat sich der Prozess der Aktualisierung und Abfrage der materialisierten Ansicht wie folgt geändert:

Bisher

Der Hintergrundprozess kann die materialisierte Ansicht nicht aktualisieren.

Obwohl die Daten in der materialisierten Ansicht nicht mehr aktuell sind, zeigt die Ausgabe der Abfrage der materialisierten Ansicht nicht an, dass die Daten veraltet sind.

Wenn Sie den Befehl SHOW MATERIALIZED VIEWS ausführen, zeigt die Spalte „refreshed_on“ an, dass die Daten nicht mehr aktuell sind, aber die Ausgabe gibt keinen Grund an.

Jetzt

Der Hintergrundprozess macht die materialisierte Ansicht ungültig.

Die Abfrage der materialisierten Ansicht führt zu einem Fehler, der angibt, warum der Aktualisierungsprozess die materialisierte Ansicht nicht aktualisieren konnte. Beispiel:

SELECT * FROM my_mv;
Copy
002037 (42601): SQL compilation error:
  Failure during expansion of view 'MY_MV':
    SQL compilation error: Materialized View MY_MV is invalid.
    Invalidation reason: Division by zero

Wenn Sie den Befehl SHOW MATERIALIZED VIEWS ausführen, zeigt die Spalte invalid an, dass die materialisierte Ansicht ungültig ist, und die Spalte invalid_reason enthält den Grund für die Ungültigmachung. Beispiel:

SHOW MATERIALIZED VIEWS;
Copy
...  +---------+------------------+ ...
...  | invalid | invalid_reason   | ...
...  +---------+------------------+ ...
...  | true    | Division by zero | ...
...  +---------+------------------+ ...

Angenommen, Sie haben die folgenden Anweisungen ausgeführt, um eine materialisierte Ansicht zu erstellen:

CREATE OR REPLACE TABLE my_base_table (a INT, b INT, c VARCHAR(16));
Copy
INSERT INTO my_base_table VALUES (1, 1, 'valid data');
Copy
CREATE OR REPLACE MATERIALIZED VIEW my_mv AS SELECT a / b AS div FROM my_base_table;
Copy

Angenommen, Sie fügen Daten in die Tabelle ein, die dazu führen, dass die Aktualisierung der materialisierten Ansicht fehlschlägt. Angenommen, Sie führen die folgende Anweisung aus:

INSERT INTO my_base_table VALUES (1, 0, 'invalid data');
Copy

Wenn die materialisierte Ansicht das nächste Mal aktualisiert wird, schlägt die Aktualisierung aufgrund eines „Division durch Null“-Fehlers fehl. Da die Aktualisierung fehlschlägt, wird die materialisierte Ansicht ungültig gemacht.

Um den Grund für die Ungültigmachung anzuzeigen, können Sie die materialisierte Ansicht abfragen oder den Befehl SHOW MATERIALIZED VIEWS ausführen:

SELECT * FROM my_mv;
Copy
002037 (42601): SQL compilation error:
  Failure during expansion of view 'MY_MV':
    SQL compilation error: Materialized View MY_MV is invalid.
    Invalidation reason: Division by zero
SHOW MATERIALIZED VIEWS;
Copy
...  +---------+------------------+ ...
...  | invalid | invalid_reason   | ...
...  +---------+------------------+ ...
...  | true    | Division by zero | ...
...  +---------+------------------+ ...

Beheben Sie das Problem, das die Ungültigmachung verursacht hat, und führen Sie den Befehl ALTER MATERIALIZED VIEW … RESUME aus, um die materialisierte Ansicht fortzusetzen:

ALTER MATERIALIZED VIEW my_mv RESUME;
Copy

Ref.: 1178