oracle中表的鎖定

來源:互聯網
上載者:User

標籤:

鎖的概念
鎖出現在資料共用的場合,用來保證資料的一致性。當多個會話同時修改一個表時,需要對資料進行相應的鎖定。

鎖有“唯讀鎖”、“排它鎖”,“共用排它鎖”等多種類型,而且每種類型又有“行級鎖”(一次鎖住一條記錄),“頁級鎖”(一次鎖住一頁,即資料庫中儲存記錄的最小可配置單位),“表級鎖”(鎖住整個表)。 

若為“行級排它鎖”,則除被鎖住的行外,該表中其他行均可被其他的使用者進行修改(Update)或刪除(delete)。若為“表級排它鎖”,則所有其他使用者只能對該表進行查詢(select)操作,而無法對其中的任何記錄進行修改或刪除。當程式對所做的修改進行提交(commit)或復原(rollback)後,鎖住的資源便會得到釋放,從而允許其他使用者進行操作。 
如果兩個事務,分別鎖定一部分資料,而都在等待對方釋放鎖才能完成事務操作,這種情況下就會發生死結。

隱式鎖和顯式鎖
在Oracle資料庫中,修改資料操作時需要一個隱式的獨佔鎖,以鎖定修改的行,直到修改被提交或撤銷為止。如果一個會話鎖定了資料,那麼第二個會話要想對資料進行修改,只能等到第一個會話對修改使用COMMIT命令進行提交或使用ROLLBACK命令進行復原撤銷後,才開始執行。因此應養成一個良好的習慣:執行修改操作後,要儘早地提交或撤銷,以免影響其他會話對資料的修改。

 對emp表的SCOTT僱員記錄進行修改,測試隱式鎖。步驟1:啟動第一個SQL*Plus,以SCOTT賬戶登入資料庫(第一個會話),修改SCOTT記錄,隱式加鎖。UPDATE emp SET sal=3500 where empno=7788;步驟2:啟動第二個SQL*Plus,以SCOTT賬戶登入資料庫(第二個會話),進行記錄修改操作。UPDATE emp SET sal=4000 where empno=7788;步驟3:對第一個會話進行解鎖操作:COMMIT;步驟4:查看第二個會話,此時有輸出結果:步驟5:提交第二個會話,防止長時間鎖定。

表的顯式鎖定


 鎖定行 
對emp表的部門10的僱員記錄加顯式鎖,並測試。

對部門10加顯式鎖:SELECT empno,ename,job,sal FROM emp WHERE deptno=10 FOR UPDATE;

步驟1:對部門10加顯式鎖:SELECT empno,ename,job,sal FROM emp WHERE deptno=10 FOR UPDATE;步驟2:啟動第二個SQL*Plus(第二個會話),以SCOTT賬戶登入資料庫,對部門10的僱員CLARK進行修改操作。UPDATE emp SET sal=sal+100 where empno=7782;步驟3:在第一個會話進行解鎖操作:COMMIT;步驟4:查看第二個會話,有輸出結果:

鎖定表
LOCK語句用於對整張表進行鎖定。
對錶的鎖定可以是共用(SHARE)或獨佔(EXCLUSIVE)模式。共用模式下,其他會話可以加共用鎖定,但不能加獨佔鎖。在獨佔模式下,其他會話不能加共用或獨佔鎖。
【訓練1】  對emp表添加獨佔鎖。
步驟1:對emp表加獨佔鎖:
LOCK TABLE emp IN EXCLUSIVE MODE;

步驟2:對錶進行解鎖操作:
COMMIT;

oracle中表的鎖定

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.