Ini adalah bug Oracle.
Ini dipicu dengan menambahkan kolom dengan NOT NULL
kendala dan DEFAULT
nilai ke tabel yang ada.
Untuk menambahkan kolom dengan cepat, Oracle 11g menyimpan nilai default dalam kamus data. Oracle menyebutnya "tambahkan optimasi kolom".
Ini lebih cepat daripada menuliskan nilai default ke setiap baris tabel. Mesin kueri kemudian seharusnya mengganti NULL apa pun di baris tabel dengan nilai default dari kamus data. Sayangnya ada beberapa bug yang terkait dengan ini. Milik Anda tampaknya merupakan contoh dari:
Anda dapat memeriksa kolom mana yang telah ditambahkan seperti ini:
select owner, object_name, name
from dba_objects, col$
where bitand(col$.PROPERTY,1073741824)=1073741824
and object_id=obj#;
Dalam kasus kami, kami disengat oleh bug berbeda yang mengembalikan hasil yang salah untuk SELECT FOR UPDATE
.
Kami menetapkan parameter _add_col_optim_enabled=FALSE
untuk mematikan "pengoptimalan" ini. Atau, Anda mungkin dapat meningkatkan ke versi Oracle yang lebih baru di mana bug ini telah diatasi.
Memutakhirkan atau menyetel parameter di atas tidak akan memperbaiki tabel yang ada, yang rusak. Anda harus membuat ulang tabel itu.