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

Butuh bantuan untuk memahami perilaku SELECT ... FOR UPDATE yang menyebabkan kebuntuan

Tabel USER mungkin memiliki banyak kunci asing yang merujuk padanya. Jika salah satu dari mereka tidak diindeks, Oracle akan mengunci seluruh tabel anak saat menghapus baris dari tabel induk. Jika beberapa pernyataan dijalankan pada saat yang sama, bahkan untuk pengguna yang berbeda, tabel anak yang sama akan dikunci. Karena urutan operasi rekursif tersebut tidak dapat dikontrol, ada kemungkinan beberapa sesi akan mengunci sumber daya yang sama dalam urutan yang berbeda, sehingga menyebabkan kebuntuan.

Lihat bagian ini di manual Konsep untuk informasi lebih lanjut.

Untuk mengatasi ini, tambahkan indeks ke kunci asing yang tidak diindeks. Jika nama kolom adalah standar, skrip seperti ini dapat membantu Anda menemukan kandidat potensial:

--Find un-indexed foreign keys.
--
--Foreign keys.
select owner, table_name
from dba_constraints
where r_constraint_name = 'USER_ID_PK'
    and r_owner = 'THE_SCHEMA_NAME'
minus
--Tables with an index on the relevant column.
select table_owner, table_name
from dba_ind_columns
where column_name = 'USER_ID';


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Parameter String keluaran ODP.NET tidak mengembalikan nilai

  2. Dapatkan id sisipan terakhir dengan Oracle 11g menggunakan JDBC

  3. Bagaimana cara mengompres hasil Oracle ini menjadi nilai sesuai dengan prioritas baris, mengabaikan nol?

  4. Tautan basis data Oracle - sambungkan ke proxy dengan karakter khusus di nama pengguna

  5. cara menampilkan nilai angka dalam kata-kata