Dies ist ein Oracle-Fehler.
Es wird ausgelöst, indem eine Spalte mit einem NOT NULL
hinzugefügt wird Constraint und ein DEFAULT
Wert in eine vorhandene Tabelle.
Um die Spalte schnell hinzuzufügen, speichert Oracle 11g den Standardwert im Datenwörterbuch. Oracle nennt dies "Spaltenoptimierung hinzufügen".
Das geht schneller, als den Standardwert in jede Tabellenzeile zu schreiben. Die Abfrage-Engine soll dann jede NULL in der Tabellenzeile durch den Standardwert aus dem Data Dictionary ersetzen. Leider gibt es diesbezüglich mehrere Bugs. Ihre scheint eine Instanz zu sein von:
So können Sie überprüfen, welche Spalten hinzugefügt wurden:
select owner, object_name, name
from dba_objects, col$
where bitand(col$.PROPERTY,1073741824)=1073741824
and object_id=obj#;
In unserem Fall wurden wir von einem anderen Fehler gestochen, der die falschen Ergebnisse für ein SELECT FOR UPDATE
zurückgab .
Wir setzen den Parameter _add_col_optim_enabled=FALSE
um diese "Optimierung" auszuschalten. Alternativ können Sie möglicherweise auf eine neuere Oracle-Version aktualisieren, in der diese Fehler behoben sind.
Durch Aktualisieren oder Festlegen des obigen Parameters wird Ihre vorhandene Tabelle nicht repariert, da sie beschädigt ist. Sie müssen diese Tabelle neu erstellen.