sql >> Databáze >  >> RDS >> Oracle

Proč tento sloupec Oracle DROP COLUMN mění výchozí hodnotu jiného sloupce?

Toto je chyba Oracle.

Spouští se přidáním sloupce s NOT NULL omezení a DEFAULT hodnotu do existující tabulky.

Pro rychlé přidání sloupce ukládá Oracle 11g výchozí hodnotu do datového slovníku. Oracle tomu říká „optimalizace přidání sloupců“.

Je to rychlejší než vypisování výchozí hodnoty do každého řádku tabulky. Dotazovací modul by pak měl nahradit jakoukoli hodnotu NULL v řádku tabulky výchozí hodnotou z datového slovníku. Bohužel s tím souvisí několik chyb. Zdá se, že vaše je instancí:

Můžete zkontrolovat, které sloupce byly přidány takto:

 select owner, object_name, name 
 from dba_objects, col$
 where bitand(col$.PROPERTY,1073741824)=1073741824
 and object_id=obj#;

V našem případě jsme byli zasaženi jinou chybou, která vrátila nesprávné výsledky pro SELECT FOR UPDATE .

Nastavíme parametr _add_col_optim_enabled=FALSE tuto "optimalizaci" vypnout. Případně můžete upgradovat na novější verzi Oracle, kde jsou tyto chyby vyřešeny.

Upgrade nebo nastavení výše uvedeného parametru neopraví vaši stávající tabulku, která je poškozená. Tuto tabulku musíte znovu vytvořit.




  1. Jak extrapolovat data pomocí Mysql a vložit je do pole?

  2. Přidejte zpětná označení při vytváření tabulky do mysql pomocí souboru csv -PHP

  3. Práce se sloupci MySQL TIMESTAMP v SQL Server

  4. Nejjednodušší způsob, jak převést objekt Blob na bajtové pole