程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle中表的鎖定

oracle中表的鎖定

編輯:Oracle教程

oracle中表的鎖定


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

鎖有“只讀鎖”、“排它鎖”,“共享排它鎖”等多種類型,而且每種類型又有“行級鎖”(一次鎖住一條記錄),“頁級鎖”(一次鎖住一頁,即數據庫中存儲記錄的最小可分配單元),“表級鎖”(鎖住整個表)。

若為“行級排它鎖”,則除被鎖住的行外,該表中其他行均可被其他的用戶進行修改(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;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved