Det här är en Oracle-bugg.
Den utlöses genom att lägga till en kolumn med både NOT NULL
begränsning och en DEFAULT
värde till en befintlig tabell.
För att snabbt lägga till kolumnen lagrar Oracle 11g standardvärdet i dataordboken. Oracle kallar detta "lägg till kolumnoptimering".
Detta är snabbare än att skriva ut standardvärdet i varje tabellrad. Frågemotorn är sedan tänkt att ersätta valfri NULL i tabellraden med standardvärdet från dataordlistan. Tyvärr finns det flera buggar relaterade till detta. Ditt verkar vara en instans av:
Du kan kontrollera vilka kolumner som har lagts till så här:
select owner, object_name, name
from dba_objects, col$
where bitand(col$.PROPERTY,1073741824)=1073741824
and object_id=obj#;
I vårt fall drabbades vi av en annan bugg som returnerade felaktiga resultat för en SELECT FOR UPDATE
.
Vi ställer in parametern _add_col_optim_enabled=FALSE
för att stänga av denna "optimering". Alternativt kan du kanske uppgradera till en senare Oracle-version där dessa buggar är lösta.
Att uppgradera eller ställa in ovanstående parameter kommer inte att fixa din befintliga tabell, som är korrupt. Du måste återskapa den tabellen.