久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      oracle中insert會(huì)鎖表嗎

      oracle中insert會(huì)鎖表;當(dāng)oracle執(zhí)行insert等DML語(yǔ)句時(shí),會(huì)在所操作的表上申請(qǐng)一個(gè)鎖,兩個(gè)insert語(yǔ)句同時(shí)試圖向一個(gè)表進(jìn)行操作時(shí),就會(huì)造成會(huì)話被堵塞,等待其他會(huì)話提交或回滾,因而造成死鎖。

      oracle中insert會(huì)鎖表嗎

      本教程操作環(huán)境:Windows10系統(tǒng)、Oracle 11g版、Dell G3電腦。

      oracle中insert會(huì)鎖表嗎

      oracle中insert會(huì)鎖表

      當(dāng)ORACLE執(zhí)行insert等DML語(yǔ)句時(shí),會(huì)首先自動(dòng)在所要操作的表上申請(qǐng)一個(gè)TM鎖,當(dāng)TM鎖獲得后,再自動(dòng)申請(qǐng)TX類型的鎖。當(dāng)兩個(gè)或多個(gè)會(huì)話在表的同一條記錄上執(zhí)行DML語(yǔ)言時(shí),第一個(gè)會(huì)話在記錄上加鎖,其它的會(huì)話處于等待狀態(tài),一直到第一個(gè)會(huì)話提交后TX鎖釋放,其它的會(huì)話才可以加鎖。

      考慮是因?yàn)閮蓚€(gè)insert語(yǔ)句同時(shí)試圖向一個(gè)表中插入PK或unique值相同的數(shù)據(jù),而造成其中會(huì)話被阻塞,等待其它會(huì)話提交或回滾,因而造成死鎖。

      這種情況,只要其中任何一個(gè)session提交,另外一個(gè)就會(huì)報(bào)出ORA-00001:違反唯一性約束條件,死鎖終止;或者其中一個(gè)session回滾,另外一個(gè)即可正常執(zhí)行。

      在oracle中,鎖表的原因是當(dāng)一個(gè)程序執(zhí)行了對(duì)一個(gè)表的insert,并且還未commite時(shí),另一個(gè)程序也對(duì)同一個(gè)表進(jìn)行insert,則此時(shí)就會(huì)發(fā)生資源正忙的異常,也就是鎖表。

      主要的鎖表原因有:

      (1) A程序執(zhí)行了對(duì) tableA 的 insert ,并還未 commite時(shí),B程序也對(duì)tableA 進(jìn)行insert 則此時(shí)會(huì)發(fā)生資源正忙的異常 就是鎖表

      (2)鎖表常發(fā)生于并發(fā)而不是并行(并行時(shí),一個(gè)線程操作數(shù)據(jù)庫(kù)時(shí),另一個(gè)線程是不能操作數(shù)據(jù)庫(kù)的,cpu 和i/o 分配原則)

      減少鎖表的概率方法:

      (1)減少insert 、update 、delete 語(yǔ)句執(zhí)行 到 commite 之間的時(shí)間。具體點(diǎn)批量執(zhí)行改為單個(gè)執(zhí)行、優(yōu)化sql自身的非執(zhí)行速度

      (2)如果異常對(duì)事物進(jìn)行回滾

      鎖表原因可能是修改了行數(shù)據(jù),忘了提交,也會(huì)造成鎖表。

      擴(kuò)展知識(shí):

      鎖表建議先查原因再做決定。

      1鎖表查詢的代碼有以下的形式:

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

      2.查看哪個(gè)表被鎖

      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查看是哪個(gè)session引起的

      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;

      推薦教程:《Oracle視頻教程》

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)