Това е грешка в Oracle.
Задейства се чрез добавяне на колона с NOT NULL
ограничение и DEFAULT
стойност към съществуваща таблица.
За бързо добавяне на колоната Oracle 11g съхранява стойността по подразбиране в речника на данните. Oracle нарича това „добавяне на оптимизация на колони“.
Това е по-бързо от изписването на стойността по подразбиране във всеки ред на таблицата. След това машината за заявки трябва да замени всяко NULL в реда на таблицата със стойността по подразбиране от речника на данните. За съжаление има няколко грешки, свързани с това. Вашият изглежда е екземпляр на:
Можете да проверите кои колони са добавени по този начин:
select owner, object_name, name
from dba_objects, col$
where bitand(col$.PROPERTY,1073741824)=1073741824
and object_id=obj#;
В нашия случай бяхме ужилени от различен бъг, който върна неправилните резултати за SELECT FOR UPDATE
.
Задаваме параметър _add_col_optim_enabled=FALSE
за да изключите тази "оптимизация". Като алтернатива може да имате възможност да надстроите до по-късна версия на Oracle, където тези грешки са разрешени.
Надстройването или настройката на горния параметър няма да коригира съществуващата ви таблица, която е повредена. Трябва да създадете отново тази таблица.