Agaknya, karena Anda tidak memberikan nilai untuk DB_ID
kolom, nilai tersebut diisi oleh tingkat baris sebelum pemicu penyisipan yang ditentukan pada tabel. Pemicu itu, mungkin, adalah memilih nilai dari sebuah urutan.
Karena data dipindahkan (mungkin baru-baru ini) dari basis data produksi, taruhan saya adalah ketika data disalin, urutannya juga tidak diubah. Saya kira urutannya menghasilkan nilai yang jauh lebih rendah daripada DB_ID
terbesar yang saat ini ada di tabel yang mengarah ke kesalahan.
Anda dapat mengkonfirmasi kecurigaan ini dengan melihat pemicu untuk menentukan urutan mana yang digunakan dan melakukan
SELECT <<sequence name>>.nextval
FROM dual
dan membandingkannya dengan
SELECT MAX(db_id)
FROM cmdb_db
Jika, seperti yang saya duga, urutan menghasilkan nilai yang sudah ada di database, Anda dapat menambah urutan hingga menghasilkan nilai yang tidak digunakan atau Anda dapat mengubahnya untuk mengatur INCREMENT
untuk sesuatu yang sangat besar, dapatkan nextval sekali, dan atur INCREMENT
kembali ke 1.