Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Mengapa Oracle DROP COLUMN ini mengubah nilai default kolom lain?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menyimpan data ke dalam Clob menggunakan Hibernate di Oracle 10g

  2. Buka bungkus ke OracleConnection

  3. Aktifkan logging ODP.Net

  4. Apa cara paling efisien untuk memeriksa apakah ada catatan di Oracle?

  5. Oracle outer join dengan kondisi filter pada tabel kedua