Artikel ini membawakan anda pengetahuan yang berkaitan tentang Oracle Semasa membangunkan pangkalan data Oracle, kami sering menemui jadual data Oracle yang kerap dikendalikan, dan jadual kunci Oracle akan muncul di sini maklumat yang berkaitan tentang penyelesaian jadual kunci Oracle Saya harap ia akan membantu semua orang.
Tutorial yang disyorkan: "Tutorial Video Oracle"
Saya percaya semua orang biasa dengan kunci meja atau tamat masa kunci, yang sering berlaku dalam DML Dalam penyata, sebabnya ialah mekanisme penguncian eksklusif pangkalan data Apabila penyataan DML dilaksanakan, data jadual atau baris dikunci sehingga urus niaga dilakukan atau dibatalkan atau sesi semasa ditamatkan secara paksa.
Untuk sistem aplikasi kami, penguncian jadual kemungkinan besar akan berlaku apabila pelaksanaan SQL adalah perlahan dan tiada tamat masa (SQL telah tidak berjaya dilaksanakan atas sebab tertentu (alat Sudu melakukan pengekstrakan dan tolak data) dan telah Jangan lepaskan sumber) Oleh itu, adalah amat penting untuk menulis SQL yang cekap! Terdapat juga situasi lain di mana penguncian jadual mungkin berlaku, yang merupakan senario konkurensi yang tinggi Masalah yang disebabkan oleh konkurensi yang tinggi ialah transaksi Spring akan menyebabkan transaksi pangkalan data tidak komited dan menyebabkan kebuntuan (urus niaga semasa sedang menunggu transaksi lain untuk melepaskan kunci. sumber)! Oleh itu melemparkan pengecualian java.sql.SQLException: Lock tunggu tamat masa melebihi;.
Jadi bagaimana untuk menyelesaikan jadual kunci atau tamat masa kunci? Penyelesaian sementara adalah untuk mengetahui jadual atau pernyataan yang bersaing untuk sumber kunci, secara langsung menamatkan sesi atau sesi semasa dan memaksa keluaran sumber kunci. Contohnya
1 Sesi1 mengubah suai data tertentu tetapi tidak menyerahkan transaksi dan sesi2 menanyakan rekod transaksi yang tidak komited
2. Sesi2 cuba mengubah suai Kita dapat melihat bahawa rekod mengubah suai transaksi tidak komited akan berada dalam keadaan menunggu sehingga yang lain pihak melepaskan sumber kunci atau menutup sesi1 secara paksa. Ini juga menunjukkan bahawa Oracle telah mencapai kunci peringkat baris! Ini hanyalah simulasi ringkas situasi kunci meja Ia boleh dilihat secara sepintas lalu bahawa kunci meja disebabkan oleh sesi1. Apabila menghadapi situasi seperti ini dalam pembangunan sebenar, SQL biasanya digunakan untuk mengetahui secara langsung jadual atau pernyataan yang bersaing untuk mendapatkan sumber kunci dan kemudian melepaskan sumber secara paksa! ! 3. Sesi3 menanyakan jadual atau pernyataan yang bersaing untuk mendapatkan sumber dan memaksa pengeluaran sumber
-- 查询未提交事务的session信息,注意执行以下SQL,用户需要有DBA权限才行 SELECT L.SESSION_ID, S.SERIAL#, L.LOCKED_MODE AS 锁模式, L.ORACLE_USERNAME AS 所有者, L.OS_USER_NAME AS 登录系统用户名, S.MACHINE AS 系统名, S.TERMINAL AS 终端用户名, O.OBJECT_NAME AS 被锁表对象名, S.LOGON_TIME AS 登录数据库时间 FROM V$LOCKED_OBJECT L INNER JOIN ALL_OBJECTS O ON O.OBJECT_ID = L.OBJECT_ID INNER JOIN V$SESSION S ON S.SID = L.SESSION_ID WHERE 1 = 1
Paksa kami Hanya dua medan pertama yang berguna untuk melepaskan sumber Contohnya,
-- 强制 结束/kill 锁表会话语法 ALTER SYSTEM KILL SESSION 'SESSION_ID, SERIAL#'; -- 强制杀死session1,让session2可以修改id=5的那条记录 ALTER SYSTEM KILL SESSION '34, 111';
Tutorial Video Oracle"
Atas ialah kandungan terperinci Penjelasan grafik dan teks terperinci mengenai penyelesaian jadual kunci Oracle. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!