Sebab: 1. Urutan akses sumber antara urus niaga silih berganti, dan dua pengguna mengakses jadual yang dikunci oleh pihak yang satu lagi, mengakibatkan kebuntuan 2. Dua pengguna secara serentak mengubah suai rekod yang sama, mengakibatkan kebuntuan ; 3 , pernyataan yang tidak memenuhi syarat dilaksanakan, dan pengindeksan yang tidak betul menyebabkan kebuntuan dalam imbasan global.
Persekitaran pengendalian tutorial ini: sistem Windows 10, versi Oracle 11g, komputer Dell G3.
Pangkalan data ialah sumber dikongsi yang digunakan oleh berbilang pengguna apabila berbilang pengguna mengakses data secara serentak, berbilang transaksi akan berlaku dalam pangkalan data pada masa yang sama. akses kepada data yang sama. Jika operasi serentak tidak dikawal, data yang salah boleh dibaca dan disimpan, memusnahkan konsistensi pangkalan data. Mengunci adalah teknologi yang sangat penting untuk mencapai kawalan konkurensi pangkalan data. Pengecualian berkaitan kunci sering ditemui dalam aplikasi praktikal Apabila dua urus niaga memerlukan satu set kunci yang bercanggah dan urus niaga tidak dapat diteruskan, kebuntuan akan berlaku, yang menjejaskan pelaksanaan biasa aplikasi.
Jenis kunci:
1 Kunci kongsi (Kunci Kongsi, kunci S): Objek data dengan kunci kongsi boleh dibaca oleh transaksi lain, tetapi tidak boleh Semak semula. Pangkalan data menggunakan dua jenis kunci asas ini untuk mengawal keselarasan transaksi pangkalan data.
2. Kunci Eksklusif (kunci X): Apabila objek data dikunci dengan kunci eksklusif, transaksi lain tidak boleh membaca atau mengubah suainya.
3. Kunci eksklusif: Berdasarkan kunci kongsi, ia dinaik taraf kepada kunci eksklusif.
4. Kunci kemas kini: Semua pengguna boleh membaca, tetapi saya mungkin melakukan operasi kemas kini pada masa hadapan. Hanya satu kunci kemas kini boleh layak untuk transaksi ini.
Punca kejadian:
1 Pergantian jujukan akses sumber antara transaksi: pengguna 1 mengakses jadual A (jadual terkunci A), dan kemudian mengakses semula Jadual B. ; pengguna lain 2 mengakses jadual B (mengunci jadual B), dan kemudian cuba mengakses jadual A pada masa ini, pengguna 1 perlu menunggu pengguna 2 untuk melepaskan jadual B kerana pengguna 2 telah mengunci jadual B sebelum meneruskan 2 mesti menunggu pengguna 1 mengeluarkan jadual A sebelum meneruskan, dan kebuntuan berlaku. Penyelesaian: Masalah logik program, perhatikan urutan panggilan jadual
2. Ubah suai rekod yang sama secara serentak: Pengguna 1 menanyakan rekod, dan kemudian mengubah suai rekod, kemudian pengguna 2 1 Sifat kunci dalam transaksi cuba ditingkatkan daripada kunci kongsi pertanyaan kepada kunci eksklusif, dan kunci eksklusif dalam pengguna 2 mesti menunggu 1 untuk melepaskan kunci kongsi kerana 1 mempunyai kunci kongsi, sementara 1 tidak boleh ditingkatkan kerana kunci eksklusif 2 menjadikannya mustahil untuk melepaskan kunci yang dikongsi, jadi kebuntuan berlaku:
3. Pengindeksan yang tidak betul membawa kepada imbasan jadual penuh: transaksi melaksanakan penyata yang tidak memenuhi syarat, melaksanakan imbasan jadual penuh atau jumlah data jadual sangat besar Apabila terdapat terlalu sedikit atau indeks besar yang tidak sesuai
Penyelesaian: Jangan gunakan pertanyaan terlalu kompleks yang mengaitkan berbilang jadual dalam pernyataan SQL dan bina indeks untuk pengoptimuman
Nota:
1 Oracle View kebuntuan dan lepaskan kebuntuan
select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v$session sess where ao.object_id = lo.object_id and lo.session_id = sess.sid; alter system kill session '738,1429'; --释放资源
2 >Tutorial yang disyorkan: "
Tutorial Video Oracleshow processlist --查看数据库中各个进程的运行状态 select * from information_schema.innodb_trx ---查询正在运行的事务 kill id
Atas ialah kandungan terperinci Apakah punca kebuntuan Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!