Oracle
 sql >> база данни >  >> RDS >> Oracle

Защо тази DROP COLUMN на Oracle променя стойността по подразбиране на друга колона?

Това е грешка в 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, където тези грешки са разрешени.

Надстройването или настройката на горния параметър няма да коригира съществуващата ви таблица, която е повредена. Трябва да създадете отново тази таблица.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не може да се компилира GI 12.1.0.2 и грешка при сегментиране

  2. Преобразувайте данните от колоната за разлика TIMESTAMP във формат на низ

  3. ScaleGrid добавя Oracle Cloud за хостване на управлявани бази данни

  4. Временна таблица в Oracle?

  5. Как да форматирате дати в Oracle