Was sind die Ursachen und Lösungen für mutiert Tabelle Fehler Datenbank-Administratoren Stapelaustausch

Die wahrscheinlichste Ursache eines mutierenden Tabellenfehler ist der Missbrauch von Triggern. Hier ist ein typisches Beispiel:

  1. Sie fügen eine Zeile in der Tabelle A
  2. ein Trigger auf Tabelle A (für jede Zeile) führt eine Abfrage auf Tabelle A, zum Beispiel eine Zusammenfassung Spalte zu berechnen
  3. Oracle wirft einen ORA-04091: Tabelle A mutiert, Trigger / Funktion kann es nicht sehen,

Dies ist eine erwartete und ein normales Verhalten, Oracle möchte, dass Sie von sich selbst, da Oracle Garantien zu schützen:

  • (I), die jede Aussage Atom ist (das heißt entweder scheitern oder gelingen vollständig)
  • (Ii) dass jede Erklärung sieht eine konsistente Sicht auf die Daten

Wahrscheinlich, wenn Sie diese Art von Trigger schreiben würden Sie die Abfrage (2) erwarten, dass die Zeile eingefügt auf (1) zu sehen. Dies würde oben mit beiden Punkten im Widerspruch sein, da das Update noch nicht beendet ist (es könnte mehr Zeilen eingefügt werden).

Oracle konnte das Ergebnis im Einklang mit einem Punkt in der Zeit kurz vor dem Beginn der Erklärung aber von den meisten Beispielen kehre ich habe, die diese Logik versuchen gesehen zu implementieren, sehen die Menschen eine mehrreihige Anweisung als Serie von aufeinanderfolgenden Schritten und erwarten, dass die Anweisung [2], um die Änderungen durch den vorherigen Schritten zu sehen. Oracle kann das erwartete Ergebnis nicht zurück und deshalb führt den Fehler.

Wenn ich die Ursache des mutierenden Tabellenfehler vermuten, ist ein Auslöser, ein Weg, um die Fehler zu vermeiden, ist die Logik aus dem Auslöser in Verfahren zu bewegen.

Quelle: dba.stackexchange.com

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

zwei × 5 =