oracle中表的鎖定

2021-07-03 07:37:39 字數 1830 閱讀 5016

鎖的概念

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

鎖有「唯讀鎖」、「排它鎖」,「共享排它鎖」等多種型別,而且每種型別又有「行級鎖」(一次鎖住一條記錄),「頁級鎖」(一次鎖住一頁,即資料庫中儲存記錄的最小可分配單元),「表級鎖」(鎖住整個表)。 

若為「行級排它鎖」,則除被鎖住的行外,該表中其他行均可被其他的使用者進行修改(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中表的操作

基本的建立就不說了,這裡說一些不常見的方法,表示很好用 通過子查詢建立表 通過子查詢建立新的圖書表。步驟1 完全複製圖書表到 圖書1 輸入並執行以下命令 create table 圖書1 as select from 圖書 步驟2 建立新的圖書表 圖書2 只包含書名和單價,輸入並執行以下命令 cre...

ORACLE中表死鎖的處理

oracle中表死鎖的處理 在進行資料庫管理的過程中,經常會出現資料表被使用者的一些不合理操作而導致表被鎖定的情況,以下主要介紹如何查詢哪些表被哪個使用者所鎖定,以及如何解除鎖定 1.查詢被鎖定的表 如果想知道具體是哪個程序阻塞了哪個程序,可用以下語句檢視 select username,v loc...

相關oracle中表的操作

建立表空間 create tablespace ts datafile e ts.dbf size 10m autoextend on next 1m maxsize 100m 建立使用者,並制定表空間 create user yx identified by yx create table t h...