Dette er en Oracle-fejl.
Den udløses ved at tilføje en kolonne med både en NOT NULL
begrænsning og en DEFAULT
værdi til en eksisterende tabel.
For hurtigt at tilføje kolonnen gemmer Oracle 11g standardværdien i dataordbogen. Oracle kalder dette "tilføj kolonneoptimering".
Dette er hurtigere end at skrive standardværdien ud i hver tabelrække. Forespørgselsmotoren skal derefter erstatte enhver NULL i tabelrækken med standardværdien fra dataordbogen. Desværre er der flere fejl relateret til dette. Din ser ud til at være en forekomst af:
Du kan kontrollere, hvilke kolonner der er blevet tilføjet på denne måde:
select owner, object_name, name
from dba_objects, col$
where bitand(col$.PROPERTY,1073741824)=1073741824
and object_id=obj#;
I vores tilfælde blev vi stukket af en anden fejl, som returnerede de forkerte resultater for en SELECT FOR UPDATE
.
Vi indstiller parameteren _add_col_optim_enabled=FALSE
at slå denne "optimering" fra. Alternativt kan du muligvis opgradere til en senere Oracle-version, hvor disse fejl er løst.
Opgradering eller indstilling af ovenstående parameter vil ikke rette din eksisterende tabel, som er korrupt. Du skal genskabe den tabel.