欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          oracle中insert會鎖表嗎

          oracle中insert會鎖表;當oracle執(zhí)行insert等DML語句時,會在所操作的表上申請一個鎖,兩個insert語句同時試圖向一個表進行操作時,就會造成會話被堵塞,等待其他會話提交或回滾,因而造成死鎖。

          oracle中insert會鎖表嗎

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

          oracle中insert會鎖表嗎

          oracle中insert會鎖表

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

          考慮是因為兩個insert語句同時試圖向一個表中插入PK或unique值相同的數(shù)據(jù),而造成其中會話被阻塞,等待其它會話提交或回滾,因而造成死鎖。

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

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

          主要的鎖表原因有:

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

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

          減少鎖表的概率方法:

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

          (2)如果異常對事物進行回滾

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

          擴展知識:

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

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

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

          2.查看哪個表被鎖

          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查看是哪個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號-2    滬公網(wǎng)安備31011702889846號