Rumah  >  Artikel  >  pangkalan data  >  Adakah memasukkan dalam Oracle mengunci jadual?

Adakah memasukkan dalam Oracle mengunci jadual?

WBOY
WBOYasal
2022-05-30 16:29:118288semak imbas

Sisipkan dalam Oracle akan mengunci jadual; apabila Oracle melaksanakan penyata DML seperti sisipan, ia akan memohon kunci pada meja yang sedang dikendalikan Apabila dua penyata sisipan cuba beroperasi pada jadual pada masa yang sama, sesi akan berlaku. Disekat, menunggu sesi lain untuk melakukan atau rollback, sekali gus menyebabkan kebuntuan.

Adakah memasukkan dalam Oracle mengunci jadual?

Persekitaran pengendalian tutorial ini: sistem Windows 10, versi Oracle 11g, komputer Dell G3.

Adakah memasukkan dalam oracle mengunci jadual?

Adakah memasukkan dalam oracle mengunci jadual

Apabila ORACLE melaksanakan pernyataan DML seperti sisipan, ia akan secara automatik terlebih dahulu Memohon kunci TM di atas meja untuk dikendalikan Apabila kunci TM diperoleh, ia akan memohon kunci jenis TX secara automatik. Apabila dua atau lebih sesi melaksanakan bahasa DML pada rekod jadual yang sama, sesi pertama mengunci rekod dan sesi lain berada dalam keadaan menunggu sehingga kunci TX dilepaskan selepas sesi pertama dilakukan, dan sesi lain Hanya sesi boleh dikunci.

Pertimbangkan kerana dua penyata sisipan secara serentak cuba memasukkan data dengan PK atau nilai unik yang sama ke dalam jadual, menyebabkan sesi disekat, menunggu sesi lain untuk melakukan atau rollback, sekali gus menyebabkan kebuntuan.

Dalam kes ini, selagi mana-mana satu daripada sesi diserahkan, sesi yang satu lagi akan melaporkan ORA-00001: kekangan unik dilanggar dan kebuntuan ditamatkan atau salah satu sesi dibatalkan dan satu lagi seseorang boleh melaksanakan secara normal.

Dalam Oracle, sebab untuk mengunci jadual ialah apabila atur cara melakukan sisipan pada jadual dan belum melakukan lagi, dan atur cara lain juga melakukan sisipan pada jadual yang sama, sumber akan berlaku pada ini masa. Pengecualian sibuk, iaitu, kunci meja.

Sebab utama untuk mengunci jadual ialah:

(1) Program A melaksanakan sisipan pada jadualA, dan sebelum komit, program B juga memasukkan jadualA pengecualian sibuk akan berlaku pada masa ini, iaitu jadual kunci

(2) Jadual kunci selalunya berlaku secara serentak dan bukannya selari (secara selari, apabila satu utas mengendalikan pangkalan data, utas lain tidak boleh mengendalikan pangkalan data . cpu dan prinsip peruntukan i/o)

Kaedah untuk mengurangkan kebarangkalian mengunci jadual:

(1) Kurangkan masa antara pelaksanaan sisipan, kemas kini dan padam kenyataan untuk dilakukan. Khususnya, pelaksanaan kelompok ditukar kepada pelaksanaan tunggal, dan kelajuan bukan pelaksanaan SQL itu sendiri dioptimumkan

(2) Jika terdapat pengecualian, perkara itu digulung semula

Sebab untuk mengunci jadual mungkin data baris telah diubah suai dan terlupa Menyerahkan juga akan menyebabkan jadual dikunci.

Meluaskan pengetahuan:

Adalah disyorkan untuk menyemak sebab penguncian meja sebelum membuat keputusan.

1 Kod untuk pertanyaan jadual kunci mempunyai bentuk berikut:

select count(*) from v$locked_object;
select * from v$locked_object;

2 Semak jadual mana yang dikunci

select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;

3 Semak sesi yang menyebabkannya.

select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;

Tutorial yang disyorkan: "Tutorial Video Oracle"

Atas ialah kandungan terperinci Adakah memasukkan dalam Oracle mengunci jadual?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn